服务公告

服务公告 > 常见问题 > 数据库磁盘满导致表损坏:先扩容再修复

数据库磁盘满导致表损坏:先扩容再修复

发布时间:2026-02-17 14:29
## 症状 数据盘写满的告警还没处理完,数据库就跟着出了问题:部分表查询报错,报错信息里出现损坏标记,写入断断续续失败,业务的写入接口开始返回错误。紧急之下直接对损坏表跑修复命令,结果损坏反而扩大,小病拖成了大病,这正是此类故障最常见的二次伤害路径。 ## 定位 磁盘满与表损坏的因果要理清:写入过程中空间耗尽,数据文件与索引文件停在不一致的中间状态,文件系统层面看是写了一半,数据库层面看就是损坏标记。此时先确认磁盘现状与损坏范围:空间使用率、哪些表报错、错误的具体形态。范围确认后顺序就是铁律:先恢复空间,再修复表,顺序反了,修复过程自己还需要写空间,等于在满盘上继续施压,二次损伤几乎必然发生。 ## 解决 第一步扩容或清理,让磁盘有充足余量,清理优先清理日志与临时文件这类安全项,不确定的内容宁可扩容也不删。第二步备份当前状态,哪怕表已损坏,先留一份原始现场,修复失败还有退路。第三步才轮到修复工具,按表逐个执行,每修一张验证一张。 ``` mysqlcheck --repair 库名 表名 ``` 修复完成的表做一次抽样查询与计数核对,数据量与业务侧记录对得上再宣布恢复。 ## 预防 磁盘水位告警至少设两道:百分之八十提醒,百分之九十紧急,给处理留出时间窗。数据库的日志与临时空间纳入容量规划,别让数据文件与日志挤同一块盘的末位空间。修复类操作预先在测试环境演练,真出事时按流程执行而不是临场发挥。顺云云服务器可在控制台直接完成磁盘扩容,扩容前用快照留底,磁盘满与表损坏这类连锁故障,预防的成本远低于抢救,这笔账每次事故后都值得重新算一遍。