GNU/Linux >> Linux の 問題 >  >> Linux

MySQL から権限をエクスポートして、新しいサーバーにインポートするにはどうすればよいですか?

解決策 1:

mysql db をいじらないでください。そこでは、users テーブル以外にも多くのことが行われています。あなたの最善の策は、「SHOW GRANTS FOR」コマンドです。私の .bashrc には、多くの CLI メンテナンス エイリアスと関数があります (実際には、.bashrc で入手した .bash_aliases です)。この機能:

mygrants()
{
  mysql -B -N [email protected] -e "SELECT DISTINCT CONCAT(
    'SHOW GRANTS FOR \'', user, '\'@\'', host, '\';'
    ) AS query FROM mysql.user" | \
  mysql [email protected] | \
  sed 's/\(GRANT .*\)/\1;/;s/^\(Grants for .*\)/## \1 ##/;/##/{x;p;x;}'
}

最初の mysql コマンドは SQL を使用して、2 番目の mysql コマンドにパイプされる有効な SQL を生成します。その後、出力は sed を介してパイプ処理され、きれいなコメントが追加されます。

コマンドの [email protected] により、次のように呼び出すことができます:mygrants --host=prod-db1 --user=admin --password=secret

次のように、完全な UNIX ツール キットを使用できます。

mygrants --host=prod-db1 --user=admin --password=secret | grep rails_admin | mysql --host=staging-db1 --user=admin --password=secret

それがユーザーを動かす正しい方法です。 MySQL ACL は純粋な SQL で変更されています。

解決策 2:

MySQL インスタンスから SQL Grants を抽出するには 2 つの方法があります

方法 #1

pt-show-grants を使用できます Percona ツールキットから

MYSQL_CONN="-uroot -ppassword"
pt-show-grants ${MYSQL_CONN} > MySQLUserGrants.sql

方法 #2

pt-show-grants をエミュレートできます 以下で

MYSQL_CONN="-uroot -ppassword"
mysql ${MYSQL_CONN} --skip-column-names -A -e"SELECT CONCAT('SHOW GRANTS FOR ''',user,'''@''',host,''';') FROM mysql.user WHERE user<>''" | mysql ${MYSQL_CONN} --skip-column-names -A | sed 's/$/;/g' > MySQLUserGrants.sql

いずれの方法でも、MySQL 付与の純粋な SQL ダンプが生成されます。あとは、新しいサーバーでスクリプトを実行するだけです:

mysql -uroot -p -A < MySQLUserGrants.sql

試してみてください!!!

解決策 3:

Richard Bronosky の回答は、私にとって非常に役に立ちました。どうもありがとう!!!

これは私にとって役に立った小さなバリエーションです。ユーザーを転送するのに役立ちます。 phpmyadmin を実行している 2 つの Ubuntu インストール間。 root、phpmyadmin、および debian-sys-maint を除くすべてのユーザーの権限をダンプするだけです。コードは

mygrants()
{
mysql -B -N [email protected] -e "SELECT DISTINCT CONCAT(
'SHOW GRANTS FOR ''', user, '''@''', host, ''';'
) AS query FROM mysql.user WHERE user NOT IN ('root','phpmyadmin','debian-sys-maint')"  | \
mysql [email protected] | \
sed 's/\(GRANT .*\)/\1;/;s/^\(Grants for .*\)/## \1 ##/;/##/{x;p;x;}'
}

解決策 4:

または、percona-toolkit (以前の maatkit) を利用して pt-show-grants を使用します (または mk-show-grants ) その目的のために。面倒なスクリプトやストアド プロシージャは必要ありません。

解決策 5:

「mysql」データベースを mysqldump して、新しいデータベースにインポートできます。 flush_privileges または再起動が必要になるため、最初に既存の mysq db をバックアップすることをお勧めします。

既存の権限を削除しないようにするには、権限テーブル (db、columns_priv、host、func など) の行を置き換えるのではなく、必ず追加してください。


Linux
  1. 新しいMySQLユーザーを追加してアクセス権限を付与する方法

  2. mysql にログインして Linux ターミナルからデータベースにクエリを実行する方法

  3. コマンドラインから PHP コードを実行するにはどうすればよいですか?

  1. CloudFlareでDNS設定をエクスポートおよびインポートする方法

  2. Ftpサーバーからファイルをダウンロードし、ダウンロードが完了したらサーバーからファイルを自動的に削除する方法は?

  3. MYSQL MariaDB でエクスポート データベースをインポートする方法

  1. 新しいMySQLユーザーを作成して権限を付与する方法

  2. Linux でファイルとディレクトリのサイズを確認するにはどうすればよいですか?

  3. Linux に DHCP サーバーから新しい IP アドレスを強制的に再取得させるにはどうすればよいですか?