萬盛學電腦網

 萬盛學電腦網 >> 數據庫 >> mysql教程 >> window下修復mysql表與數據庫

window下修復mysql表與數據庫

在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

%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中功能進行表的修復,方法是一樣的。

copyright © 萬盛學電腦網 all rights reserved