当前位置:首页 > 知道中心 > MYSQL > 文章

mysql表损坏及修复的办法

发表于:2013-09-01| 次阅读| 作者:藕码网
TAG:
摘要:mysql表损坏及修复的办法

当服务器遇到意外重启等特殊情况时,数据库中的某个数据库的某个表可能会出现问题,在系统日志的应用程序错误日志里会反复提示表有错误需要修复。用phpmyadmin查看时,有问题的表也会显示"使用中"。这些表在information_schema的enginee字段里值为空。

可以用root登录后在information_schema里查找有问题的表名
select TABLE_SCHEMA as DB_DBNAME,TABLE_NAME from INFORMATION_SCHEMA.tables where engine is null;

可以通过事件查看器里是否有
应用程序日志--类型为"错误"--事件来源为"Mysql"的错误日志,大概内容为
xxxxx: Table '.xxxx' is marked as crashed and should be repaired


myisam

如果是myisam存储引擎的话,可以运行mysql的bin目录下的myisamchk来修复,使用方法
myisamchk -c -r mysql\data\dataname\tablename.myi
修复后可用phpmyadmin进去查看一下是否恢复正常
或者登录数据库,例如abc的test表有问题
use abc;
check table test;  如果有问题Msg_type里会有warning或error。没有问题的话这里为OK
repair table test; 修复test表
check table test;  再次检查确认是否修复成功


innodb

使用InnoDB存储引擎的表,在数据库目录中只有.frm文件,数据是保存在ibdata1文件中的。要还原这种数据库(假使要还原名为db的数据库),先到备份服务器中下载备份到本地,停止mysql服务。将本地的ibdata1文件重命名,将data目录下的db文件夹和ibdata1文件复制到本地mysql的data目录下,在开启mysql服务,就可以看到db这个数据库文件,在使用导入导出的办法将数据还原到目标数据库中。需要注意的是ibdata1文件不一定是在data目录下的,具体需要看mysql.iniinnodb_data_home_dir参数设置的是哪个目录,机一般是在data或是database目录下面。


注:本站部分信息可能源于互联网分享,如有侵权,请告知,我们将及时删除!