两类备份怎么选
逻辑备份(mysqldump、mydumper)把数据导出成 SQL 文本,跨版本友好、可读可改,但导出慢、恢复更慢;物理备份(Percona XtraBackup)直接拷贝数据文件,快且能增量,但绑定大版本与文件格式,单表恢复受限。选型的依据是数据规模、恢复时间目标与是否需要跨版本搬运。
对比与选型依据
| 维度 | 逻辑备份 | 物理备份 |
|---|---|---|
| 速度 | 慢,导出与导入都是逐行 SQL | 快,文件级拷贝,支持增量 |
| 跨版本 | 较友好,注意语法与排序规则差异 | 绑定大版本与厂商,跨版本基本不可用 |
| 粒度 | 库、表、甚至条件导出都灵活 | 以实例与库为主,单表恢复限制多 |
| 产物 | SQL 文本,可读可改可审阅 | 二进制文件,恢复前需 prepare |
| 体积 | 文本较大,压缩后可用 | 与原数据接近,压缩率高 |
| 典型工具 | mysqldump、mydumper、mysqlpump | XtraBackup、企业版 ME 备份 |
组合策略
组合策略
# 日常:物理全备 + binlog 归档,快且支持时间点恢复
xtrabackup --backup --target-dir=/data/backup/full_$(date +%F) --user=root --password=*** # 物理全备
xtrabackup --prepare --target-dir=/data/backup/full_$(date +%F) # 恢复前必须 prepare
# 长期归档:每周一份逻辑备份,跨版本可读、便于异地保存
mysqldump -uroot -p --single-transaction --routines --events --all-databases | gzip -6 > /data/archive/weekly_$(date +%F).sql.gz
mysql -uroot -p -e 'SHOW BINARY LOGS;' > /data/archive/binlog_list_$(date +%F).txt # 留存归档时的 binlog 清单
# 小表级恢复:逻辑备份更方便,直接抽单表导入
zcat /data/archive/weekly_2026-10-01.sql.gz | sed -n '/CREATE TABLE `t_order`/,/^UNLOCK/p' > t_order.sql典型使用场景
- TB 级库的日常容灾,用物理全备加增量把恢复时间压到可接受范围
- 跨大版本迁移(5.7 到 8.0),用逻辑备份搬运数据,再由物理备份兜底
- 单表误删,用逻辑备份抽表恢复,避免整实例回滚
- 长期归档与审计,用 SQL 文本产物便于人工审阅与异地保存
- 小库或测试环境,直接用逻辑备份省去 prepare 步骤
两套并行不冲突:物理备份用于快速恢复与 PITR,逻辑备份用于长期归档、跨版本搬运与精细到表的选择性恢复。
只做逻辑备份的 TB 级库,恢复窗口往往不可接受;只做物理备份的库,跨大版本迁移时会卡住,必须有逻辑导出兜底。