产品服务器上的表如何“崩溃”?

Posted

技术标签:

【中文标题】产品服务器上的表如何“崩溃”?【英文标题】:How can a table be "crashed" on a product server? 【发布时间】:2014-05-29 02:11:26 【问题描述】:

今天我的网站一整天都宕机了,我检查了日志(我手动记录了所有错误的 SQL 查询),我吓死了:

SELECT MIN(DATEAT),MAX(DATEAT) FROM table = Table './table' 被标记为崩溃并且最后一次(自动?)修复失败

这在 3 年内从未发生过。我从phpMyAdmin修复了表,结果是:

db.table  repair  warning  Number of rows changed from 0 to 3279
db.table  repair  status  OK

现在看起来不错,但我并不放松 - 我可能会丢失一些数据?以及如何预防,以免以后再次发生?该表是一个常用的 myIsam 表。

【问题讨论】:

上次发生在我身上的是硬件问题。是的,您可能会丢失数据,当然您有备份? 我有,但我不知道如何比较记录(手动任何人?),似乎我没有丢失最新记录。但是我发布了它给我的结果,它说只有“行数”被改变了 您可以使用不同的名称恢复备份,然后编写一些代码来比较两者。根据托管方式,我将调用主机原型 dba.stackexchange.com 可能是一个更好的提问方式 世界上只有两种人:备份的人,和从未发生过磁盘崩溃的人 【参考方案1】:

MyISAM 因在崩溃期间损坏数据而臭名昭著。将所有重要表转换为 InnoDB 是一个很好的理由。另见MyISAM versus InnoDB。

您保留的唯一 MyISAM 表应该是那些可以从 InnoDB 表中安全的数据轻松重新创建的表(有些人这样做是为了使用 MyISAM 的全文索引,但将规范数据保留在 InnoDB 中)。

比较数据的工具,我推荐pt-table-sync --print。

请参阅Compare two mysql databases 了解其他选项。

【讨论】:

以上是关于产品服务器上的表如何“崩溃”?的主要内容,如果未能解决你的问题,请参考以下文章

Play framework 2.1:连接数据库有时会崩溃。如何确保它在产品中?

读取位于 LINUX 服务器上的文本文件并更新 SQL Server 数据库中的表

极客头条:网易回应旗下游戏集体崩溃:用干冰修好了服务器;GitHub更换CEO,由产品主管接手;Nginx 1.21.4发布

如何显示每个产品的总订单销售额和产品相关信息。数据库服务器 2014

MySQL数据库服务器逐渐变慢 该如何分析与解决

将库存数据与产品数据保存在单独的表中