MySQL 表损坏

标签 mysql sql linux

我们有一个网站,上面有一张税率表,有一天不知何故被破坏了。

我尝试从表中选择 * 但实际上花了几个小时才产生任何结果。

我尝试截断和删除表格。产生与选择相同的结果。 最终 Action 停止了。所以,我运行了一个

myisamchk -r theTable.MYI

修复后看起来没问题,但我尝试再次从中选择 * 并仍然产生相同的结果。

引擎是MySQL

复制表格很容易,我可以删除表格吗?*(frm,MYD,MYI)?

或者如果我正在做的事情有更好的方法。

最佳答案

是的,您可以删除 .FRM、.MYD、.MYI 文件以删除 MyISAM 表。当您 DROP TABLE 时会发生这种情况。

MyISAM 表因损坏而臭名昭著。但是在重新创建表后你反复遇到问题这一事实让我怀疑你的硬盘驱动器是否有故障。值得testing the health of your hard drive .

您还应该改用 InnoDB 而不是 MyISAM。 InnoDB 有很多防止损坏的保护措施,包括页面校验和、同步磁盘写入、崩溃恢复等。MyISAM 正在慢慢淘汰,并且没有收到 MySQL 开发人员的任何修复。 InnoDB 现在是 MySQL 5.5(大约 2010 年)的默认存储引擎,它将继续成为 future 发展的重点。

请注意,使用 InnoDB,您不能像使用 MyISAM 那样简单地删除文件来实现删除表。您必须使用 DROP TABLE,以便 InnoDB 将删除与其内部数据字典同步。

关于MySQL 表损坏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21193546/

相关文章:

linux - 让 dmesg 打印人类可读时间

mysql - varchar 到日期时间

mysql - 在 mariadb 上启用 SSL

mysql - SQL:排序后按列分组

python - 阻塞套接字并选择

linux - 作为 Systemd 服务运行时如何将输出通过管道传输到文件?

mySQL:CASE、GROUP 和 ORDER By

php - 无法选择 != null 的字段

SQL Server,检查 varchar 是否包含全零

sql - SQL Server 2008中ELSE IF语句中是否可以写IN子句