MySql客户端正在使用或尚未正确关闭表

dly7yett  于 2022-12-17  发布在  Mysql
关注(0)|答案(2)|浏览(127)

我有一个大约有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并重新启动它以确保没有用户正在使用这些表/数据库吗?

xesrikrc

xesrikrc1#

我personaly修复我的数据库通过以下命令在mysql myDatabase

CHECK TABLE myTable ; 
--- ERROR
REPAIR TABLE myTable;
CHECK TABLE myTable ; 
--- OK
cigdeys3

cigdeys32#

MyISAM表损坏的原因与此引擎的实现有关。它依赖操作系统将数据库缓冲区刷新回磁盘,而不是使用提前写入日志和专用策略来刷新脏缓冲区。MyISAM也不是事务性的。
我强烈建议使用InnoDB引擎,它似乎更适合您的情况(表order_line)。MyISAM不是适合您的用例的引擎。

相关问题