连载中 21/22

备份与恢复:mysqldump、xtrabackup 与一次误删演练

2026-05-13 · 4831 阅读 · 0 评论 · 0 赞

WHERE 忘写了的那个下午

运维同事在从库清历史数据,DELETE FROM orders_log——条件忘带了,4000 万行日志表瞬间清空。幸好:从库(super_read_only 前的老账)误删,主库数据还在;但如果主库被误删呢?备份不是把数据拷走,是把「恢复的能力」保存下来——没演练过恢复的备份,等于没备份。这篇先讲清备份工具,再完整推演一次误删恢复。

两大门派:逻辑备份与物理备份

维度mysqldump(逻辑)XtraBackup(物理)
产物SQL 文本,可读可改可跨版本数据文件拷贝,只能同版本恢复
速度慢,大表导数小时起快,文件级拷贝
恢复重放 SQL,更慢拷回 + prepare,快
适用中小库、单表导出、跨库迁移T 级大库、全量常规备份

InnoDB 场景的一致性来自 MVCC:mysqldump 加 --single-transaction 开启一个长事务,靠第 8 篇的快照读拿到「备份开始那一刻」的一致视图,全程不锁表;XtraBackup 则直接拷数据文件并追 redo,靠崩溃恢复机制保证一致——底层又回到第 7 篇的两本日志。

# 逻辑备份:单事务一致性 + 记录 binlog 位点
mysqldump --single-transaction --source-data=2 --triggers --routines --all-databases > full.sql

# 物理备份(XtraBackup 8.0):全量
xtrabackup --backup --target-dir=/data/backup/full --user=backup --password=***
xtrabackup --prepare --target-dir=/data/backup/full

8.0 也可以用 MySQL 自带的克隆插件或 MySQL Shell 的 dump 工具(并行、压缩、断点续传),思路相同:一致性快照 + 位点记录。

时间点恢复:全量 + binlog 的接力

全量备份是快照,备份之后的数据靠 binlog 补——这就是第 10 篇说 binlog 是「数据恢复」用途的兑现。误删恢复的标准流程:

  • 第一步:恢复最近一次全量备份(先把当前现场另存一份,别二次破坏);
  • 第二步:用 mysqlbinlog 重放全量备份点到误删前一刻的 binlog;
  • 第三步:跳过误删语句,继续重放到最新(业务流量保持熔断或走从库)。
# 提取某时间段的 binlog 为 SQL,先人工确认再重放
mysqlbinlog --start-datetime="2026-09-14 14:00:00" --stop-datetime="2026-09-14 15:29:59" mysql-bin.000123 > replay.sql

起止时间按「全量备份完成时刻」到「误删发生前一刻」取值。GTID 模式下(第 11 篇)更省心:恢复全量后 START REPLICA 指向存有全量之后 binlog 的实例即可自动补齐。

误删演练复盘

把开头的事故按流程走一遍:orders_log 在从库被清空 → 恢复最近全量到临时实例 → mysqlbinlog 重放至误删前 1 秒 → 导出 orders_log 数据灌回 → 校验行数与抽样内容 → 全程 40 分钟。事后加固三件套:高危 SQL 二次确认(客户端开启 safe-updates)、删除一律先 SELECT 核对再执行、权限最小化(业务账号不给 DROP/TRUNCATE)

备份策略清单

  • 全量(XtraBackup 每日)+ binlog 实时留存,RPO 可到秒级;
  • 备份必须异地(另一机房/对象存储),防整盘灾难;
  • 定期恢复演练(至少季度级),备份文件校验 md5 不等于能恢复;
  • 延迟从库(REPLICA 延迟 1 小时)是误删的最后防线——误删后还能从延迟从库抢救数据;
  • 主从不是备份:误删会被复制到所有从库(本文开头幸运在于是从库被删,若主库被删,主从一起没)。

安全题答完,22 篇全部到齐。下一篇收官复盘:把整个系列收进一张作战地图。

咖啡凉了,记得趁热喝。

503

10 年全栈工程师 · 503咖啡馆主理人

#MySQL#备份恢复#mysqldump#XtraBackup#binlog

评论 (0)

相关推荐

连载中 12/20

排查四件套:jstack、jmap、jstat、jcmd 的实战分工

jstack 看线程在干什么,jmap 看堆里装了什么,jstat 看运行时在变什么,jcmd 是统一入口。四把刀各管一段,配合着用没有查不动的现场。

#jstack#jmap#jstat#jcmd#排查工具
2026-09-16 · 4 阅读 · 0 评论 · 0 赞
连载中 11/20

GC 日志:把回收过程翻译成人话

一行 GC 日志里塞着七种信息:谁触发的、收了哪、停了多久、活了哪些。加上 -Xlog 配置,再加上日志分析工具,GC 不再是只能盯监控曲线的黑盒。

#GC日志#Xlog#日志分析#GC监控#Full GC排查
2026-09-16 · 13 阅读 · 0 评论 · 0 赞
连载中 10/20

ZGC:亚毫秒停顿是怎么炼成的

百 G 大堆停顿不到一毫秒,靠的是把搬家全部挪到并发阶段——着色指针让引用自带状态,读屏障让搬运中的对象依然可访问。代价是吞吐与内存,收益是停顿与堆大小解耦。

#ZGC#着色指针#读屏障#亚毫秒停顿#分代ZGC
2026-09-15 · 8 阅读 · 0 评论 · 0 赞