SQLクライアントツールなどでdumpを取得した場合、
テーブルに対してlock tableという指定がされます。
ロックが何をしているかの調査結果メモです。
LOCK TABLESとは
MySQLのクライアントセッションは、他のセッションと連携してテーブルアクセスする際に、
排他的制御をする場合、他のセッションにテーブルを更新されないように明示的にロックをかけることができます。
これがlock tablesの指定になります。
select for updateの指定と類似ですね。
dump時は他のセッションとデータの不整合を発生させないために明示的にロックを指定されているようです。
コマンドはこちらです。
LOCK TABLES {tbl_name}
READ | WRITE
ロックの種類は
READロック
-
このロックを保持しているセッションは、テーブルを読み取ることができます
(書き込みはできません) -
複数のセッションが同時にテーブルに対する READ ロックを取得できます
-
ほかのセッションは、READ ロックを明示的に取得することなく、テーブルを読み取ることができます
ちなみにロックが必要なセッションは1つのステートメントで全て指定することが必要です。
なので、例えば
1). > LOCK TABLES test1 READ;
2). > SELECT * FROM test1;
3). > SELECT * FROM test2;
2はロックを指定しているのでtest1にアクセスできますが
3はtest2へのロックを取得していないのでアクセスできません。
この場合、test2へのロックを指定するか一度unlockする必要があります。
※他のセッションからはアクセスできます。
※INFORMATION_SCHEMAへのアクセスは例外です。ロック関係なくアクセス可能です。
WRITEロック
-
このロックを保持しているセッションは、テーブルの読み取りおよび書き込みが可能です
-
このロックを保持しているセッションだけがテーブルにアクセスできます。ロックが解放されるまで、ほかのどのセッションもアクセスできません
-
WRITE ロックが保持されている間、テーブルに対するほかのセッションからのロック要求はブロックされます
セッション解放
ロックのセッションを解放する場合は
UNLOCK TABLES
を使用します。テーブル名指定不要。