旅するえんじにあ - Engineers to Travel -

旅するエンジニアの気まま備忘録

【MySQL】 mysqldumpしようとしたら 「 when doing LOCK TABLES 」でdumpできない

作業中に稼働しているDBからselectユーザでdumpしようとしたら怒られた。

MyISAMなら問題ないんだろうけど、InnoDBだとtransactionの関係でテーブルロックされてるとエラーが出てしまう。

Got error: 1044: Access denied for user 'select_user'@'localhost' to database 'dbname' when using LOCK TABLES

調べてたらこれで解決できそう。 7.11. mysqldump — データベースバックアッププログラム

抜粋

 --single-transaction

このオプションはサーバからデータをダンプする前にBEGIN SQLステートメントを発行します。InnoDBといったトランザクションテーブルに対してのみ便利です。なぜなら、アプリケーションをブロックせずに、BEGINが発行された当時のデータベースの状態をダンプするからです。

このオプションを使用しているときは、一定の状態でダンプされるのはInnoDBテーブルのみだということを留意してください。例えば、このオプションを使用中にダンプされたMyISAMやMEMORYテーブルは状態が変化する可能性があります。

このオプションはMySQLクラスタテーブルではサポートされていません。NDBClusterストレージエンジンがREAD_COMMITTEDtransaction isolation levelのみをサポートするため、結果が一定である保証がありません。代わりに必ずNDBバックアップを使用し、リストアしてください。

--single-transactionオプションと--lock-tablesは互いに関連していません。これは、LOCK TABLESが待機中のトランザクションを必然的にコミットさせるからです。

大きなテーブルをダンプするには、このオプションを--quickと併用してください。

ということで

mysqldump --single-transaction -uxxxxx -pxxxx DBName TableName > dump.sql

こうすることで無事dumpできました。