mysqldumpで「when using LOCK TABLES」と怒られる

2011/02/02 | MySQL

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より全然良い」と書いてある。これを使うことにしよう。

2件のコメント

  1. MySQLのデータベースを毎日バックアップするためのスクリプト | ラット渡辺ブログ :

    […] mysqldumpで「when using LOCK TABLES」と怒られる (PHPのテクメモ) […]

  2. 【MySQL】mysqldump: Got error: 1044 » enjoyブログ♪ :

    […] :: 4.9.7 mysqldump(テーブル構造とデータのダンプ) PHPのテクメモ » Blog Archive » mysqldumpで「when using LOCK TABLES」と怒られ… 忘れがちな記憶へ MySQL Got error: 1044: Access […]

コメントを残す


守谷市(まちの情報ポータル) 無料アンケートレンタルjpForm.net