web-dev-qa-db-ja.com

テーブルをロックせずにMySQLDumpを実行する

本番データベースをローカルの開発データベースにコピーしたいのですが。本番データベースをロックせずにこれを行う方法はありますか?

私は現在使用しています:

mysqldump -u root --password=xxx -h xxx my_db1 | mysql -u root --password=xxx -h localhost my_db1

しかし、それは実行時に各テーブルをロックします。

413
Greg

--lock-tables=falseオプションは機能しますか?

のmanページ によると、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
588
John Millikin

これは遅すぎますが、トピックを探している人には適しています。あなたがinnoDBではなく、あなたがダンプしている間にロックについて心配する必要がなければ、単にオプションを使用してください。

--lock-tables=false
282
Warren Krewenki

答えは、使用しているストレージエンジンによって異なります。理想的なシナリオは、InnoDBを使用している場合です。その場合は、--single-transactionフラグを使用できます。これにより、ダンプが開始された時点のデータベースの首尾一貫したスナップショットが得られます。

45
dvorak

--skip-add-locksは私を助けました

34
Azamat Tokhtaev

大きなテーブルをダンプするには、--single-transactionオプションと--quickを組み合わせる必要があります。

http://dev.mysql.com/doc/refman/5.1/en/mysqldump.html#option_mysqldump_single-transaction

14
dgitman

正直に言うと、テーブルをロックしていない場合はダンプから矛盾したデータが取得されるため、このためにレプリケーションを設定します。

ダンプに時間がかかる場合は、すでにダンプされているテーブルが、ダンプされる直前のテーブルと共に変更されている可能性があります。

そのため、テーブルをロックするか、レプリケーションを使用してください。

9
michal kralik

InnoDBテーブルには--single-transactionを使用

「アプリケーションをブロックせずにBEGINが発行された時点のデータベースの一貫した状態をダンプします」MySQL DOCS

http://dev.mysql.com/doc/refman/5.1/en/mysqldump.html#option_mysqldump_single-transaction

8
Lex

これは、彼が最初の答えに対して遅かったと言った人と比べて遅くなりますが、私の場合(Windows 7のWAMP経由のMySQL)、私は使用しなければなりませんでした:

--skip-lock-tables
8
dtbarne
    mysqldump -uuid -ppwd --skip-opt --single-transaction --max_allowed_packet=1G -q db |   mysql -u root --password=xxx -h localhost db
5
naveen_sfx

https://dev.mysql.com/doc/refman/5.7/ja/mysqldump.html#option_mysqldump_lock-tables によります。

--opt(デフォルトで有効)などの一部のオプションでは、 - lock-tablesが自動的に有効になります。これを上書きしたい場合は、オプションリストの最後に--skip-lock-tablesを使用してください。

1
Dmytro Gierman

MySQL Workbenchを使用している場合は、データのエクスポート時に詳細オプションをクリックし、 "lock-tables"オプションのチェックを外します。

enter image description here

0
Samuel Diogo

今日でも私は同じ問題に直面したが、私はコマンドラインにアクセスできない。私はメモ帳エディタでSQLファイルを開き、テーブルから下の行を削除しました

LOCK TABLES `yourtable name` WRITE;

それから私は私の開発環境にインポートしました。それが誰かに役立つことを願っています

0
iCoders

もう一つの遅い答え:

(linux環境で)サーバーデータベースのホットコピーを作成しようとしていて、すべてのテーブルのデータベースエンジンがMyISAMの場合、shouldmysqlhotcopyを使用してください。

ドキュメンテーションに従って

データベースのバックアップを作成するためにFLUSH TABLES、LOCK TABLES、およびcpまたはscpを使用します。データベースまたは単一のテーブルのバックアップを作成するのは簡単な方法ですが、データベースディレクトリがあるのと同じマシン上でしか実行できません。 mysqlhotcopyはMyISAMテーブルとARCHIVEテーブルをバックアップするためだけに機能します。

LOCK TABLES時間は、サーバーがMySQLファイルをコピーできる時間によって異なります(ダンプは作成されません)。

0
Andrés Morales