mysql数据恢复过程中断是运维中较常见的问题,可能由服务器宕机、手动取消命令、磁盘满等原因引发。面对中断,首要任务是确认当前恢复进度与数据状态,再选择合适的续做方案,而不是盲目重跑全部恢复流程。
一、判断中断时的恢复方式
不同的恢复手段,续做逻辑完全不同。常见方式包括:
- 使用 mysqlbinlog 工具重放二进制日志
- 基于 mysqldump 的逻辑备份导入
- 物理备份(如 xtrabackup)结合增量恢复
其中 binlog 重放中断后最容易续做,因为日志有序且含位置信息。
二、binlog 恢复中断后如何继续
1. 找到中断点
如果之前用如下命令恢复:
mysqlbinlog --start-position=154 mysql-bin.000001 | mysql -u root -p
中断后,可先查当前已执行到哪个 binlog 位置:
SHOW MASTER STATUS; -- 或者查被恢复库的某张标记表,记录最后事务id
2. 从断点续跑
假设确认在位置 732 之后中断,使用 --start-position 接着跑:
mysqlbinlog --start-position=732 mysql-bin.000001 | mysql -u root -p
若涉及多个 binlog 文件,按顺序补完后续文件即可。注意不要用 --start-datetime 粗略续做,避免时间重叠导致重复执行。
三、逻辑备份导入中断处理
dump 文件导入中途断开,由于 SQL 未必幂等,直接重跑可能主键冲突。建议:
- 导入前对大表加
--skip-add-drop-table并手动清表 - 或利用
source分段执行,记录已 source 的行数
例如将 dump 按表拆分后逐个导入,中断后只补未完成的表。
四、物理备份恢复中断
xtrabackup 等物理恢复若prepare阶段中断,一般可重新执行 prepare,它支持幂等重放 redo。若是 copy-back 中断,确认文件已拷贝部分后,重新 copy-back 并改属主即可。
五、续恢复注意事项
| 风险点 | 应对方式 |
|---|---|
| 重复执行事务 | 用位置点而非时间续做 |
| 数据不一致 | 恢复后执行 CHECK TABLE |
| 账号权限丢失 | 单独备份 mysql 系统库 |
恢复中断不可怕,核心是留痕断点、有序续做、恢复后校验。
只要理清所用恢复路径并找准断点,mysql数据恢复过程中断后完全可以安全继续恢复,不必从头再来。