2つのサーバー間でMySQLデータベース全体をコピーするには?

2つのサーバー間でMySQLデータベース全体をコピーするには?

2つのシステム間に良好な接続があります(MySQL 5.5.28)。

mysqldump -u root -p'password' --all-databases | ssh root@SERVERNAME mysql -u root -p'password' --all-databases

私が知っている限り、このワンライナーはサーバー#AからMySQLダンプを取得し、そのダンプをサーバー#Bにコピーしてから「サーバー#Bにインポートする」と同じです。

第1四半期:データベースには何もありませんか?これが最速の方法ですか? :)またはより速いものがありますか?これらすべてが行われている間に何か問題が発生しますか?

第2四半期:サーバー#Bでの転送が完全に成功したかどうかをテストする方法は? 2つのデータベースが「ビットごとに」同じであることを確認する方法は?

答え1

まず、どのストレージエンジンを使用するかが非常に重要であることに気づく必要があります。

両方のmysqlサーバーのバージョンが同じであるとします。その後、MyISAMテーブルでmysqlhotcopyを使用できます。これは非常に高速ですが、この方法はMyISAMテーブルに制限されています。 mysqlhotcopyはファイルを直接コピーするため、両方のデータベースが「ビット単位で」同じ場合diff

バージョン5.5.5以降、INNODBはデフォルトのストレージエンジンです。 INNODBストレージエンジンを使用すると、状況が異なるように見えます。この場合は使用できmysqlhotcopyませんmysqldump

.を使用すると、いくつかの問題が発生する可能性がありますmysqldump。たとえば、サーバー#Aのデータベースに存在しないテーブルビューがある場合、mysqlはパイプラインの右側に存在しないテーブルビューを作成しようとしますが失敗します。この場合、このオプションを使用すると中断を防ぐことができます--force

mysql --force ...

mysqlデータベース全体をコピーしmysqldumpて両方のサーバーのダンプを比較したところ、ダンプのタイムスタンプだけが異なることがわかりました。これがあなたの解決策かもしれません。

あなたが見なければならない他のオプションがありますmysqldump。たとえば、私はこう考えました。

--add-drop-database
--add-drop-table
--single-transaction    ( for transactional tables only (like INNODB))

関連情報