mysqldumpで「when using LOCK TABLES」と怒られる
MySQLからデータをダンプする便利なコマンドmysqldump。テーブルがMyISAMなら問題ないけれど、innoDBなどトランザクション処理が絡む場合、単にmysqldump処理するとエラーメッセージが表示されてdumpできない。
Got error: 1044: Access denied for user ‘user’@’localhost’ to database ‘mydb’ when using LOCK TABLES
テーブルのロックがどうこうというエラーだ。中途半端にデータがinsert等された状態でdumpされたデータだと、復元した際にデータに矛盾が生じるかもしれないから事前にロックしようとしたけどできなかったよ、ということだろう。ネットを探しているとオプションをつけてしのぐ方法が書かれている。
mysqldump –skip-lock-tables mydb > mydb.sql
上記の「–skip-lock-tables」というオプションを紹介しているブログがやたらと出てきた。しかしこれ、そもそも根本的じゃないでしょうという感じ。ロックしないんだからデータに矛盾が生じそう。つまり使えるかどうかもわからないバックアップをしていることになってしまう(個人ユースならそれでもいいんだろうけど)。
mysqldump –single-transaction mydb > mydb.sql
マニュアルにはこういう記述があった。「–single-transaction」というオプションだ。このオプションだとテーブルをロックせず、トランザクションの範囲でバックアップしてくれるとのことだった。マニュアルにも「–lock-tablesより全然良い」と書いてある。これを使うことにしよう。
2013/05/18 at 11:15 PM
[…] mysqldumpで「when using LOCK TABLES」と怒られる (PHPのテクメモ) […]
2014/03/28 at 2:32 PM
[…] :: 4.9.7 mysqldump(テーブル構造とデータのダンプ) PHPのテクメモ » Blog Archive » mysqldumpで「when using LOCK TABLES」と怒られ… 忘れがちな記憶へ MySQL Got error: 1044: Access […]