Maison >base de données >tutoriel mysql >MYSQL数据表损坏的原因分析和修复方法_MySQL

MYSQL数据表损坏的原因分析和修复方法_MySQL

WBOY
WBOYoriginal
2016-06-01 13:56:521160parcourir

  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将表标记为'检查过的'。
  

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn