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
分析键值的分布。这通过让联结优化器更好地选择表应该以什么次序联结和应该使用
哪个键来改进联结性能。
发布评论