移行のために、すべてのMySQLデータベースユーザー(権限を含む)をエクスポートする必要があります。 5,000人を超えるユーザーがいますが、これを行うための最良の方法は何ですか?
mysql.user
テーブル?
MySQLの同じメジャーバージョンを実行している別のDBサーバーにユーザーを移動する場合は、mysql.user
では不十分です。ユーザーが特定のデータベースにアクセスできる場合は、mysql.user
は、ユーザーとパスワードを提供します。
次に、以下をコピーする必要があります
mysql.db
データベースレベルの付与mysql.tables_priv
テーブルレベルの付与mysql.columns_priv
列レベルの付与これをダンプする論理的な方法は次のとおりです。SQLGRANTコマンドとして!!!
Percona Toolkitが既にインストールされている場合は、テキストファイルに対して pt-show-grants を実行します
GRANT_FILE=MyDatabaseUSers.sql
pt-show-grants -uroot -p > ${GRANT_FILE}
Percona Toolkitがなく、待ちきれない場合は、これを個人的にエミュレートします
GRANT_CMDS=/tmp/ShowGrantsToExport.sql
GRANT_FILE=MyDatabaseUSers.sql
MYSQL_USER=root
MYSQL_PASS=rootpassword
MYSQL_CONN="-u${MYSQL_USER} -p${MYSQL_PASS}"
SQL="SELECT CONCAT('SHOW GRANTS FOR ',QUOTE(user),'@',QUOTE(Host),';')"
SQL="${SQL} FROM mysql.user WHERE user<>'' AND Host<>''"
mysql ${MYSQL_CONN} -ANe"${SQL}" > ${GRANT_CMDS}
mysql ${MYSQL_CONN} < ${GRANT_CMDS} | sed 's/$/;/g' > ${GRANT_FILE}
新しいDBサーバーで、データを移行した後、mysqlにrootとしてログインして実行します。
mysql> source MyDatabaseUSers.sql
以下は上記のRolandoによるスクリプトですが、より簡潔でUNIX風です。 MySQLと同じように、コマンドでオプションを渡すだけです。 stdoutに出力します。出力は、mysqlに直接フィードバックできます。
#!/bin/sh
mysql -AN <<'SQL' "$@" | mysql "$@" | sed 's/$/;/;/^Grants for /d'
SELECT CONCAT('SHOW GRANTS FOR ',QUOTE(user),'@',QUOTE(Host),';')
FROM mysql.user WHERE user<>'' AND Host<>''
ORDER BY user, Host
;
SQL
MySQLツールを使用します。 mysqluserclone
mysqluserclone --source=root:PASSWORD@localhost --list -d
すべてのユーザーと対応するGRANT
ステートメントのリストが表示されます。
新しいデータベースにリモートアクセスできる場合は、--destination
パラメータを使用することもできます。