1

有时我会收到类似“表被标记为损坏并需要修复”的错误。该数据库(表)正在使用 MyISAM。最近这种情况不断发生。可能是什么原因?最近我正在执行批量插入

INSERT INTO table (..., ..., ...) VALUES (...), (...), (...) ...

它就挂了。或者花了很长时间才完成它似乎挂在我身上。第二天,当我检查表时再次标记为损坏。当我尝试使用 mysqlcheck -r 时,它说所有表都正常,当它到达那个“损坏”的表时,它又挂在那里了......

那么,我能做些什么来防止这种情况发生。可能是什么原因。数据库托管在第 3 方,我该如何调试?

InnoDB 是更可靠的引擎吗?我听说 MyISAM 更快,但其他人说 InnoDB 也可以很快,但优化它需要更多的时间。我可以得出结论,即使经过优化,InnoDB 也更可靠但总体上有点慢?

4

3 回答 3

3

如果您的表损坏,您可以使用修复表命令来修复它们:

 REPAIR TABLE table;

如果您在服务器仍在运行时运行 myisamchk(并且插入/选择正在命中表),则可能是损坏了您的表的原因。我遇到的大多数损坏问题是在服务器仍在运行时尝试在服务器之外执行操作(复制文件等)。

InnoDB 对于只读数据库来说速度较慢,因为它具有 MyISAM 遗漏的特性(符合 ACID、行级锁定)。但是,如果您正在混合读取和写入,根据混合情况,InnoDB 可以提供严重的性能改进,因为它不必锁定整个表来执行写入。您也不会遇到腐败问题。

于 2009-06-13T15:05:50.440 回答
1

使用 InnoDB。

于 2009-06-13T20:16:06.527 回答
0

好的,所以问题是公司的数据库超出了托管公司允许的存储空间。所以显然没有人告诉公司他们超过了使用量……我猜是糟糕的主机。

顺便说一句,mysql不可能知道这个?

于 2009-09-05T03:44:19.143 回答