2024年6月15日发(作者:)

MySQL数据库修复:

方法一(简单修复):mysql> check table tblname

mysql> repair table tblname

方法二:先关闭数据库服务[root@SXU /]# mysqladmin shutdown

进行简单修复[root@SXU /]# myisamchk -c –r –q /db/dbname/tblname(具体参

数参--help)

如果失败,则使用[root@SXU

/db/dbname/tblname

/]# myisamchk –safe-recover

如果还是失败,一般是索引文件*.MYI被破坏:

(1)改表结构时断电,mysql会产生备份文件,把相应备份文件改成表名的

*.MYI,*.MYD,*.frm,相应的表就恢复了。

(2)把数据文件移到安全地方,使用表描述文件创建新的(空)数据和索引文件:

[root@SXU /]#mysql dbname

mysql> delete from tblname;

mysql> quit

再将老的数据文件拷贝替换到新创建的数据文件之中。(记得留备份文件以防万一)

再使用[root@SXU /]# myisamchk -c –r –q /db/dbname/tblname

最后重启数据库,[root@SXU /]# /usr/mysql/bin/mysqld_safe --user=root

--datadir=/db &

还有一种情况是非常困难的修复:这应该从未发生过,因为在表被创建以后,描述文

件就不再改变了。

从一个备份恢复描述文件并且回到上述(2)。 如果你没有一个备份但是确切地知道表

是怎样被创建的,在另一个数据库中创建表的一个拷贝。删除新的数据文件,然后从其他

数据库将描述和索引文件移到破坏的数据库中。这给了你新的描述和索引文件,但是让数

据文件独自留下来了。回到(2)并且尝试重建索引文件。

附1:

Myisamchk使用说明:shell> myisamchk [options] tblname

[options]选项:

-a, --analyze

分析键值的分布。这通过让联结优化器更好地选择表应该以什么次序联结和应该使用

哪个键来改进联结性能。