mysqldump本身不提供压缩等级参数,压缩由管道后接的gzip、zstd或xz等工具控制;常见错误是混淆--compress协议压缩与文件压缩,实际备份体积取决于后续压缩命令参数。

MySQL 8.4 LTS 自身不提供原生压缩备份功能,mysqldump 输出的是纯文本 SQL 文件,必须靠外部工具或参数组合实现压缩 —— 直接管道压缩是最轻量、最可控的方式。
用 mysqldump + gzip 实现即时压缩备份
这是开发和中小生产环境最常用、最可靠的方案,避免生成中间大文件,节省磁盘空间且可并行处理。
-
mysqldump默认不压缩,但支持 stdout 输出,可直接通过管道交给gzip或zstd - Windows 用户需安装
gzip(如 Git for Windows 自带)或改用7z;Linux/macOS 原生支持 - 务必加
--single-transaction(InnoDB 表)或--lock-tables(MyISAM),否则压缩包里可能含不一致数据 - 示例命令:
mysqldump -u root -p --single-transaction --routines --triggers mydb | gzip > mydb_$(date +%Y%m%d).sql.gz
mysqldump 的压缩相关参数实际无效
很多人误以为 --compress 能压缩输出文件,其实它只启用客户端/服务器之间的网络压缩(类似 TCP 层 zlib),对生成的 SQL 文件内容无影响。
-
--compress仅在远程备份时减少传输流量,本地备份完全无作用 -
--set-gtid-purged=ON和--source-data=2不影响压缩,但影响恢复时的 binlog 定位能力,建议保留 - 若用
--tab导出为文本(非 SQL),配合--fields-terminated-by等参数,再用gzip压缩效果更好,但恢复需LOAD DATA,兼容性弱
大库备份必须避开的压缩陷阱
单靠 gzip 对超 10GB 的 dump 文件效率低、内存占用高,容易因 OOM 或中断导致备份损坏。
- 不要先生成未压缩 SQL 再
gzip:磁盘爆满风险极高,且多一次 I/O - 避免用
zip替代gzip:Windows 上zip命令默认不流式处理,无法管道输入 - 别依赖
mysqldump --result-file+ 外部压缩脚本:缺少原子性,失败时残留临时文件 - 真正需要高压缩比(如归档)时,改用
zstd -T0(多线程)或pixz(并行 xz),比gzip快 3–5 倍且压缩率更高
最后提醒:压缩只是手段,不是备份策略。无论用什么压缩方式,都要验证解压后能否成功导入(zcat file.sql.gz | mysql -u root -p mydb),并且确保 datadir 所在磁盘有足够剩余空间 —— 很多人卡在这一步,不是压缩失败,是解压时磁盘写满。











