web-dev-qa-db-ja.com

mysqldumpの最適な設定は何ですか?

いくつかの検索の後、私は次の設定で終わりました:

    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

これは衝撃的ですが、主なオプションは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 のすべてのオプションを読んでください。

UPDATE 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 VALUES ..._ではなくINSERT INTO tblname (colnam_1,colnam_2,...colnam_n) VALUES ...を使用します。テーブル定義に多くのカラムがあり、テーブルに多くの行がある場合、これはmysqldumpを膨らませる可能性があります。使用しないでください。
  • --add-drop-table--opt はそれを有効にするので、指定する必要はありません。
  • --add-drop-database--add-drop-database をドロップすると、_DROP TABLE IF EXISTS_( --add-drop-tableによって追加された)になります ) 速く進みます。これを使用しない場合、単純に各テーブルで_DROP TABLE IF EXISTS_が発生します。したがって、 --add-drop-database の使用は個人的な選択の問題です。
  • --tz-utc :バックアップ元と同じサーバーにデータを復元する場合は、 --tz-utc は必要ありません。別のタイムゾーンの別のデータセンターにデータを復元し、...
    • バックアップ元と同じタイムゾーンを維持する場合は、 --tz-utc は必要ありません。
    • データで新しいデータセンターのタイムゾーンを使用する場合は、 --tz-utc が必要です。
    • 例:ニューヨークのデータベースをバックアップするとします。それがESTです。シアトルに別のデータセンターがある場合、それはPSTになります。シアトルでニューヨークバックアップを復元し、データベースのタイムスタンプがニューヨークを表すようにする場合は、 --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のすべてのオプションを読んでください

30
RolandoMySQLDBA