top
Loading...
5.9.5.6.將myisamchk用于崩潰恢復
5.9.5.6. 將myisamchk用于崩潰恢

如果用--skip-external-locking運行mysqld(在某些系統上為 默認設置,例如Linux),當mysqld使用某個表時,你不能可靠地使用myisamchk來檢查相同的表。當你運行myisamchk時如果可以確保沒有人在通過mysqld訪問表,在開始檢查表前,你只需要運行mysqladmin flush-tables。如果你不能保證,則你檢查表時你必須停止mysqld。如果mysqld更新表時運行myisamchk,你可能會獲得表被破壞的警告,即使事實并非如此。

如果不使用--skip-external-locking,可以隨時使用myisamchk來檢查表。當檢查表時,所有嘗試更新表的客戶端將等待,直到myisamchk準備好可以繼續。

如果使用myisamchk來修復或優化表,必須確保mysqld服務器沒有在使用該表(如果你正使用--skip-external-locking選項也適用)。如果不關閉mysqld,在運行myisamchk之前至少應執行mysqladmin flush-tables。如果服務器和myisamchk同時訪問表,表可能會被破壞

本節描述如何檢查和處理MySQL數據庫中的數據破壞。如果表經常被破壞,你應盡力找到原因。參見A.4.2節,“如果MySQL依然崩潰,應作些什么”。

關于MyISAM表怎樣會被破壞的解釋,參見15.1.4節,“MyISAM表方面的問題”。

在執行崩潰恢復時,理解在一個數據庫中的每一個MyISAMtbl_name對應的在數據庫目錄中的3個文件是很重要的:

文件

目的

tbl_name.frm

定義(格式)文件

tbl_name.MYD

數據文件

tbl_name.MYI

索引文件

3類文件的每一類都可能遭受不同形式的損壞,但是問題最常發生在數據文件和索引文件。

myisamchk通過一行一行地創建一個.MYD數據文件的副本來工作,它通過刪除舊的.MYD 文件并且重命名新文件到原來的文件名結束修復階段。如果你使用--quickmyisamchk不創建一個臨時.MYD文件,只是假定.MYD文件是正確的并且僅創建一個新的索引文件,不接觸.MYD文件,這是安全的,因為myisamchk自動檢測.MYD文件是否損壞并且在這種情況下,放棄修復。你也可以給myisamchk兩個--quick選項。在這種情況下,myisamchk不會在一些錯誤上(象重復鍵)放棄,相反試圖通過修改.MYD文件解決它們。通常,只有在太少的空閑磁盤空間上實施正常修復,使用兩個--quick選項時才有用。在這種情況下,你至少應該在運行myisamchk前做進行備份。

作者:mysql.com
來源:http://dev.mysql.com/doc/refman/5.1/zh/database-administration.html
北斗有巢氏 有巢氏北斗