为什么我的数据库表被破坏了?

时间:2016-09-03 16:36:31

标签: mysql database wordpress

我正在监视一个客户端的数据库,该客户端的wp_posts表在过去一周内被损坏了两次。当我尝试使用PhpMyAdmin访问该表时,我收到以下消息:

  

表格wp_posts已被标记为已崩溃,必须予以修复。

没有迹象表明这是如何发生的或者可以做些什么来阻止它。我已经做了8年的开发人员,之前从未经历过这种情况,所以我感到很茫然。有没有人遇到这个问题,我怎么能在它再次发生之前处理它?<​​/ p>

1 个答案:

答案 0 :(得分:3)

错误消息不知道它是如何发生的。它可能是一个有故障的磁盘,一个不完整的I / O写入,一个MySQL代码中的错误,或者有人可能已经打开文件并用编辑器在其中乱写。

可以做些什么来解决它是使用MySQL附带的myisamchk表修复工具。此处介绍了如何使用此工具:https://dev.mysql.com/doc/refman/5.7/en/myisam-repair.html

可以做些什么来预防呢? 停止使用MyISAM存储引擎。

MyISAM曾被认为更稳定,性能更高,但这已经超过10年了。 InnoDB从那时起已经获得了所有的工程改进,它的性能明显高于MyISAM,并且在自修复方面更加安全。在每个版本的MySQL中,MyISAM逐渐被弃用。

更改存储引擎非常简单:

ALTER TABLE wp_posts ENGINE=InnoDB;

您必须为数据库中的每个表执行此操作,一次一个。但是您可以生成要运行的命令集:

SELECT CONCAT('ALTER TABLE `', table_name, '` ENGINE=InnoDB;') AS _sql
FROM INFORMATION_SCHEMA.TABLES
WHERE table_schema = DATABASE() AND table_type = 'BASE TABLE';

捕获该查询的输出并将语句作为SQL脚本运行。在99%的情况下,如果您使用当前版本的MySQL(例如5.5分支或更高版本中的任何GA版本),使用MyISAM都没有任何好处。