web-dev-qa-db-ja.com

MySQLユーザーテーブルをあるサーバーから別のサーバーにコピーするにはどうすればよいですか?

新しいMySQLサーバーをセットアップしていますが、既存のサーバー(廃止予定)と同じユーザー名、許可されたホスト、およびパスワードのセットを提供したいと考えています。

Usersテーブルのダンプを実行し、それを新しいサーバーにロードするだけで機能しますか?

それより良い方法はありますか?

40
Agvorth
oldserver$ mysqldump mysql > mysql.sql
newserver$ mysql mysql < mysql.sql
newserver$ mysql 'flush privileges;'

それを行う必要がある場合は、-u $USERおよび-p$PASSWORD 要求に応じ

34
Dave Cheney

Percona Toolkitを見てみましょう。 pt-show-grantsツールの説明にすべてが書かれています...

pt-show-grantsは、MySQLユーザーアカウントの許可を抽出、注文、印刷します。

なぜこれが欲しいのですか?いくつかの理由があります。

1つ目は、サーバー間でユーザーを簡単に複製することです。最初のサーバーから許可を抽出し、出力を別のサーバーに直接パイプすることができます。

2番目の使用法は、あなたの許可をバージョン管理に入れることです...

21
Aaron Bush

mysqlデータベースのダンプはおそらく機能しますが、私の経験では、すべてのアクセスを適切に文書化し、GRANTステートメントで再度設定する方がはるかに優れています。このようにすると、2つの利点があります。

  1. データベースのセキュリティとその実装方法を理解します。
  2. 不要になったアクセスを削除することができます。
14
staticsan

受け入れられた回答(mysqldumpを使用してmysql.userテーブルをバックアップする)は、新しいサーバーバージョンに移行する場合、非常に危険なアプローチです。

私はこれを以前に行いました(ユーザーをMysql 4からMysql 5.1に移行しました)。後で、データベースユーザーに権限を付与または変更しようとして問題が発生しました。

これは、ここで説明するように、mysql.usersテーブルの構造がmysqlサーバーのバージョン間で異なるために発生します。

https://dba.stackexchange.com/a/16441/18472

したがって、サーバーのバージョンをアップグレードする場合は注意してください。ここにいくつかのヒント:

https://stackoverflow.com/a/13218162/710788

11
abu
11
Bruno Bronosky

mysqldumpは機能しますが、mysqlデータベースはISAMを使用するため、ディレクトリを新しいサーバーにコピーするだけで済みます。これはさまざまな場所にありますが、mysqlデータベースの最も一般的な場所は/ var/lib/mysql/mysqlです。新しいサーバーでmysqlを停止し、古いディレクトリを邪魔にならない場所に移動して、ディレクトリをコピーして再起動してください。ルートとして標準の場所を使用する例:

# /etc/init.d/mysqld stop
# cd /var/lib/mysql
# mv mysql ../mysql.backup
# rsync -a root@oldserver:/var/lib/mysql/mysql .
# /etc/init.d/mysql start
5
Tim

grantコマンドを実行するのはとても簡単です。みたいです

Database.tableのALLを、「password」で識別される「user」@「Host」に付与します。

そう

「somepass」で識別される「jack」@「localhost」へのデータベースの*。

2
Trausti Thor