产品服务器上的表如何“崩溃”?
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发布