数百のテーブルを持つデータベースから約150GBのデータをエクスポートしようとしていますが、mysqldumpは非常にバグが多いことがわかりました。
単純な--all-databasesダンプを実行した後、ダンプは成功しますが、インポートでは常にランダムな(そして頻繁な)エラーが発生します。ダンプファイル内の引用符が正しくエスケープされていないため、これらは一般にSQLステートメントの構文エラーです。
以前に実際のデータファイルをコピーして生データ転送を実行しましたが、インポート先のサーバーでファイルシステムにアクセスできません。
非常に大規模なエクスポート/インポートのために、mysqldumpよりもバグの少ない他のツールはありますか?
Percona Xtrabackupで解決した同じ問題がありました。無料で、高速で、一貫しています。
MySQLの場合、これらのメソッド(mysqldump以外)があります。
選択して...出力ファイルに:すべてのエンジンをサポートします。ウォームバックアップに使用できます。バックアップとリカバリには時間がかかります。
mk-parallel-backup:すべてのエンジンをサポートします。ウォームバックアップに使用され、リカバリ速度は中程度です。
ibbackup:すべてのエンジン、ウォーム(この方法をINNODBのみに使用する場合、高温になる可能性があります)、バックアップとリカバリが高速です
これはバックアップについての良いイメージです。
テーブルごとに手順を計算し、それを小さなbashスクリプトに入れます。私はXMLにエクスポートしようとします-エスケープされていない引用符で問題が少なくなるはずです(しかし、なぜそこにあるのかまったくわかりません)。
テーブルごとに移行を行います。1つのテーブルで機能する場合は、別の小さなbashスクリプトを記述して、最初のスクリプトの呼び出しを必要な数のテーブルに複製できます。 SHOW TABLES;
コマンドの出力をエクスポートして、テーブルのリストを取得します。少しのスクリプトで、実行可能なmysql呼び出しの束を含むファイルを生成し、そのファイルを実行できます。
この方法で、少なくとも問題のないテーブルが移行され、必要に応じて問題のあるテーブルに集中できます。
ソースデータベースとターゲットデータベースの両方が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を使用していて、あなたが説明した問題に遭遇したことはありません。お役に立てば幸いです。