0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

mysqldumpした時にテーブルロックが起こる

Last updated at Posted at 2019-03-26

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にしておく必要があるんだということ。

0
0
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?