这个问题在线上不会自己消失,按现象、配置、日志三步走基本能定位。 腾讯云 CVM 上一批五百错误集中爆发,MySQL 写入报 Read-only file system,mount 输出里根分区带了 ro 标记,dmesg 末尾几条都是 I/O error。

如果同一时间还改过其他配置,建议一次只回退一项,方便确认是哪一步起的作用。

先分清是哪一类原因

  1. 磁盘出现坏块,内核检测到错误后自动把整个分区改成只读来保护数据
  2. 云盘被限流或者底层链路抖动,写请求连续超时也触发了同样的保护
  3. 有进程绕过文件系统直接写裸设备,把超级块写坏了

按顺序处理

1. 先看内核报错,锁定是哪块盘出问题

dmesg -T | grep -iE 'I/O error|remount'

2. 以读写方式临时重新挂载,先恢复业务

mount -o remount,rw /

3. 把关键数据同步到另一块盘留底

rsync -a /var/lib/mysql/ /data/mysql_bak/

4. 安排一次离线文件系统检查

touch /forcefsck

怎么确认已经恢复

mount 输出里根分区不再带 ro,写入测试文件成功,dmesg 在随后一小时内不再新增 I/O error。

容易忽略的地方

remount 成功不代表磁盘已经好了,坏块会在下次写到那片区域时再次触发;只读期间应用可能已经写坏部分数据,恢复后务必逐表校验。 复现步骤最好记下来,下次同类问题可以直接照单执行,不用再从零开始想。

作者 9823189