mysqldump + gzip 是最直接的压缩备份方案,通过管道实时压缩避免中间文件,配合 --single-transaction、pigz 并行压缩、--skip-comments 和 --compact 可显著提升效率与压缩率。

mysqldump + gzip 是最直接的压缩备份方案
MySQL 本身不内置压缩备份功能,mysqldump 输出的是纯 SQL 文本,天然适合用外部工具压缩。直接管道压缩能避免生成中间大文件,节省磁盘 I/O 和临时空间。
-
mysqldump -u root -p database_name | gzip > backup_$(date +%F).sql.gz—— 最常用且安全的方式 - 加
--single-transaction(InnoDB)或--lock-tables=false(谨慎)可减少锁表时间 - 避免先写入
.sql再gzip:大库可能因磁盘满失败,且多占一倍空间 - gzip 压缩率通常 70%–85%,对文本类 SQL 效果明显;若含大量 BLOB,压缩收益会下降
使用 pigz 替代 gzip 提升多核压缩速度
默认 gzip 是单线程,大库备份时 CPU 利用率低、耗时长。pigz 是 gzip 的并行实现,能充分利用多核,实测 4 核下快 2–3 倍。
- 安装:
apt install pigz(Debian/Ubuntu)或yum install pigz(CentOS/RHEL) - 替换命令:
mysqldump -u root -p db | pigz > backup.sql.gz - 注意:
pigz输出格式与gzip兼容,解压仍可用gunzip或zcat - 若备份服务器内存紧张,可加
-p2限制线程数,避免 swap 颠簸
跳过注释和冗余信息进一步减小 dump 体积
默认 mysqldump 会在输出中插入大量注释(如 /*!40101 SET ... */)、版本信息、表结构分隔符等,这些对恢复非必需,却增加 5%–15% 体积。
- 加
--skip-comments去掉所有/*! */注释(注意:若跨版本迁移,部分条件注释可能影响兼容性) - 加
--compact精简输出格式(去掉默认的额外空行、头尾说明文字) - 组合示例:
mysqldump -u root -p --skip-comments --compact --single-transaction db | pigz > backup.sql.gz - 不建议删
--no-create-info或--no-data:这会破坏完整备份语义,仅适用于特殊导出场景
mydumper 更适合大库并行压缩备份
当单表超 10GB 或总数据量超 100GB 时,mysqldump 线性导出会太慢,且无法真正并行。此时 mydumper 是更优选择——它原生支持多线程导出 + 内置 zlib 压缩。
- 安装后直接启用压缩:
mydumper -u root -p pass -B db -o /backup/ --compress - 自动按表拆分文件,每个
.sql文件独立压缩,恢复时可指定表粒度,也利于 rsync 增量同步 - 注意:
mydumper不支持视图/存储过程的原子级事务一致性(需配合--triggers --routines手动补全) - 压缩级别不可调(固定 zlib level 6),如需更高压缩率,仍建议用
mydumper导出后管道进pigz -9










