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

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

WBOY
WBOYOriginal
2016-06-01 13:56:521103Durchsuche

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

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn