真出事那天按备份恢复,导入跑了六个小时还没完,业务给的时间窗口只有两小时,最后只能先回滚。碰到这种情况,我一般先确认改动有没有真的生效。

原因不复杂,平时只验证备份文件能不能解开,没算过完整恢复要多久,逻辑备份单线程导入还得重建索引,六小时里大半时间耗在索引上。

碰到「恢复演练耗时」这类问题,我习惯先把当前配置原样备份一份,改坏了立刻换回来,不用现场推。日志级别临时调高可以,记得改回去,长期开着既占磁盘又掩盖真问题。

time pv /backup/db.sql.gz | gunzip | mysql -uroot -p db
mysql -uroot -p -e 'show index from db.big_table'

权限不要一口气开到最大,先加到够用再往上试,范围小才好收。

具体做法是,每季度在演练库完整恢复一次,把耗时记在复盘文档里;把大表的索引放到数据导入之后再建,能省掉一半时间;按实测耗时的两倍来准备窗口,同时把回滚方案走一遍。

最后用这个标准收尾,演练耗时压到窗口以内,逐表行数与源库一致,回滚步骤也完整走通一次。

作者 9823189