跳到主要内容

备份与恢复

问题

数据库有哪些备份方式?如何实现时间点恢复(PITR)?全量备份和增量备份怎么配合?

答案

备份分类

维度类型说明
范围全量备份 / 增量备份 / 差异备份全部数据 / 上次全量后变更 / 上次备份后变更
方式逻辑备份 / 物理备份SQL 导出 / 数据文件拷贝
状态热备 / 温备 / 冷备不影响业务 / 只读 / 停机

逻辑备份 vs 物理备份

对比逻辑备份(mysqldump)物理备份(XtraBackup)
速度慢(逐行导出)快(文件级拷贝)
恢复速度慢(逐行执行 SQL)快(文件拷贝)
跨版本✅ 支持❌ 需相同版本
压缩好(纯文本)一般
粒度表级库级
大数据量❌ 不适合(>100GB)✅ 适合

mysqldump

# 全库备份
mysqldump -u root -p --all-databases --single-transaction \
--master-data=2 --flush-logs > full_backup.sql

# 单库备份
mysqldump -u root -p --single-transaction mydb > mydb_backup.sql

# 单表备份
mysqldump -u root -p mydb users orders > tables_backup.sql

重要参数:

参数说明
--single-transactionInnoDB 一致性快照(不锁表)
--master-data=2记录 binlog 位置(注释形式)
--flush-logs刷新 binlog,方便增量恢复
--routines备份存储过程和函数
--triggers备份触发器

XtraBackup(Percona)

# 全量备份
xtrabackup --backup --target-dir=/backup/full

# 准备备份(应用 redo log)
xtrabackup --prepare --target-dir=/backup/full

# 增量备份(基于全量)
xtrabackup --backup --target-dir=/backup/inc1 \
--incremental-basedir=/backup/full

# 恢复
xtrabackup --copy-back --target-dir=/backup/full

PITR(Point-In-Time Recovery)

时间点恢复:恢复到任意时刻的数据状态。

PITR 步骤

# 1. 恢复全量备份
mysql < full_backup.sql

# 2. 重放 binlog 到误操作之前
mysqlbinlog --start-datetime="2024-01-15 00:00:00" \
--stop-datetime="2024-01-15 14:30:00" \
mysql-bin.000001 mysql-bin.000002 | mysql

# 或用 GTID 范围
mysqlbinlog --include-gtids="uuid:1-100" \
--exclude-gtids="uuid:95" \ # 排除误操作的事务
mysql-bin.000001 | mysql

备份策略建议

场景策略
小数据库(<10GB每天 mysqldump 全量
中等数据库(10-500GB)每周全量 + 每天增量(XtraBackup)
大数据库(>500GB每周全量 + 每天增量 + binlog 实时备份

3-2-1 原则

  • 3 份数据副本
  • 2 种不同存储介质
  • 1 份异地备份

常见面试问题

Q1: 误删数据如何恢复?

答案

  1. 发现误操作:立即停止相关业务写入
  2. 确认备份:找到最近的全量备份和 binlog
  3. 恢复全量:在新实例上恢复全量备份
  4. 重放 binlog:重放到误操作之前的时间点(跳过误操作的事务)
  5. 验证数据:确认恢复的数据正确
  6. 导入生产:将恢复的数据导入生产库

关键:必须有开启 binlog,否则无法做 PITR。

Q2: mysqldump 的 --single-transaction 原理是什么?

答案

对于 InnoDB 表,--single-transaction 会在备份开始时开启一个一致性快照事务(REPEATABLE READ),利用 MVCC 读取备份开始时刻的数据,不需要加表锁,不影响在线业务。

注意:仅对 InnoDB 有效。MyISAM 表仍需要 LOCK TABLES。

Q3: 如何验证备份的有效性?

答案

  1. 定期恢复测试:将备份恢复到测试环境,验证数据完整性
  2. 校验工具pt-table-checksum 比对主从/备份的数据一致性
  3. 自动化验证:CI/CD 中定期执行备份恢复 + 数据校验
  4. 监控备份状态:监控备份任务是否按时完成、备份文件大小是否异常

相关链接