2008年4月11日 星期五

MYSQL:Can't open file: 'user.MYD'的解决方法

問題特徵:

mysql數據庫錯誤: Can't open file: 'user.MYD'. (errno: 145)
mysql數據庫錯誤號: 1016

解決方法:
1.運行myisamchk *.MYI或(myisamchk -e *.MYI,如果你有更多的時間)。使用-s(沉默)選項禁止不必要的信息。

你必須只修復那些myisamchk找出來的第一個錯誤的表。對這樣的表,繼續到階段2。

如果在檢查時,你得到奇怪的錯誤(例如out of memory錯誤),或如果myisamchk崩潰,到階段3。

2 :簡單安全的修復

首先,試試myisamchk -r -q tbl_name(-r -q意味著“快速恢復模式”)。這將試圖不接觸數據文件來修復索引文件。如果數據文件包含它應有的一切和在數據文件指向正確地點的刪除連接,這應該管用並且表可被修復。開始修理下一張表。否則,使用下列過程:

在繼續前做數據文件的一個備份。
使用myisamchk -r tbl_name(-r意味著“恢復模式”)。這將從數據文件中刪除不正確的記錄和已被刪除的記錄並重建索引文件。
如果前面的步驟失敗,使用myisamchk --safe-recover tbl_name。安全恢復模式使用一個老的恢復方法,處理常規恢復模式不行的少數情況(但是更慢)。
如果在修復時,你得到奇怪的錯誤(例如out of memory錯誤),或如果myisamchk崩潰,到階段3。

3 :困難的修理

如果在索引文件的第一個16K塊被破壞,或包含不正確的信息,或如果索引文件丟失,你只應該到這個階段 。在這種情況下,創建一個新的索引文件是必要的。按如下這樣做:

把數據文件移更安全的地方。
使用表描述文件創建新的(空)數據和索引文件:
shell> mysql db_name
mysql> DELETE FROM tbl_name;
mysql> quit

將老的數據文件拷貝到新創建的數據文件之中。(不要只是將老文件移回新文件之中;你要保留一個副本以防某些東西出錯。)
回到階段2。現在myisamchk -r -q應該工作了。(這不應該是一個無限循環)。

4:非常困難的修復

只有描述文件也破壞了,你才應該到達這個階段。這應該從未發生過,因為在表被創建以後,描述文件就不再改變了。

從一個備份恢復描述文件並且回到階段3。你也可以恢復索引文件並且回到階段2。對後者,你應該用myisamchk -r啟動。
如果你沒有一個備份但是確切地知道表是怎樣被創建的,在另一個數據庫中創建表的一個拷貝。刪除新的數據文件,然後從其他數據庫將描述和索引文件移到破壞的數據庫中。這給了你新的描述和索引文件,但是讓數據文件獨自留下來了。回到階段2並且嘗試重建索引文件。
Google