這個錯誤是典型的mysql表受損造成的,解決的辦法就是修復表,這個問題也是mysql經常容易出現的,mysql表和索引損壞的幾率很大,但是修復也很方便,減少此類問題發生的辦法就是盡量減少服務器無故斷電,關閉服務器時,最後先手動關閉MySQL數據庫。
下面看看這個問題:
Can’t open file: ‘×××.MYI’ (errno: 145),這個錯誤一般就是你的數據庫表文件損壞造成的,造成的原因大概是你把數據庫文件挪來挪去的結果,當然不排除其他原因啊。
具體數據庫出現錯誤的提示代碼是:
Invalid SQL: ……
MySQL 錯誤!: 1016 (Can’t open file: ‘×××.MYI’ (errno: 145))
解決這個問題有多種方案,如果你的數據庫可以遠程鏈接或者你可以連接到你的遠程服務器桌面,並且你的服務器系統剛好是Windows的,那麼你可以:
運行->cmd
然後:MySQL –h 主機地址 –u 用戶名 –p
然後輸入密碼,連接數據庫;
Use 數據庫名稱;
然後 輸入:reapair table 出錯的表名稱,回車,這樣修復一下就可以了,參考圖片如下:
第二種方案,假設你只能運行PHP代碼,那麼也很簡單,寫一個PHP文件,鏈接上數據庫,把這段代碼:
Reapair table `表名`,
像發送 “select * ……”一樣發送給MySQL,也是可以的;
第三種方案,可簡單了,打開你的myPHPadmin,選中Can’t open file:後面同名的表,有個下拉菜單“選中項”,選擇“修復”如圖:
就ok了。
如果你的數據庫主機就你一個人用,並且你還能控制的話,建議你用MySQL自帶的修復工具myisamchk.exe進行修復,操作如下:
修復前將MySQL服務停止。
如果是Win主機,打開命令行方式,然後進入到MySQL的/bin目錄。
執行myisamchk -r 數據庫所在路徑\*.MYI
如果是類Unix主機,直接使用myisamchk -r 數據庫目錄\*.MYI
其它參考:
MySQL有的時候因為掉電或者其他原因導致數據庫損壞,錯信息如下:
MySQL: Can't open file: 'sdb_sessions.MYI'. (errno: 145)
For more information, see Help and Support Center at
我們可以使用mysql自帶的MySQLcheck命令來快速修復所有的數據庫或者特定的數據庫;例如
檢查優化並修復所有的數據庫用:
# MySQLcheck -A -o -r -p
Enter passWord:
guestbook.simpgb_avatars OK
guestbook.simpgb_bad_Words OK
guestbook.simpgb_banlist OK
guestbook.simpgb_data OK
......
......
......
MySQLcheck語法/html/Program/Mssql/200711/130.Html
修復指定的數據庫用
# MySQLcheck -A -o -r Database_NAME -p
IXDBA.Net社區論壇
另外如果只是對某個表進行修復可以用:myisamchk或isamchk
其中myisamchk適用於MYISAM類型的數據表,而isamchk適用於ISAM類型的數據表。這兩條命令的主要參數相同,一般新的系統都使用MYISAM作為缺省的數據表類型,這裡以myisamchk為例子進行說明。當發現某個數據表出現問題時可以使用:
myisamchk tablename.MYI
進行檢測,如果需要修復的話,可以使用:
myisamchk -of tablename.MYI
關於myisamchk的詳細參數說明,可以參見它的使用幫助。需要注意的時在進行修改時必須確保MySQL服務器沒有訪問這個數據表,保險的情況下是最好在進行檢測時把MySQL服務器Shutdown掉。
另外可以把下面的命令放在你的rc.local裡面啟動MySQL服務器前:
[ -x /tmp/MySQL.sock ] && /pathtochk/myisamchk -of /DATA_DIR/*/*.MYI
其中的/tmp/mysql.sock是MySQL監聽的Sock文件位置,對於使用RPM安裝的用戶應該是/var/lib/mysql /mysql.sock,對於使用源碼安裝則是/tmp/mysql.sock可以根據自己的實際情況進行變更,而pathtochk則是 myisamchk所在的位置,DATA_DIR是你的MySQL數據庫存放的位置。