Navicat内置备份不提供压缩等级选项,其调用数据库原生命令且不暴露压缩参数;统一高压缩需改用定时任务执行自定义命令行脚本。
Navicat 备份时根本没提供压缩等级选项
navicat 的「备份数据库」功能(backup database)界面里,无论 mysql、postgresql 还是 sql server,都**不暴露任何压缩级别滑块或下拉菜单**。所谓“独家压缩等级调整”,其实是误传——它底层调用的是数据库原生命令(如 mysqldump + gzip),而 navicat 自己不做压缩控制。
真正能调压缩等级的,只有你手动配置的「计划任务」中自定义的命令行备份,或者导出为 SQL 文件后用外部工具再压缩。
多台数据库统一压缩:得绕过 Navicat 图形界面
如果你管理多台 MySQL 实例,想让所有备份文件统一用 gzip -9(最高压缩)或 zstd -19(更快更省空间),必须放弃「右键 → 备份数据库」这种操作。正确路径是:
- 停用 Navicat 内置备份,改用「工具 → 定时任务 → 新建任务 → 类型选“外部脚本”」
- 脚本内容写成类似:
mysqldump -h{host} -u{user} -p{pass} {db_name} | gzip -9 > /backup/{db_name}_$(date +\%F).sql.gz - 把
{host}、{user}等替换成实际值,或用 Navicat 变量($HOST$、$USER$) - 注意:
gzip -9压缩慢但体积小;gzip -1快但大 30%~50%,对磁盘 IO 高的服务器要权衡
SQL Server 和 PostgreSQL 在 Navicat 里更没得选
Navicat 对 SQL Server 调用的是 sqlcmd,默认不压缩;PostgreSQL 调用 pg_dump,虽然它原生支持 -Z 参数(如 -Z 9),但 Navicat **从不透出这个参数入口**。你看到的「导出为备份文件」(.ndb)只是 Navicat 自有格式,不可控、不可移植、也无法调压缩。
可行做法只有两个:
- 用「导出向导」→「导出为 SQL 文件」→ 关闭「自动压缩」选项 → 得到纯 .sql,再用脚本统一压缩
- 直接在服务器上跑原生命令(如
pg_dump -h $HOST$ -U $USER$ mydb | zstd -T0 -19 > backup.zst),Navicat 仅作执行器
容易被忽略的坑:时间戳、权限、跨平台解压失败
很多人以为压缩完就万事大吉,结果恢复时报错:gzip: stdin: not in gzip format 或 Windows 上双击打不开 .gz 文件。问题往往出在:
- 脚本里用了
date命令但没加转义,导致文件名含空格或冒号(2024-06-15 14:30:22.sql.gz),后续脚本解析失败 - Navicat 运行定时任务时用的是当前登录用户权限,若备份路径在
/backup,而该用户无写入权,压缩会静默失败(日志里只显示“任务完成”,实际没生成文件) - 用
zstd压缩的文件,在旧版 Navicat 或没装 zstd 的机器上完全无法识别——别为了省 10% 空间引入恢复链断裂风险
最稳的底线是:统一用 gzip -6(平衡速度与压缩率),文件名强制用 $(date +\%Y\%m\%d_\%H\%M) 格式,路径确保可写且有磁盘余量。










