web-dev-qa-db-ja.com

mysqldumpを使用しない大規模なMySQLデータベースのエクスポート/インポート

数百のテーブルを持つデータベースから約150GBのデータをエクスポートしようとしていますが、mysqldumpは非常にバグが多いことがわかりました。

単純な--all-databasesダンプを実行した後、ダンプは成功しますが、インポートでは常にランダムな(そして頻繁な)エラーが発生します。ダンプファイル内の引用符が正しくエスケープされていないため、これらは一般にSQLステートメントの構文エラーです。

以前に実際のデータファイルをコピーして生データ転送を実行しましたが、インポート先のサーバーでファイルシステムにアクセスできません。

非常に大規模なエクスポート/インポートのために、mysqldumpよりもバグの少ない他のツールはありますか?

6
user1091923

Percona Xtrabackupで解決した同じ問題がありました。無料で、高速で、一貫しています。

4
Danillo Souza

MySQLの場合、これらのメソッド(mysqldump以外)があります。

  • 選択して...出力ファイルに:すべてのエンジンをサポートします。ウォームバックアップに使用できます。バックアップとリカバリには時間がかかります。

  • mk-parallel-backup:すべてのエンジンをサポートします。ウォームバックアップに使用され、リカバリ速度は中程度です。

  • ibbackup:すべてのエンジン、ウォーム(この方法をINNODBのみに使用する場合、高温になる可能性があります)、バックアップとリカバリが高速です

これはバックアップについての良いイメージです。

enter image description here

2
jcho360

テーブルごとに手順を計算し、それを小さなbashスクリプトに入れます。私はXMLにエクスポートしようとします-エスケープされていない引用符で問題が少なくなるはずです(しかし、なぜそこにあるのかまったくわかりません)。

テーブルごとに移行を行います。1つのテーブルで機能する場合は、別の小さなbashスクリプトを記述して、最初のスクリプトの呼び出しを必要な数のテーブルに複製できます。 SHOW TABLES;コマンドの出力をエクスポートして、テーブルのリストを取得します。少しのスクリプトで、実行可能なmysql呼び出しの束を含むファイルを生成し、そのファイルを実行できます。

この方法で、少なくとも問題のないテーブルが移行され、必要に応じて問題のあるテーブルに集中できます。

1
Ansari

ソースデータベースとターゲットデータベースの両方がMySQLの場合、最初に.csv形式にエクスポートしてから、そのファイルをインポートしてみてください。

次のような.csvファイルを作成できます。

SELECT * FROM table INTO OUTFILE '/home/tables_csv/table' FIELDS ENCLOSED BY '"' TERMINATED BY ', ';

でも、テーブルが何百もあるとしたら、それは限定的にしか使えないでしょう。

別のオプションは、両方のシステムで最新のMySQLバージョンであることを確認することです。これには、表示されているmysqldumpのバグの修正が含まれる場合があるためです。これまでに150 GBを実行したことはありませんが、データベースを2 GBまで移動したところ、MySQL v5.5を使用していて、あなたが説明した問題に遭遇したことはありません。お役に立てば幸いです。

0
Dan Baylis