並發寫入導致資料損壞、讀取髒資料、維護工具與服務衝突。鎖定協調存取,確保一致性。
LOCK TABLES tbl_name {READ | WRITE} [, tbl_name {READ | WRITE}] ...
UNLOCK TABLES
READ:當前線程可讀,其他線程可讀,**不可寫**WRITE:僅當前線程可讀寫,**其他線程阻塞**LOCK TABLES、連線關閉、UNLOCK TABLESmyisamchk 檢查/修復協作、應用層顯式鎖表myisamchk/isamchk 與 Server 協作用--skip-locking(Linux 預設啟用)= **禁用外部鎖**mysqladmin variables | grep skip_locking# 1. 客戶端獲取讀鎖 + 刷新
mysql -u root -p db_name
LOCK TABLE tbl_name READ;
FLUSH TABLES; -- 關閉檔案句柄,落盤脏頁
# 2. 離線工具檢查
myisamchk tbl_name
isamchk tbl_name
# 3. 釋放鎖
UNLOCK TABLES;
# 1. 獲取寫鎖 + 刷新
LOCK TABLE tbl_name WRITE;
FLUSH TABLES;
# 2. 備份原檔 + 修復
cp tbl_name.* /backup/dir/
myisamchk --recover tbl_name
# 或優化
myisamchk --analyze tbl_name
# 3. 二次刷新 + 釋放(關鍵:新索引檔需被 Server 感知)
FLUSH TABLES;
UNLOCK TABLES;
mysqladmin flush-tables 刷新並關閉表myisamchk,工具與 Server 透過檔案鎖自動協調FLUSH TABLESmyisamchk → 索引損壞風險極高InnoDB 使用行鎖 + MVCC,**不適用**LOCK TABLES/myisamchk。備份用mysqldump --single-transaction,修復用innodb_force_recovery重啟導出重建。
INSTANT DDL、RENAME COLUMN 等無鎖操作