我有一个基于 Ubuntu 机器上的 MySQL 服务器的网站。每隔几周,我的一个用户就会抱怨网站无法正常工作,而我(使用service mysql status
)发现这是因为 MySQL 服务器已关闭。我重新启动它(使用service mysql restart
),网站又可以正常工作了。在 中/var/log/mysql/error.log
,我看到的唯一错误消息是以下形式[ERROR] [MY-013134] [Server] Table 'XXX' is marked as crashed and should be repaired
。但是,重新启动服务器后,我没有看到表格有任何问题(我不确定这是否是服务器关闭的原因)。
这些频繁的故障对于我和我的用户来说都是一个很大的困扰。我该如何解决这个问题?
答案1
如果磁盘空间不足或出现类似的意外事件,某些数据库表可能已经损坏。
要解决这个问题,您需要从 MYSQL 运行它。
修复表 db_name.table_name;
答案2
听起来好像该表已声明ENGINE=MyISAM
。这个旧引擎存在突然关闭导致该错误消息的问题。如前所述REPAIR TABLE
(对于涉及的每个表),这是手动修复。
长期解决方案是切换到ENGINE=InnoDB
。该引擎避免那问题并自行修复大多数其他问题。
由于 MyISAM 正在逐步淘汰,引擎的改变最终将是强制性的。