web-dev-qa-db-ja.com

MySQLのエクスポートとインポートを高速化する方法

サーバーAからサーバーBへのDB移行を実行する必要があります。

サーバーA:MySQLバージョン5.0.6がインストールされている

サーバーB:5.6.20がインストールされているMySQLバージョン

OS:どちらもRedHat Linux 64ビットを実行しています。 16 RAMメモリ。

MyISAM、InnoDB、アーカイブデータベースがあります。

合計サイズは約4TB。

最大のMyISAMデータベース= 3.2TB

最大のInnoDBデータベース= 85GB

key_buffer_size=2GB.

最大のInnoDBテーブル(85GB)でmysqldumpを実行しました

time /usr/local/mysql/bin/mysqldump -uroot -p --extended-insert --single-transaction ABCEx > ABCEx.sql

5時間実行した後、ダンプファイルは145GBになり、まだ完了していません。

-rw-rw-r-- 1 mysql mysql 145019313099 Mar 2 05:12 ABCEx.sql

私は輸出時間と輸入も心配しています。これを促進するための助けはありますか?

MyISAMテーブルの移行については、.myd .frm .myiファイルをサーバーAからBにコピーして移行することを読みました。以前に実行したことがある場合は、ガイドまたはリンクを提供できますか? 3.2TBのMyISAMデータベースについて話している。

助けてください....大歓迎です:)

4
Haans

サーバー間でテーブルを移行する最良の方法は、バイナリの「ネイティブ」形式で移行することです。 (mysqldumpのように)シリアル論理ダンプを実行すると、非常に大きなデータベースで数日かかるだけでなく、リカバリにさらに時間がかかります。

ソースサーバーでInnoDBテーブルの可用性を維持する必要がある場合、最善の方法は、MySQL Enterprise Backup (Oracleサブスクリプションの一部)などのユーティリティを使用するか、ソースの類似ツール Percona XtraBackup。最後のものはLinuxホストでのみ機能することに注意してください。

ほとんどのデータがMyISAM /アーカイブ形式である場合、バックアップの実行に関して、可用性と一貫性を同時に保証することはできません。その場合、最良の方法はスナップショットを実行することです(ファイルシステムまたは環境-VM、LVM-が許可する必要があります)。 mylvmbackupなどのツールは、プロセスを簡略化します。考えられる最悪のシナリオでは、これらのテーブルをロック-FLUSH TABLES WITH READ LOCKすでにmysqldumpのために実行している)、または単にシャットダウンすることもできます。サーバー全体、、. frm、MYI、MYDファイルをコピーします(MyISAMの場合)。 InnoDB(.ibd)ファイルをコピーするだけでは機能しないことに注意してください; MySQL 5.6とLOCK TABLES ... FOR EXPORT + ALTER TABLE...DISABLE/ENABLE TABLESPACE構造が必要です。 Rsyncは、MySQLが利用できない時間を短縮するのに役立ちます。

MySQLのバイナリファイルは、異なるノード、アーキテクチャ、OS間でほぼ100%互換性があることに注意してください。

最後のオプションは、ファイルシステムにアクセスできない場合、より最適化された方法で論理バックアップを実行し、並列に実行するです。 ---(mydumper のようなツールはそれを大幅に簡素化し、XtraBackupまたはEnterpriseバックアップが機能しない場合に非常に使用されます。それは遅くなりますが、良いシナリオではmysqldumpの5〜10倍速くなります。

4
jynus

mydumper よりも「ネイティブな」バイナリバックアップを作成できない、またはしたくない場合は、適切な代替手段です。ロードのダンプは、通常のmysqldumpバックアップよりもはるかに高速です。

0
tersmitten