在執行資料表檢查、修復、備份或大量資料異動前,透過 LOCK TABLES 明確鎖定資料表,可確保操作過程中資料一致性,防止併發衝突導致損壞或不一致。
-- 鎖定為唯讀(READ),允許其他連線讀取,禁止寫入
LOCK TABLE tbl_name READ;
-- 刷新資料表快取,確保所有變更寫入磁碟
FLUSH TABLES;
-- 執行檢查、修復、備份等維護操作...
-- 完成後釋放鎖定
UNLOCK TABLES;
| 模式 | 當前連線 | 其他連線 | 適用場景 |
|---|---|---|---|
| READ | 可讀、不可寫 | 可讀、不可寫 | 備份、報表查詢、資料表檢查 |
| WRITE | 可讀、可寫 | 不可讀、不可寫 | 結構變更、大量資料匯入、索引重建 |
LOCK TABLES 可同時鎖定多張表,但必須一次宣告所有需用的表,否則會隱含釋放先前鎖定。LOCK TABLES 權限(通常由 DBA 或 root 擁有)。LOCK TABLES orders READ, order_items READ, customers READ;
FLUSH TABLES;
-- 執行檔案層級備份(cp、rsync、mysqldump 等)
UNLOCK TABLES;
掌握正確的鎖定策略,能有效降低維護操作對線上服務的影響,確保資料完整性。