私はドキュメントのその部分を読んで同じことを考えましたが、より多くの情報を見つけました:
4.5.4. mysqldump — データベース バックアップ プログラム
http://dev.mysql.com/doc/en/mysqldump.html
InnoDB テーブルの場合、mysqldump はオンライン バックアップを作成する方法を提供します。
shell> mysqldump --all-databases --single-transaction > all_databases.sql
このバックアップは、ダンプの開始時にすべてのテーブルでグローバル読み取りロックを取得します (FLUSH TABLES WITH READ LOCK を使用)。このロックが取得されるとすぐに、バイナリ ログ座標が読み取られ、ロックが解放されます。FLUSH ステートメントが発行されたときに長い更新ステートメントが実行されている場合、それらのステートメントが終了するまで MySQL サーバーが停止する可能性があります。その後、ダンプはロックが解除され、テーブルの読み取りと書き込みが妨げられなくなります。MySQL サーバーが受け取る更新ステートメントが (実行時間の点で) 短い場合、多くの更新があっても、最初のロック期間は目立ちません。
--opt
とオプションとの競合があり--single-transaction
ます:
--opt
このオプションは省略形です。--add-drop-table --add-locks --create-options --disable-keys --extended-insert --lock-tables --quick --set-charset を指定するのと同じです。これにより、高速なダンプ操作が可能になり、MySQL サーバーにすばやく再ロードできるダンプ ファイルが生成されます。
--opt オプションはデフォルトで有効になっています。--skip-opt を使用して無効にします。
私があなたの質問を正しく理解していれば、実際のデータと DDL (データ定義言語) を一緒に必要とします。なぜなら、DDL だけが必要な場合は--no-data
. 詳細については、次の URL を参照してください。
http://dev.mysql.com/doc/workbench/en/wb-reverse-engineer-create-script.html
データベースとそのすべてのオブジェクトを作成する場合は、mysqldump で --databases オプションを使用します。スクリプト ファイルに CREATE DATABASE db_name ステートメントがない場合は、データベース オブジェクトを既存のスキーマにインポートする必要があります。スキーマがない場合は、名前のない新しいスキーマが作成されます。
The Definitive Guide to MySQL 5 By Michael Koflerで提案されているように、次のオプションを提案します。
--skip-opt
--single-transaction
--add-drop-table
--create-options
--quick
--extended-insert
--set-charset
--disable-keys
さらに、オプション--order-by-primary
を使用している場合は、特にこの回答と組み合わせて使用する必要があります。異なるネットワークに接続されているデータベースをバックアップしている場合は、オプションを使用する必要がある場合があります。--databases
--add-drop-database
--compress
したがって、mysqldump コマンド (、、、またはオプションを使用しない--compress
)--databases
は--add-drop-database
次のようになります。
mysqldump --skip-opt --order-by-primary --single-transaction --add-drop-table --create-options --quick --extended-insert --set-charset -h db_host -u username --password="myPassword" db_name | mysql --host=other_host db_name
--disable-keys
私が理解しているように、InnoDBでは効果がないため、本に記載されている参照を削除しました。MySql マニュアルには次のように記載されています。
テーブルごとに、INSERT ステートメントを /*!40000 ALTER TABLE tbl_name DISABLE KEYS /;で囲みます。および / !40000 ALTER TABLE tbl_name ENABLE KEYS */; ステートメント。これにより、すべての行が挿入された後にインデックスが作成されるため、ダンプ ファイルの読み込みが速くなります。このオプションは、MyISAM テーブルの一意でないインデックスに対してのみ有効です。
また、このバグレポートhttp://bugs.mysql.com/bug.php?id=64309を見つけました。これには、Paul DuBois からのコメントが下部にあり、この特定の問題以外には参照していない本もいくつか書いています。そのバグレポート内にあるコメント。
「究極のバックアップ」を作成するには、このシェルスクリプトの行に沿って何かを検討することをお勧めします
- https://github.com/red-ant/mysql-svn-backup/blob/master/mysql-svn.sh