先們來分析問題
一個損壞的表的典型症狀如下:
1 、當在從表中選擇數據之時,你得到如下錯誤:Incorrect key file for table: '...'. Try to repair it
2 、查詢不能在表中找到行或返回不完全的數據。
3 、Error: Table 'p' is marked as crashed and should be repaired 。
4 、打開表失敗: Can’t open file: ‘×××.MYI’ (errno: 145) 。
如果你是myisam表可以常用使用下面方法來修復
修復步驟:
1)修復前將mysql服務停止。
2)打開命令行方式,然後進入到mysql的/bin目錄。
3)執行myisamchk --recover 數據庫所在路徑/*.MYI。 注:提示後面不要跟隨;號
語法:mysqlcheck -r 數據庫名 表名 -uuser -ppass
%mysqlcheck -r sports_results mytable -uuser -ppass
sports_results.mytable OK利用mysqlcheck可以一次性修復多個表。只要在數據庫名後列出相應表名即可(用空格隔開)。或者數據庫名後不加表名,將會修復數據庫中的所有表,例如:
代碼如下 復制代碼%mysqlcheck -r sports_results mytable events -uuser -ppass
sports_results.mytable OK
sports_results.events OK
%mysqlcheck -r sports_results -uuser -ppass
sports_results.mytable OK
sports_results.events OK
進行修復操作需以讀/寫方式鎖定數據表,命令如下:
% mysql
mysql> use db
mysql> LOCK TABLE table_name WRITE; #以讀/寫方式鎖定數據表
mysql> FLUSH TABLE table_name;
保持mysql客戶端連接狀態,切換到第二個shell窗口,運行修復命令:
代碼如下 復制代碼 % myisamchk --recover table_name
運行修復命令前最好先備份一下數據文件。
修復完成後,切換回mysql客戶端連接窗口,運行以下命令解除數據表鎖定:
代碼如下 復制代碼mysql> FLUSH TABLE table_name; #使服務器覺察新產生的索引文件
mysql> UNLOCK TABLE;
還可用以下命令鎖定所有表,鎖定後,所有用戶就只能讀不能寫數據,這樣就可使我們能安全地拷貝數據文件。
代碼如下 復制代碼mysql> FLUSH TABLES WITH READ LOCK;
下面是解除鎖語句:
代碼如下 復制代碼mysql> UNLOCK TABLES;
小提示
一般我們都會有phpmyadmin這個功能了,這樣如果表壞了就可以直接利用phpmyadmin中功能進行表的修復,方法是一樣的。