在windows系統下使用mysql的朋友可能有時會碰到表突然壞了,出現:Table p is marked as crashed and should be repaired 等等問題,下面我來介紹修復mysql數據庫與表的方法.
先來分析問題
一個損壞的表的典型癥狀如下:
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
- --Vevb.com
- %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中功能進行表的修復,方法是一樣的.
新聞熱點
疑難解答