web-dev-qa-db-ja.com

すべてのMySQLユーザーをエクスポートする

移行のために、すべてのMySQLデータベースユーザー(権限を含む)をエクスポートする必要があります。 5,000人を超えるユーザーがいますが、これを行うための最良の方法は何ですか?

mysql.user テーブル?

7
Justin

MySQLの同じメジャーバージョンを実行している別のDBサーバーにユーザーを移動する場合は、mysql.userでは不十分です。ユーザーが特定のデータベースにアクセスできる場合は、mysql.userは、ユーザーとパスワードを提供します。

次に、以下をコピーする必要があります

  • mysql.dbデータベースレベルの付与
  • mysql.tables_privテーブルレベルの付与
  • mysql.columns_priv列レベルの付与

これをダンプする論理的な方法は次のとおりです。SQLGRANTコマンドとして!!!

提案#1

Percona Toolkitが既にインストールされている場合は、テキストファイルに対して pt-show-grants を実行します

GRANT_FILE=MyDatabaseUSers.sql
pt-show-grants -uroot -p > ${GRANT_FILE}

提案#2

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

試してみる !!!

8
RolandoMySQLDBA

以下は上記の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
0
Otheus

MySQLツールを使用します。 mysqluserclone

mysqluserclone  --source=root:PASSWORD@localhost --list -d

すべてのユーザーと対応するGRANTステートメントのリストが表示されます。

新しいデータベースにリモートアクセスできる場合は、--destinationパラメータを使用することもできます。

0
Pascal Fares