問題

資料庫存取發生錯誤,例如使用 mysqldump 時出現:

1
mysqldump: Got error: 145: Table './dbname/tablename' is marked as crashed and should be repaired when using LOCK TABLES

原因

資料表的相關檔案由於不明原因發生損壞,而無法正常存取。

解決方案

可以使用以下兩種方式嘗試修復資料表:

使用 SQL 語句

1
REPAIR TABLE tablename

使用 myisamchk

使用命令列進入資料表所在目錄,例如

1
cd /var/lib/mysql/dbname

執行

1
myisamchk -r tablename

執行過程中可能會遇到以下錯誤

1
myisamchk: error: myisam_sort_buffer_size is too small

這是修復過程中所需記憶體空間超過預設的空間,可以利用 --sort_buffer_size 參數指派更大的記憶體,例如:

1
myisamchk -r tablename --sort_buffer_size=2G