mysql - 在使用 MyISAM 的 MySQL 中的 REPAIR TABLE 期间什么会导致数据丢失?

标签 mysql

REPAIR TABLE 的 MySQL 文档指出

It is best to make a backup of a table before performing a table repair operation; under some circumstances the operation might cause data loss. Possible causes include but are not limited to file system errors.

我想知道除了文件系统错误之外是否还有其他原因导致数据丢失。有人在野外见过这种情况吗?如果没有文件系统错误,修复丢失数据的可能性有多大?

我的具体情况如下。我有运行 Solaris 10 (SPARC) 的 Sun T5120 服务器并使用 MySQL 5.1.30。我有一张使用 MyISAM 引擎的表,它偶尔会损坏。表格损坏的某些时间是由于我们没有 UPS 的开发系统意外断电造成的。我不确定所有损坏都是由于停电造成的,因此可能还有一些其他原因会导致这种情况发生。如列出的原因here .

我想设置一个自动修复解决方案,以防这些疑似“其他原因”发生在生产系统中,或者生产 UPS 出现故障。我可以按照 this answer 中的建议设置一个 cron 作业来运行 mysqlcheck --auto-recover ,或者我可以修改插入该表的进程,以便在检测到损坏时立即执行 REPAIR TABLE EXTENDED 命令。但是,这两种方法都使用 REPAIR TABLE,因此容易丢失数据。

我可以在尝试修复之前备份表格,正如文档所建议的那样,但是表格相当大,我不确定是否有可用空间用于备份。我做了一些搜索,但除了文档中提到的内容外,没有找到任何解释为什么 REPAIR TABLE 会导致数据丢失。那么当你有一个健全的文件系统时,修复可能会丢失数据,还是文档只是谨慎?

最佳答案

MySQL 手册中列出的可能原因之一是软件中的错误。您应该阅读您之前版本的发行说明/更改历史记录,以查看修复表代码中的任何错误是否已得到修复,并在新版本发布时阅读发行说明。

出于兴趣,您插入数据的过程如何检测损坏?

您可以采取的另一项防止数据丢失的措施是进行备份并启用复制日志。如果发生故障,您可以从备份中恢复,然后使用复制日志将数据库恢复到崩溃时的状态。

最终,如果这是一个生产系统,您确实需要整理出一个好的电源,并且还要有第二台机器作为副本。

关于mysql - 在使用 MyISAM 的 MySQL 中的 REPAIR TABLE 期间什么会导致数据丢失?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2376536/

相关文章:

javascript - Node.js 同步调用护照本地注册

python - 如何使用Python在MYSQL数据库中仅选择最后1分钟的记录

Fluent NHibernate 的 MySQL 配置

java - com.mysql.jdbc.exceptions.jdbc4.CommunicationsException : Communications link failure

mysql - 如何将返回值转换为十进制并求和 MySQL?

php - 在 mysql 中搜索并回显多个结果

mysql - 删除 django 使用的数据库中的表

javascript - 如何在 Node js 中处理非常大的数字?

php - 错误 : Invalid PathExpression. 必须是字段选择失败的 StateFieldPathExpression

php - 保护远程 mysql 连接的安全