因为跳过了磁盘写入/读取的两次i/o,mysqldump输出直接通过管道传入gzip,数据全程在内存中流动不落地,避免生成大中间文件,显著节省空间与时间,尤其对大库至关重要。

为什么 mysqldump | gzip 比先 dump 再压缩快?
因为跳过了磁盘写入/读取的两次 I/O。mysqldump 输出是标准输出(stdout),直接喂给 gzip,数据全程在内存管道中流动,不落地成几百 MB 的中间 .sql 文件。这对几十 GB 的库尤其关键——省下的不仅是空间,更是时间。
常见错误现象:脚本里先执行 mysqldump > backup.sql,再跑 gzip backup.sql,结果磁盘被打满、备份卡住、甚至因空间不足失败。
- 务必用管道串联,不是分两步
-
gzip默认只用单核,大库时 CPU 成瓶颈 - 若服务器有 4+ 核,优先换
pigz(并行 gzip),命令完全兼容:mysqldump ... | pigz > backup.sql.gz
怎样用 zstd 替代 gzip 获得更高性价比?
zstd 在压缩率和速度之间更均衡,尤其适合备份场景:比 gzip -9 快 2–3 倍,体积只略大 5%–10%,且支持多线程自动适配 CPU 核数。
实操建议:
- 安装:
apt install zstd(Debian/Ubuntu)或yum install zstd(RHEL/CentOS) - 基础命令:
mysqldump -u user -p db | zstd -T0 -12 > backup.sql.zst -
-T0表示自动用满所有逻辑核,-12是推荐的高压缩档位(-19 最高但太慢) - 还原时用:
zstd -cd backup.sql.zst | mysql -u user -p db
注意:zstd 不是系统默认自带,生产脚本开头应加 command -v zstd >/dev/null || { echo "zstd not found"; exit 1; } 防止解压失败。
PyCharm 2026.2.0.1 Linux版提供 JetBrains 官方 2026.2.0.1 版本安装包,适合需要指定 PyCharm 版本进行 Python 项目开发、运行和调试的用户。
如何实时监控 mysqldump 管道进度?
纯 mysqldump | gzip 没有进度反馈,导出上百 GB 时容易误判“卡死”。pv(pipe viewer)能实时显示速率、已处理量和预估剩余时间,且几乎不增加延迟。
使用前提:
- 先装
pv:apt install pv或yum install pv - 命令加
pv即可:mysqldump -u user -p db | pv | gzip > backup.sql.gz - 如果
pv显示 “No size specified”,别加-s硬指定大小——mysqldump输出长度不可预知;直接看 KB/s 或 MB/s 数值是否稳定更可靠
哪些 mysqldump 参数能从源头减小压缩前体积?
压缩工具再快,也救不了本身膨胀严重的 SQL 流。提前精简输出,比后期高压缩更省资源。
推荐组合:
-
--skip-comments:去掉版本注释、时间戳等无用文本,省 5%–15% -
--skip-triggers --skip-routines --skip-events:若只做数据恢复,这些逻辑对象可后续单独导出 -
--ignore-table=db.table_log:排除日志表、统计临时表等非核心数据 -
--where='created_at >= "2026-01-01"':按条件导出,避免全表扫描(确保字段有索引!) - 不要用
--skip-extended-insert:它会让每行一个 INSERT,文件反而更大
最容易被忽略的是 --single-transaction 和 --quick 的配合——前者保证 InnoDB 一致性快照,后者逐行读取防内存溢出,两者一起用才真正兼顾安全与效率。










