web-dev-qa-db-ja.com

あるサーバーから別のサーバーにデータベースを移動する最速の方法

同じネットワーク上の1つのサーバーから別のサーバーに単一のMySQLデータベース(非圧縮で約10 GB)を移動しています。現在のMySQLバージョンは5.1.41および新しいバージョンは5.5.24。データベースにはMyISAMテーブルとInnoDBテーブルの両方が含まれています。この方法を使用することは可能ですか?

  1. 両方のサーバーでMySQLをシャットダウンします
  2. /data古いサーバーから新しいサーバーへのディレクトリ
  3. 新しいサーバーを起動

私はこの基本的な質問がおそらく1000回前に行われたことを理解していますが、私が見た質問のほとんどはバージョンの変更とMyISAMとInnoDBの両方のサポートについて言及していません。

7
bloudermilk

バージョンを変更する場合は、mysqlスキーマを移動しないでください

Mysqlフォルダーを移動すべきではないのはなぜですか?これは認証特権と関係があります。

Mysql.userの列数はバージョンごとに異なります

desc mysql.userを実行した場合

  • MySQL 4.1の31行が表示されます
  • MySQL 5.0の37行が表示されます
  • MySQL 5.1では39行が表示されます
  • MySQL 5.5の42行が表示されます

私は前にこれについて書いた

他のすべてを移動しても問題ありません。 MySQL 5.5.24がインストールされた新しいマシンで、次のようにします。

mv /var/lib/mysql /var/lib/mysql/mysql55
mkdir /var/lib/mysql
<scp or rsync /var/lib/mysql of MySQL 5.1.41 over to /var/lib.mysql of MySQL 5.5.24>
rm -f /var/lib/mysql/mysql/*
cp /var/lib/mysql/mysql55/* /var/lib/mysql/mysql/*
chown -R mysql:mysql /var/lib/mysql
service mysql start

したがって、問題は残ります:

古いMySQL 5.1.41のユーザー権限をどのようにMySQL 5.5.24に移動しますか???

これをMySQL 5.1.41マシンで開始するには、2つの方法があります。

方法#1: pt-show-grants を使用する

このPerconaツールキットプログラムは、Pure SQLのユーザー権限を印刷出力します。結果出力をテキストファイルに実行できます。次に、MySQL 5.5.24でテキストファイルを実行します。物語の終わり。

pt-show-grants ... > MySQLUserGrants.sql

方法#2:pt-show-grantsをエミュレートする

私はpt-show-grantsのために自分のテクニックを作りました

mysql -hhostaddr -umyuserid -pmypassword --skip-column-names -A -e"SELECT CONCAT('SHOW GRANTS FOR ''',user,'''@''',Host,''';') FROM mysql.user WHERE user<>''" | mysql -hhostaddr -umyuserid -pmypassword --skip-column-names -A | sed 's/$/;/g' > MySQLUserGrants.sql

どちらの方法でも、MySQLUserGrants.sqlをMySQL 5.5.24マシンに移動してスクリプトを実行します

私はこれについて前に書いた: myisam 5.0データベースを5.5 innodbサーバーにインポートする

5
RolandoMySQLDBA

5.1-> 5.5へのアップグレードを数回行った後、2番目のサーバーで5.1から5.5にアップグレードする方法を次に示します。

  1. 5.1インスタンスをシャットダウンする
  2. データディレクトリをコピーします(多くの場合/var/lib/mysql)5.1サーバーから5.5サーバーへ(rsync、scp、CDROM、bittorrent、タイプライターなど)
  3. データディレクトリと5.5上のすべてのファイルがmysqlユーザーによって所有されていることを確認してください
  4. MySQL 5.5を起動します
  5. エラーログでエラーを確認してください。おそらく、mysqlデータベースのさまざまなテーブルに欠落しているフィールドがいくつかあります。
  6. 実行mysql_upgrade
  7. mySQL 5.5を停止する
  8. mySQL 5.5を起動します
  9. エラーログを再度確認してください。これらのエラーは解決する必要があります。
  10. マルガリータをどうぞ。

ログに未解決のエラーがない限り、さらに複雑にする必要はありません。

1
Aaron Brown

メジャーバージョンの移動は 推奨 mysqldumpを実行してリロードします。マイナーバージョンは問題ないと見なされますが、提供されている mysql_upgrade binary を実行する必要があります。

これを実現する最も速い方法は、サーバーがVPNを介して接続されているため、そのレベルで暗号化を処理できることを前提としています。 VPN全体でrsyncを行うと、再暗号化のCPUオーバーヘッドが増加します。新しいサーバーで準備するには、mysql_install_dbを使用して新しいセットアップを行います

新しいサーバーで最初に実行

nc -l 12345 | mysql -u root -p 

これは、古いサーバーで次の手順を実行するまで、ハングしてポート12345で待機します。

mysqldump -u root -p --databases db1 db2 db3 | nc new-server-hostname 12345 

このようにリロードを行うと、テーブルをデフラグする利点が追加されます。この例は、ダンプの実行中に5.1 DBがロックされてもかまわないことを意味します。

0
atxdba