mysqldumpしようとしたら、うまくできない
スキーマだけのダンプファイルを作成しようとして、下記のコマンドを打つと、
$ mysqldump -u root -p -d db_name > db_name.sql
database 'dbname' when using LOCK TABLES
こんなエラーが出ている訳ですね。
解決自体はすぐできました。
下記のようなオプションを付与するとうまくいきます。
$ mysqldump -u root -p -d db_name --lock-tables=false > db_name.sql
このオプションはなんぞや
テーブルロックを無効にさせているんだろうなーと言うのはオプションから見てもわかるんで、テーブルロックとはを調べました。
所謂1つの排他制御
mysqlはシングルプロセスマルチスレッドモデルで処理を行なっていて、トランザクションを行う時は、スレッドを使って処理が行われる訳だが、テーブルに対しての更新処理を行う時に他のスレッドにいじられたらまずいので、ロックをかける必要がある。これをテーブルロックという。
ロックの仕方には二種類ある。
READ
ロックを取ったスレッドが、READのみ可能WRITEするとエラーを起こし、その他のスレッドもREADのみ可能でWRITEするとブロックされる
WRITE
ロックを取ったスレッドがREAD/WRITE可能になり、その他のスレッドが、READ/WRITE不可になり、ブロックされる
権限が付与された時に、このlock tablesが利用できる権限が与えられます。
権限の種類
結構付与されるものの種類がたくさんある。おそらくこれから先お世話になったり遭遇するんだろうな。
dumpを仕掛ける時にマルチスレッドでしかけようとしちゃうんだろうな。だから、falseにしておく必要があるんだということ。