首页/数据/数据库速查/大库备份的取舍与提速要点
备份与恢复56 条

大库备份的取舍与提速要点

上百 GB 的库要换思路:物理备份替代逻辑导出、从从库备份分摊主库压力、分区表分而治之,并预留恢复(比备份更慢)的窗口。

数据库速查数据更新于 2026-10-13

大库为什么换思路

数据量上到几十 GB 之后,逻辑导出会同时暴露三个问题:导出窗口长到影响业务、恢复时单线程重放慢在索引维护上、备份文件占用的空间与带宽难以为继。这时要把「备份」和「恢复」当成一个整体来选型:物理备份牺牲灵活性换恢复速度,逻辑备份保留灵活性但只适合中小规模。

基本信息

适用平台MySQL 5.7 / 8.0 的备份方案选型
逻辑备份mysqldump、mydumper、MySQL Shell dump(可并行)
物理备份Percona XtraBackup、MySQL Enterprise Backup
关键取舍备份时长 vs 恢复时长 vs 文件灵活性
窗口估算恢复耗时通常是备份耗时的 1.5-3 倍

典型使用场景

  • 库体积超过百 GB,逻辑导出窗口已经无法排进维护期
  • 主库不允许长时间承担备份压力,改为从从库执行导出
  • 需要在有限维护窗口内完成恢复,物理备份更有优势
  • 分区表场景:按分区滚动备份与归档,缩小单次备份粒度
  • 跨环境搭建测试库时,用压缩的逻辑导出更便于筛选与裁剪

规模与手段对照

数据规模推荐手段备注
小于 50 GBmysqldump 或 mydumper注意加 --single-transaction 保证一致性
50-500 GBmydumper 或 MySQL Shell dump并行导出,压缩后传输
大于 500 GBXtraBackup 等物理备份恢复快,需要 prepare 步骤
超大单表分区表按分区处理配合归档策略降低单次容量
只读业务库从从库执行备份先确认复制无延迟

从从库备份与并行导出

从从库备份与并行导出
set -euo pipefail
# 在从库上执行,分摊主库压力(务必先确认复制延迟为 0)
mysqldump -h replica-01 -u backup -p \
  --single-transaction --source-data=2 --all-databases \
  | zstd -3 > /data/backup/all_$(date +%F).sql.zst
# 并行逻辑导出(mydumper)
mydumper -h replica-01 -u backup -p -t 4 -c -o /data/backup/full_$(date +%F)
# 物理备份(XtraBackup 全量)
xtrabackup --backup --target-dir=/data/backup/xtra_$(date +%F) --host=replica-01
评估维护窗口时把恢复时间作为上限:物理备份还需要一个 prepare 步骤,逻辑恢复要重建索引与回放,实测一次比按经验估算更可靠。
从从库备份前先确认 Seconds_Behind_Source 为 0 且复制线程正常:备份到的是延迟数据本身不算问题,真正危险的是复制中断却没人发现,备出来的是一份过期的快照。

易错点

  • 继续用 mysqldump 备份几百 GB 的库:导出窗口动辄数小时,恢复时间更长,维护期根本排不下
  • 只按备份耗时排窗口:恢复要额外重建索引、回放 binlog,实际时长常是备份的一两倍以上
  • 从从库备份却不检查复制延迟:备份内容落后于主库,恢复后数据出现缺口
  • 物理备份不做 prepare 直接尝试启动实例:数据文件处于未一致状态,实例无法正常打开

数据来源与参考

  • MySQL 8.0 Reference Manual: Backup and Recovery
  • Percona XtraBackup 文档

相关工具

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌