1备份策略基础
备份类型:
1. 逻辑备份
• 导出为 SQL 语句或 CSV 文件
• 跨版本/跨平台恢复
• 速度较慢,适合小数据量
• 代表工具:mysqldump、pg_dump
2. 物理备份
• 直接复制数据文件
• 速度快,适合大数据量
• 通常只能恢复到相同版本
• 代表工具:XtraBackup、pg_basebackup
3. 增量备份
• 只备份上次以来的变更
• 节省存储空间和备份时间
• 恢复时需要完整链路
• 代表工具:XtraBackup、pgBackRest
关键指标:
• RPO(Recovery Point Objective):可接受的最大数据丢失量
• RTO(Recovery Time Objective):可接受的最长恢复时间
• 备份窗口:备份操作可占用的最长时间
• 存储成本:备份数据的存储空间需求
备份策略参考:
• 小型数据库(< 10GB):mysqldump/pg_dump 每日全量
• 中型数据库(10-500GB):物理备份每日全量 + 日志归档
• 大型数据库(> 500GB):物理备份每周全量 + 每日增量 + 持续日志归档
2MySQL 备份工具详解
1. mysqldump(内置工具)
适用场景:小型数据库、跨版本迁移、部分表导出
常用命令:
# 全库备份
mysqldump -u root -p --all-databases --single-transaction \
--routines --triggers --events > full_backup.sql
# 单库备份(InnoDB 一致性快照)
mysqldump -u root -p --single-transaction --databases mydb > mydb.sql
# 压缩备份
mysqldump -u root -p --all-databases | gzip > backup.sql.gz
优点:内置无需安装、SQL 格式通用、支持跨版本恢复
缺点:单线程速度慢、大库备份时间长、恢复更慢
2. mydumper / myloader(多线程)
适用场景:中型数据库、需要加速的逻辑备份
常用命令:
# 多线程备份
mydumper -u root -p pass -h 127.0.0.1 -B mydb \
-t 8 -c -o /backup/mydb/
# 多线程恢复
myloader -u root -p pass -h 127.0.0.1 -B mydb \
-t 8 -d /backup/mydb/
优点:多线程速度是 mysqldump 的 3-10 倍、支持按表并行
缺点:需要额外安装、输出格式非标准 SQL
3. Percona XtraBackup(物理备份)
适用场景:中大型数据库、需要增量备份和快速恢复
常用命令:
# 全量备份
xtrabackup --backup --target-dir=/backup/full \
--user=root --password=pass
# 增量备份
xtrabackup --backup --target-dir=/backup/inc1 \
--incremental-basedir=/backup/full
# 准备恢复(apply log)
xtrabackup --prepare --target-dir=/backup/full
xtrabackup --prepare --target-dir=/backup/full \
--incremental-dir=/backup/inc1
# 恢复
xtrabackup --copy-back --target-dir=/backup/full
优点:
• 在线备份不锁表(InnoDB)
• 增量备份节省空间和时间
• 恢复速度是逻辑备份的 10-50 倍
• 支持压缩和加密
• 支持流式备份到远程服务器
缺点:
• 仅支持 InnoDB/XtraDB(MyISAM 仍需锁表)
• 恢复时需要停止 MySQL
• 只能恢复到相同大版本
性能参考(100GB 数据库):
• mysqldump:备份 2-4 小时,恢复 4-8 小时
• mydumper(8 线程):备份 30-60 分钟,恢复 1-2 小时
• XtraBackup:备份 15-30 分钟,恢复 10-20 分钟
3PostgreSQL 备份工具详解
1. pg_dump / pg_restore(内置工具)
适用场景:小型数据库、跨版本迁移、部分表导出
常用命令:
# 自定义格式备份(推荐,支持并行恢复)
pg_dump -Fc -f mydb.dump mydb
# 目录格式(支持并行备份)
pg_dump -Fd -j 4 -f /backup/mydb mydb
# 纯 SQL 格式
pg_dump -Fp -f mydb.sql mydb
# 并行恢复
pg_restore -j 4 -d mydb mydb.dump
优点:内置可靠、支持并行导出/恢复、自定义格式灵活
缺点:大库仍然较慢、不支持增量
2. pg_basebackup(物理备份)
适用场景:基础物理备份、搭建流复制从库
常用命令:
# 基础物理备份
pg_basebackup -D /backup/base -Ft -z -P
# 流式备份
pg_basebackup -D /backup/base -Xs -P
优点:内置工具、搭建从库标准方式
缺点:不支持增量、只能全量备份、恢复需要完整 WAL 链
3. pgBackRest(企业级备份)
适用场景:中大型数据库、需要完整备份管理
核心功能:
• 全量 + 差异 + 增量备份
• 并行备份和恢复
• 本地/远程/S3/Azure/GCS 存储
• 备份加密和压缩
• WAL 归档管理
• 备份自动过期和清理
常用命令:
# 全量备份
pgbackrest --stanza=mydb --type=full backup
# 差异备份
pgbackrest --stanza=mydb --type=diff backup
# 增量备份
pgbackrest --stanza=mydb --type=incr backup
# 时间点恢复(PITR)
pgbackrest --stanza=mydb --type=time \
--target="2024-01-15 10:30:00" restore
# 查看备份信息
pgbackrest --stanza=mydb info
4. Barman(备份和恢复管理器)
适用场景:多实例统一管理、需要中央化备份管理
核心功能:
• 支持 pg_basebackup 和 rsync 两种模式
• WAL 归档和流式接收
• 时间点恢复(PITR)
• 多实例统一管理
• Hook 脚本支持
常用命令:
# 执行备份
barman backup myserver
# 查看备份列表
barman list-backup myserver
# 恢复到指定时间点
barman recover --target-time "2024-01-15 10:30:00" \
myserver 20240115T103000 /var/lib/pgsql/data
性能参考(100GB 数据库):
• pg_dump(4 线程):备份 1-2 小时,恢复 2-3 小时
• pg_basebackup:备份 30-60 分钟
• pgBackRest(增量):备份 5-15 分钟,恢复 15-30 分钟
• Barman:性能与 pg_basebackup 相当
4功能对比总表
MySQL 备份工具对比:
┌──────────────────┬──────────────────┬──────────────────┬──────────────────┐
│ 功能 │ mysqldump │ mydumper │ XtraBackup │
├──────────────────┼──────────────────┼──────────────────┼──────────────────┤
│ 备份类型 │ 逻辑 │ 逻辑 │ 物理 │
│ 全量备份 │ ✔ │ ✔ │ ✔ │
│ 增量备份 │ ✘ │ ✘ │ ✔ │
│ 多线程 │ ✘ │ ✔ │ ✔ │
│ 在线备份 │ ✔(InnoDB) │ ✔(InnoDB) │ ✔(InnoDB) │
│ 压缩 │ 需管道 gzip │ ✔ 内置 │ ✔ 内置 │
│ 加密 │ ✘ │ ✘ │ ✔ │
│ 流式备份 │ ✔ 管道 │ ✘ │ ✔ │
│ 跨版本恢复 │ ✔ │ ✔ │ ✘ │
│ 恢复速度 │ 慢 │ 中 │ 快 │
│ 安装难度 │ 内置 │ 需安装 │ 需安装 │
│ 维护方 │ Oracle │ 社区 │ Percona │
└──────────────────┴──────────────────┴──────────────────┴──────────────────┘
PostgreSQL 备份工具对比:
┌──────────────────┬──────────────────┬──────────────────┬──────────────────┐
│ 功能 │ pg_dump │ pgBackRest │ Barman │
├──────────────────┼──────────────────┼──────────────────┼──────────────────┤
│ 备份类型 │ 逻辑 │ 物理 │ 物理 │
│ 全量备份 │ ✔ │ ✔ │ ✔ │
│ 增量备份 │ ✘ │ ✔ │ ✘(差异) │
│ PITR │ ✘ │ ✔ │ ✔ │
│ 多线程 │ ✔(目录格式) │ ✔ │ ✔ │
│ 远程存储 │ ✘ │ ✔(S3/Azure/GCS) │ ✔(rsync/SSH) │
│ 压缩 │ ✔ 内置 │ ✔ 内置 │ ✔ 内置 │
│ 加密 │ ✘ │ ✔ │ ✘ │
│ 多实例管理 │ ✘ │ 有限 │ ✔ │
│ 恢复速度 │ 慢 │ 快 │ 中 │
│ 安装难度 │ 内置 │ 需安装 │ 需安装 │
│ 维护方 │ PG 社区 │ pgBackRest 社区 │ EDB │
└──────────────────┴──────────────────┴──────────────────┴──────────────────┘
5场景选型指南
MySQL 场景选型:
场景一:小型数据库(< 10GB)
推荐:mysqldump
理由:内置工具,无需额外安装。10GB 以内全量备份/恢复都可接受。配合 cron 每日执行即可。
备份策略:每日全量 + binlog 持续归档
场景二:中型数据库(10-200GB)
推荐:mydumper + XtraBackup
理由:mydumper 用于跨版本迁移和部分表导出,XtraBackup 用于日常全量+增量备份。两者配合覆盖所有场景。
备份策略:XtraBackup 每周全量 + 每日增量 + binlog 归档
场景三:大型数据库(> 200GB)
推荐:XtraBackup(必选)
理由:大库只有物理备份才能满足备份窗口和 RTO 要求。增量备份大幅减少日常备份时间。
备份策略:XtraBackup 每周全量 + 每日增量 + 流式备份到远程
PostgreSQL 场景选型:
场景一:小型数据库(< 10GB)
推荐:pg_dump
理由:内置工具,自定义格式(-Fc)支持并行恢复,灵活可靠。
备份策略:每日全量 + WAL 归档
场景二:中型数据库(10-200GB)
推荐:pgBackRest
理由:支持增量备份和 PITR,恢复速度远超逻辑备份。S3 等远程存储支持使异地备份简单化。
备份策略:每周全量 + 每日差异 + 持续 WAL 归档
场景三:大型数据库 / 多实例管理
推荐:pgBackRest(单实例) / Barman(多实例)
理由:pgBackRest 增量备份性能最优。如需统一管理多个 PG 实例,Barman 的中央化管理更合适。
备份策略:每周全量 + 每日增量 + 持续 WAL 归档 + S3 异地
云数据库用户:
• 阿里云 RDS / AWS RDS 自带自动备份和 PITR
• 建议额外配置逻辑备份到自有存储(防止云厂商锁定)
• ora100 的备份策略可作为参考:每 6 小时 mysqldump + AES 加密 + GitHub 远程存储
6备份最佳实践
七条黄金法则:
1. 3-2-1 原则
• 至少保留 3 份备份副本
• 存储在 2 种不同的介质上
• 其中 1 份在异地
• ora100 实践:本地 + GitHub 远程 + RDS 自动备份
2. 定期验证恢复
• 备份不验证 = 没有备份
• 建议至少每月做一次恢复演练
• 记录恢复时间(实际 RTO)
• 自动化恢复验证脚本
3. 加密备份文件
• 物理备份和传输过程都要加密
• 推荐 AES-256-CBC 加密
• 加密密钥单独保管(不要和备份放在一起)
• ora100 实践:openssl enc -aes-256-cbc -pbkdf2
4. 监控备份任务
• 备份成功/失败告警
• 备份大小异常告警(突然变大或变小)
• 备份延迟告警
• 存储空间使用率告警
5. 保留策略
• 日备份保留 7-30 天
• 周备份保留 4-12 周
• 月备份保留 6-12 月
• 年度备份保留 3-7 年(看合规要求)
6. 文档化
• 记录备份策略、脚本位置、恢复步骤
• 记录关键联系人和升级流程
• 定期更新文档
• ora100 实践:完整的灾备文档(docs/active/disaster-recovery.md)
7. 自动化一切
• 使用 cron/systemd timer 自动执行备份
• 自动清理过期备份
• 自动上传到远程存储
• 自动发送备份报告
• ora100 实践:scripts/setup-backup-cron.sh 一键初始化
与 ora100 生态的配合:
• DBCheck 可以检查备份策略的完整性
• 建议在巡检报告中加入备份状态检查项
• 备份恢复可作为 DBCheck 巡检评分的重要指标