首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

MyISAM 表未正確關閉計數器機制與多實例風險

     編輯:MySQL 資料庫相關知識

計數器原理

每個 .MYI 索引檔頭部有一計數器:

  • 表首次被更新 → 計數器 +1。
  • 後續更新 → 計數器不變。
  • 最後一個實例關閉(FLUSH TABLES 或快取淘汰)且表曾更新 → 計數器 -1。
  • CHECK/REPAIR TABLE 發現表完好 → 計數器歸零。
  • 計數器為零時關閉 → 不再遞減(避免與其他檢查進程衝突)。

計數器不同步成因(觸發警告:clients are using or haven't closed the table properly)

  1. LOCK TABLES/FLUSH TABLES 未正確複製 MyISAM 表。
  2. 更新與最終關閉間 mysqld 崩潰(資料通常完好,因每語句皆同步寫入)。
  3. myisamchk --recover/--update-state 在 mysqld 使用表時運行。
  4. 多 mysqld 實例共享資料目錄,一實例執行 REPAIR TABLE 替換資料檔,其他實例未感知(CHECK TABLE 較安全)。

風險與建議

  • 警告不代表表已損壞,但至少應執行 CHECK TABLE。
  • 嚴禁多 MySQL 實例共享同一資料目錄(極高風險)。
  • 生產環境啟用 --log-warnings 記錄異常關閉事件。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved