いくつかの検索の後、私は次の設定で終わりました:
mysqldump\
--Host=localhost\
--port=3306\
--databases ****\
--user=****\
--password=****\
--default-character-set=utf8\
--add-drop-database\
--add-drop-table\
--add-locks\
--complete-insert\
--extended-insert\
--lock-all-tables\
--create-options\
--disable-keys\
--quick\
--order-by-primary\
--set-charset\
--tz-utc\
> dump/test.sql
これまでのところ良いですが、パラメーターと実行に関していくつか質問があります。
私の最初の懸念に関して、私はそれらすべてが必要であり、一緒に使用されたときに競合を引き起こさないことを確認したいだけです。最終的に、テーブル、データベースを作成し、データを挿入する、数百万のレコードを含む非常に堅牢で一貫性のあるダンプファイルを作成したいと考えています。良いことは、しばらくの間データベースを利用できなくすることは私にとって問題ではないということです。私の唯一の目標は、堅牢で一貫性のあるダンプファイルを作成することです。
2回目のコンサートでは、コマンドが失敗した場合に通知を受け、例外がスローされた場合に知りたいです。
何か案は?
[〜#〜]編集[〜#〜]
これは、RolandoMySQLDBAのフィードバックに基づいて更新したmysqldumpコマンドです。
mysqldump\
--Host=localhost\
--port=3306\
--databases ****\
--user=****\
--password=****\
--default-character-set=utf8\
--opt\
--single-transaction\
--routines\
--triggers\
--events\
--add-drop-database\
--add-drop-table\
--complete-insert\
--delayed-insert\
--tz-utc\
> dump/test.sql
これは衝撃的ですが、主なオプションは1つだけ必要です: --opt
--opt とは何ですか?
このオプションはデフォルトで有効になっており、 --add-drop-table--add-locks--create-options--disable-keys--extended-insert--lock-tables--quick--set-charset 。これは、高速のダンプ操作を提供し、MySQLサーバーにすばやくリロードできるダンプファイルを生成します。
--optオプションはデフォルトで有効になっているため、その逆の--skip-optのみを指定しますいくつかのデフォルト設定をオフにします。 --optの影響を受けるオプションのサブセットを選択的に有効または無効にする方法については、mysqldumpオプショングループの説明を参照してください。
--opt はすでに有効になっているので、 --opt を指定する必要はありません。それにもかかわらず、含まれていないいくつかの必要なオプションが必要になる場合があります。
データベースでこのクエリを実行する
_SELECT engine,COUNT(1) TableCount
FROM information_schema.tables
WHERE engine IN ('InnoDB','MyISAM')
AND table_schema NOT IN ('information_schema','mysql','performance_schema')
GROUP BY engine;
_
すべてのInnoDBテーブルがある場合は、 --single-transaction を指定する必要があります。これにより、 --lock-tables が自動的に非アクティブになり、すべてのテーブルを同じ時点でダンプして、新しい書き込みを同時に行うことができます。
MyISAMテーブルが1つ以上ある場合は、 --lock-all-tables を指定する必要があります。これにより、 --lock-tables 、deactivate --single-transaction が自動的に非アクティブ化され、すべてのデータベースのすべてのテーブルがロックされて、ダンプが作成されます。 InnoDBテーブルへの書き込みは引き続き発生しますが、ロックが解放されるまでキューに入れられるだけです。 MyISAMテーブルへの書き込みを試行するDB接続は、すべてのロックが解放されるまで実際に中断されます。
このクエリを実行します:SELECT COUNT(1) Number_Of_Stored_Procedures FROM mysql.proc;
_Number_Of_Stored_Procedures
_がゼロより大きい場合は、 --routines を使用します。
このクエリを実行します:SELECT COUNT(1) Number_Of_Triggers FROM information_schema.triggers;
_Number_Of_Triggers
_がゼロより大きい場合は、 --triggers を使用します。
[〜#〜]警告[〜#〜]:すべてのデータベースをダンプする場合は --order-by-primary を使用しないでください。 BTREEインデックスは、リロード時に偏ったものになります。 --primary-by-primary は、整数の主キーがあり、アプリケーションからの範囲スキャンが多数あることがわかっている個々のテーブルをダンプする場合にのみ使用してください。
より創造的なタイプのmysqldumpバックアップが必要な場合は、以前の投稿を参照してください 大規模データベースのmysqldumpを最適化するにはどうすればよいですか? 。
mysqldump のすべてのオプションを読んでください。
Mysqldumpコマンドを更新しました(私の編集を参照してください)。最後の質問があります。次の引数もすべて使用する価値があると思いますか? --add-drop-database\--add-drop-table\--complete-insert\--delayed-insert\--tz-utc
あなたのコメントと最新の編集を見て、これらの各オプションを見て、それらのいずれかが必要かどうかを見てみましょう
INSERT INTO tblname VALUES ...
_ではなくINSERT INTO tblname (colnam_1,colnam_2,...colnam_n) VALUES ...
を使用します。テーブル定義に多くのカラムがあり、テーブルに多くの行がある場合、これはmysqldumpを膨らませる可能性があります。使用しないでください。DROP TABLE IF EXISTS
_( --add-drop-tableによって追加された)になります ) 速く進みます。これを使用しない場合、単純に各テーブルで_DROP TABLE IF EXISTS
_が発生します。したがって、 --add-drop-database の使用は個人的な選択の問題です。最新の編集を調整し、これが特に必要なものです
_mysqldump\
--Host=localhost\
--port=3306\
--databases ****\
--user=****\
--password=****\
--single-transaction\
--routines\
--triggers\
--events\
--add-drop-database\
> dump/test.sql
_
繰り返しますが、 mysqldumpのすべてのオプションを読んでください 。