ライブプロダクションデータベースをローカルの開発データベースにコピーしたい。本番データベースをロックせずにこれを行う方法はありますか?
私は現在使用しています:
mysqldump -u root --password=xxx -h xxx my_db1 | mysql -u root --password=xxx -h localhost my_db1
しかし、実行中は各テーブルをロックしています。
ライブプロダクションデータベースをローカルの開発データベースにコピーしたい。本番データベースをロックせずにこれを行う方法はありますか?
私は現在使用しています:
mysqldump -u root --password=xxx -h xxx my_db1 | mysql -u root --password=xxx -h localhost my_db1
しかし、実行中は各テーブルをロックしています。
回答:
--lock-tables=false
オプションは機能しますか?
マニュアルページによると、InnoDBテーブルをダンプする場合は、次の--single-transaction
オプションを使用できます。
--lock-tables, -l
Lock all tables before dumping them. The tables are locked with READ
LOCAL to allow concurrent inserts in the case of MyISAM tables. For
transactional tables such as InnoDB and BDB, --single-transaction is
a much better option, because it does not need to lock the tables at
all.
以下のためのInnoDB DB:
mysqldump --single-transaction=TRUE -u username -p DB
これは遅すぎる年齢ですが、トピックを検索している人には適しています。innoDBを使用しておらず、ダンプ中にロックする心配がない場合は、次のオプションを使用してください。
--lock-tables=false
--single-transaction
。
FLUSH TABLES WITH READ LOCK
。
--skip-add-locks
私を助けました
--skip-add-locks
。ダンプの復元が速くなるだけです。これは正解ではありません。
大きなテーブルをダンプするには、-single-transactionオプションを--quickと組み合わせる必要があります。
http://dev.mysql.com/doc/refman/5.1/en/mysqldump.html#option_mysqldump_single-transaction
InnoDBテーブルの場合はフラグを使用します --single-transaction
アプリケーションをブロックせずに、BEGINが発行されたときのデータベースの一貫した状態をダンプします。
MySQL DOCS
http://dev.mysql.com/doc/refman/5.1/en/mysqldump.html#option_mysqldump_single-transaction
--skip-lock-tables
。
正直なところ、テーブルをロックしない場合、ダンプから一貫性のないデータが取得されるように、このためのレプリケーションをセットアップします。
ダンプに時間がかかる場合は、すでにダンプされたテーブルが、ダンプされようとしているテーブルとともに変更されている可能性があります。
したがって、テーブルをロックするか、レプリケーションを使用します。
mysqldump -uuid -ppwd --skip-opt --single-transaction --max_allowed_packet=1G -q db | mysql -u root --password=xxx -h localhost db
これらのアプローチのどれも私にとってうまくいかなかったので、私は単に以下を行いました:
mysqldump [...] | grep -v "LOCK TABLE" | mysql [...]
LOCK TABLE <x>
とUNLOCK TABLES
コマンドの両方を除外します。
注:うまくいけば、データにはその文字列が含まれていません!
https://dev.mysql.com/doc/refman/5.7/en/mysqldump.html#option_mysqldump_lock-tablesのため:
--opt(デフォルトで有効)などの一部のオプションは、-lock-tablesを自動的に有効にします。これを上書きしたい場合は、オプションリストの最後に--skip-lock-tablesを使用してください。
別の遅い答え:
(Linux環境で)サーバーデータベースのホットコピーを作成しようとしていて、すべてのテーブルのデータベースエンジンがMyISAMである場合は、を使用する必要がありますmysqlhotcopy
。
ドキュメントによると:
FLUSH TABLES、LOCK TABLES、cpまたはscpを使用してデータベースのバックアップを作成します。これはデータベースまたは単一のテーブルのバックアップを作成する高速な方法ですが、データベースディレクトリが配置されている同じマシンでのみ実行できます。mysqlhotcopyは、MyISAMおよびARCHIVEテーブルのバックアップに対してのみ機能します。
LOCK TABLES
時間は、サーバがMySQLのファイルをコピーすることができた時間(それはダンプをしない)に依存します。