数据库备份文件太大怎么办?分卷压缩与增量备份实战方案

📅 2026-07-21👁 1 阅读🗃 数据迁移备份
数据迁移备份
数据库备份文件太大怎么办?分卷压缩与增量备份实战方案

一个朋友的电商系统跑了两三年,MySQL全量备份文件从最初的500MB涨到了12GB。每次备份都要跑半小时,传输到异地更是慢得让人想砸键盘。他问我有没有办法把备份文件弄小一点,答案是有的,而且不止一种。

方案一:mysqldump原生压缩

最简单的办法是在mysqldump时直接加管道压缩:mysqldump --single-transaction --quick 数据库名 | gzip > backup.sql.gz。一个12GB的SQL文件经过gzip压缩后通常能压到2GB左右,压缩率一般在60%到80%之间。

如果想压缩率更高,用pigz替代gzip。pigz是gzip的多线程版本,在多核服务器上压缩速度能快好几倍,压缩率基本一致。安装简单,CentOS上yum install pigz即可。

恢复时也不复杂:gunzip < backup.sql.gz | mysql 数据库名,管道方式直接还原,不需要先解压到磁盘。

方案二:分卷压缩

即使压缩了,单个2GB的文件在传输时还是不方便——网络断了就得从头来。分卷压缩把大文件拆成多个固定大小的小文件,传完一个算一个,断了只需要续传当前那个。

split命令配合管道:mysqldump --single-transaction 数据库名 | gzip | split -b 500m - backup_。这会生成backup_aa、backup_ab、backup_ac等多个500MB的分卷文件。

恢复时反过来:cat backup_* | gunzip | mysql 数据库名。注意分卷文件必须按顺序拼接,split生成的文件名默认按字母顺序排列,用通配符匹配即可。

判断分卷大小有个经验值:根据你的网络带宽和断线频率来定。带宽稳定就设大一点(1GB),网络不稳定就设小一点(200MB)。每个分卷传输时间控制在5分钟以内比较合理。

方案三:Percona XtraBackup增量备份

压缩治标不治本,真正减少备份体积还得靠增量备份。Percona XtraBackup支持全量加增量的备份模式:第一次做全量备份,之后只备份变化的数据页。

操作流程:先做一次全量xtrabackup --backup --target-dir=/backup/base,然后做增量xtrabackup --backup --target-dir=/backup/inc1 --incremental-basedir=/backup/base。每次增量只备份上次到这次之间变化的数据块,一个日写入量几GB的系统,增量备份可能只有几十MB。

恢复时按顺序合并:xtrabackup --prepare --apply-log-only --target-dir=/backup/base --incremental-dir=/backup/inc1,先把增量合并到全量上,最后--copy-back恢复到数据目录。

这套方案的备份文件体积最小、传输效率最高,是数据迁移备份的理想选择。建议每周一次全量备份加每日增量备份,保留最近四周的备份数据。配合压缩和分卷,备份文件的管理和传输都会轻松很多。