집 >데이터 베이스 >MySQL 튜토리얼 >MYSQL数据表损坏的原因分析和修复方法_MySQL
1.表损坏的原因分析
以下原因是导致mysql表毁坏的常见原因:
1、服务器突然断电导致数据文件损坏。
2、强制关机,没有先关闭mysql服务。
3、mysqld进程在写表时被杀掉。
4、使用myisamchk的同时,mysqld也在操作表。
5、磁盘故障。
6、服务器死机。
7、mysql本身的bug。
2.表损坏的症状
一个损坏的表的典型症状如下:
1、当在从表中选择数据之时,你得到如下错误:
Incorrectkeyfilefortable:'...'.Trytorepairit
2、查询不能在表中找到行或返回不完全的数据。
3、Error:Table'p'ismarkedascrashedandshouldberepaired。
4、打开表失败:Can’topenfile:‘×××.MYI’(errno:145)。
5、
3.预防MySQL表损坏
可以采用以下手段预防mysql表损坏:
1、定期使用myisamchk检查MyISAM表(注意要关闭mysqld),推荐使用checktable来检查表(不用关闭mysqld)。
2、在做过大量的更新或删除操作后,推荐使用OPTIMIZETABLE来优化表,这样既减少了文件碎片,又减少了表损坏的概率。
3、关闭服务器前,先关闭mysqld(正常关闭服务,不要使用kill-9来杀进程)。
4、使用ups电源,避免出现突然断电的情况。
5、使用最新的稳定发布版mysql,减少mysql本身的bug导致表损坏。
6、对于InnoDB引擎,你可以使用innodb_tablespace_monitor来检查表空间文件内文件空间管理的完整性。
7、对磁盘做raid,减少磁盘出错并提高性能。
8、数据库服务器最好只跑mysqld和必要的其他服务,不要跑其他业务服务,这样减少死机导致表损坏的可能。
9、不怕万一,只怕意外,平时做好备份是预防表损坏的有效手段。
4.MySQL表损坏的修复
MyISAM表可以采用以下步骤进行修复:
1、使用reapairtable或myisamchk来修复。
2、如果上面的方法修复无效,采用备份恢复表。
具体可以参考如下做法:
阶段1:检查你的表
如果你有很多时间,运行myisamchk*.MYI或myisamchk-e*.MYI。使用-s(沉默)选项禁止不必要的信息。
如果mysqld服务器处于宕机状态,应使用--update-state选项来告诉myisamchk将表标记为'检查过的'。