我有一个大约有65个表的数据库。其中一个表是一个名为order_line的大型MyISAM表。这个表偶尔会损坏。当我使用CHECK TABLE命令时,我得到以下消息:
Op | Msg_type | Msg_Text
check | warning | "Table is marked as crashed"
check | warning | "3 clients are using or havent's closed the table properly"
check | error | "Found 1149921 keys of 114948"
check | error | "Corrupt"
我在网上读到很多这样的东西最常见的答案是“你应该修理table”。这对我很有效,但我想知道发生这种情况的原因是什么,以及我如何才能重现这种情况。
我有一个网络应用程序,我们有一个数据库,每个客户(300+)。我们运行脚本来更新所有这些数据库。我害怕当我这样做,很多这些表得到损坏。
我还想知道更新所有这些数据库的最好方法是什么。我必须关闭MySQL并重新启动它以确保没有用户正在使用这些表/数据库吗?
2条答案
按热度按时间xesrikrc1#
我personaly修复我的数据库通过以下命令在
mysql myDatabase
。cigdeys32#
MyISAM表损坏的原因与此引擎的实现有关。它依赖操作系统将数据库缓冲区刷新回磁盘,而不是使用提前写入日志和专用策略来刷新脏缓冲区。MyISAM也不是事务性的。
我强烈建议使用
InnoDB
引擎,它似乎更适合您的情况(表order_line
)。MyISAM不是适合您的用例的引擎。