首页  >  文章  >  数据库  >  window下修复mysql表与数据库

window下修复mysql表与数据库

WBOY
WBOY原创
2016-06-07 17:53:061108浏览

在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中功能进行表的修复,方法是一样的。

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn