程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> MYSQL數據庫 >> 關於MYSQL數據庫 >> Mysql處理未被適當關閉的表的問題

Mysql處理未被適當關閉的表的問題

編輯:關於MYSQL數據庫

  每個MyISAM索引文件(.MYI)在頭有一個計數器,它可以被用來檢查一個表是否被恰當地關閉。如果你從CHECK TABLE或myisamchk得到下列警告,意味著這個計數器已經不同步了:

clIEnts are using or haven't closed the table proPerly

  這個警告並不是完全意味著表已被破壞,但你至少應該檢查表。

  計數器的工作方式如下:

  · 表在MySQL中第一次被更新,索引文件頭的計數器加一。

  · 在未來的更新中,計數器不被改變。

  · 當表的最後實例被關閉(因為一個操作FLUSH TABLE或因為在表緩沖區中沒有空間)之時,若表已經在任何點被更新,則計數器減一。

  · 當你修理或檢查表並且發現表完好之時,計數器被重置為零。

  · 要避免與其它可能檢查表的進程進行事務的問題,若計數器為零,在關閉時計數器不減一。

  換句話來說,計數器只有在下列情況會不同步:

  · MyISAM表不隨第一次發出的LOCK TABLES和FLUSH TABLES被復制。

  · MySQL在一次更新和最後關閉之間崩潰(注意,表可能依然完好,因為MySQL總是在每個語句之間為每件事發出寫操作)。

  · 一個表被myisamchk --recover或myisamchk --update-state修改,同時被MySQLd使用。

  · 多個MySQLd服務器正使用表,並且一個服務器在一個表上執行REPAIR TABLE或CHECK TABLE,同時該表也被另一個服務器使用。在這個結構中,使用CHECK TABLE是安全的,雖然你可能從其它服務器上得到警告。盡管如此,REPAIR TABLE應該被避免,因為當一個服務器用一個新的數據文件替代舊的之時,這並沒有發送信號到其它服務器上。

  總的來說,在多服務器之間分享一個數據目錄是一個壞主意。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved