最適なmysqldump設定は何ですか?[閉まっている]


14

いくつかの検索の後、私は次の設定になりました:

    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

各引数とその利点を読み、どちらがあなたに合っているかを選択してください。また、失敗の場合にトリガーするスクリプトを理解します。
マンノジ14

涼しい。しかし、これは本当に私の質問に答えません。例えば、あなたはいつもどれを使用しますか?
user706838

私の無知を許してください、この質問は本やウェブサイトを推薦することに関するものではありません。ですから、意見に基づいたタイプの質問ではないはずです。確かに、いくつかの答えは専門知識に応じてより質が高く、テストによって裏付けられると言われています。私の意見では、質問は明確に定義された目的で完全に述べられています。
user10089632

回答:


30

これは衝撃的なものですが、必要なオプションは--optだけです。

--optとはですか?

このオプションは、組み合わせの省略形ですデフォルトで有効になっ--add-ドロップテーブル ・ロック--add --create-オプション --disable-キーは --extended-挿入 --lock-テーブルは --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が自動的に非アクティブ化され、すべてのテーブルを同じポイントインタイムでダンプでき、同時に新しい書き込みを許可できます。

1つ以上のMyISAMテーブルがある場合、--lock-all-tablesを指定する必要があります。これにより、--lock-tablesが自動的に非アクティブ化され、-- 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インデックスが偏ってしまう可能性があるためです。--order-by-primaryは、整数の主キーがあり、アプリケーションからの範囲スキャンが多数あることがわかっている個々のテーブルをダンプする場合にのみ使用してください。

より創造的なタイプのmysqldumpバックアップが必要な場合は、私の古い記事「大規模データベースのmysqldumpを最適化するにはどうすればよいですか?」を参照してください

mysqldumpのすべてのオプションを読みください。

更新2014-12-29 09:44 EST

mysqldumpコマンドを更新しました(編集を参照してください)。最後の質問があります。次の引数もすべて使用する価値があると思いますか?--add-drop-database \ --add-drop-table \ --complete-insert \ --delayed-insert \ --tz-utc

コメントと最新の編集を見て、これらの各オプションを見て、必要な場合は見てみましょう

  • --opt:デフォルトで有効になっているので、指定する必要はないと既に述べました。
  • --delayed-insert:すべてのInnoDBデータベースを使用して、これを断念します。実際、私はこの期間から断固として離れます!!! 。1)INSERT DELAYEDがデータを失う可能性があるため、2)MySQLレプリケーションスレーブ用にINSERTに変換されるため、3)MySQL 5.6でのトリガーでの使用に関するバグ報告があり、バグとは見なされません 4 )MySQL 5.6では非推奨です。5)Morgan Tocker(よく知られたMySQL Guru)は2012年非推奨になることを予見しました。このオプションが存在することを忘れてください。絶対に使用しないでください!
  • --complete-insert:これはのINSERT INTO tblname (colnam_1,colnam_2,...colnam_n) VALUES ...代わりに使用されますINSERT INTO tblname VALUES ...。テーブル定義に多くの列があり、テーブルに多くの行がある場合、これはmysqldumpを膨張させる可能性があります。使用しないでください。
  • --add-drop-table-- optで有効になるため、指定する必要はありません。
  • --add-ドロップデータベース:あなたがドロップした場合--add-ドロップデータベースを、それだけで作るDROP TABLE IF EXISTS(によって追加された--add-ドロップテーブル)より速く行きます。それを使用しないとDROP TABLE IF EXISTS、各テーブルで発生します。したがって、-add-drop-databaseの使用は個人的な選択の問題です。
  • --tz-utc:バックアップ元と同じサーバーにデータを復元する場合、--tz-utcは必要ありません。異なるタイムゾーンの別のデータセンターにデータを復元し、...
    • バックアップ元と同じタイムゾーンを維持する場合、--tz-utcは必要ありません。
    • データで新しいデータセンターのタイムゾーンを使用する場合、--tz-utcが必要です
    • 例:ニューヨークのデータベースをバックアップするとします。それはESTです。シアトルに別のデータセンターがある場合、それはPSTになります。New York Ba​​ckupをシアトルで復元し、データベース内のタイムスタンプが引き続きニューヨークを表すようにする場合は、--tz-utcを使用する必要はありません。
  • --default-character-set

最新の編集を調整します。これは特に必要なものです

mysqldump\
--host=localhost\
--port=3306\
--databases ****\
--user=****\
--password=****\
--single-transaction\
--routines\
--triggers\
--events\
--add-drop-database\
> dump/test.sql

繰り返しますが、mysqldumpのすべてのオプションをお読みください。


--add-drop-databaseについて:これは、ダンプにない他のランダムなテーブルがデータベースにないことも保証しませんか?誰かが手動でデータベースにランダムなテストテーブルを作成した場合、このオプションなしでダンプからリロードした後もまだ存在します。したがって、それが必要かどうかによって異なります。正しい?
jschultz410

どう--add-drop-trigger
lonix
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.