【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できました。