RDSインスタンスの移行などでMySQLアカウントをパスワード、権限そのままコピーしたいことがある。
#!/bin/bash set -euo pipefail source .env echo 'SELECT User, Host FROM mysql.user' | \ mysql -uroot -p${OLD_DB_PASSWORD} -h ${OLD_DB_HOST} | \ sed -E -e "/^User|root|mysql\.infoschema||mysql\.session|mysql\.sys|rdsrepladmin|rdsadmin\t/d" -e "s/^(.+)\t(.+)$/'\1'@'\2'/" -e "s/^(.+)$/SHOW CREATE USER \1;\nSHOW GRANTS FOR \1;/" | \ mysql -uroot -p${OLD_DB_PASSWORD} -h ${OLD_DB_HOST} | \ sed -E -e '/^CREATE\ USER\ for\ /d' -e '/^Grants\ for\ /d' -e 's/$/;/' | \ mysql -uroot -p${NEW_DB_PASSWORD} -h ${NEW_DB_HOST}
.envはこのように用意しておく
OLD_DB_HOST='foo.ap-northeast-1.rds.amazonaws.com' OLD_DB_PASSWORD='foo-password' NEW_DB_HOST='bar.ap-northeast-1.rds.amazonaws.com' NEW_DB_PASSWORD='bar-password'