Navicat本身不备份SSL连接,SSL仅保障连接通信加密;备份时需先确保SSL连接成功建立——关键验证ssl=on、pg_hba.conf认证方式匹配(如scram-sha-256)、SSL证书链完整(verify-full需填CA公钥而非server.crt),路径用正斜杠且不含波浪号。
Navicat 本身不参与 SSL 加密传输的“备份动作”,它只是数据库客户端;**SSL 是连接建立时的加密通道,和备份文件是否加密无关**。你真正要做的,不是“备份 SSL 连接”,而是:**在已启用 SSL 的连接上,执行常规备份操作**——只要连接本身走的是 SSL,那备份过程中的所有通信(如 SHOW CREATE TABLE、SELECT 元数据等)自然就加密了。
但很多人卡在第一步:连都连不上,还谈什么备份。下面直击关键点。
Navicat 连接 PostgreSQL 时填 SSL CA File 却报 certificate validation failed
这不是 navicat 的 bug,而是证书链没对上。verify-full 模式下,navicat 必须拿到服务端证书的签发者(ca)公钥,而不是服务端自己的 server.crt。
- 用
openssl x509 -in root.crt -text -noout | grep -E "(CN|Subject)"确认你填的SSL Root Certificate文件确实是那个自签名 CA 或中间 CA 的公钥 - 路径必须用正斜杠:
C:/certs/root.crt✅,C:\certs\root.crt❌,~/certs/root.crt❌(Navicat 不展开波浪号) - 如果服务端用的是自签名证书,
pg_hba.conf里对应用户的认证方式不能是trust或md5,得是cert或至少scram-sha-256+sslmode=require
MySQL 连接里只填了 SSL CA File,但 Navicat 备份时仍提示“SSL is not enabled”
说明连接看似成功,实则降级到了非 SSL 模式。MySQL 服务端配置不完整时会静默回退。
- 先在 MySQL 里执行:
SELECT Ssl_cipher FROM performance_schema.threads WHERE PROCESSLIST_USER = 'your_user' AND TYPE = 'FOREGROUND';,结果为空 = 没走 SSL - 检查服务端是否真启用了 SSL:
SHOW VARIABLES LIKE 'have_ssl';必须返回YES,且SHOW STATUS LIKE 'Ssl%';中Ssl_version非空 - Navicat 的 SSL 设置页中,
SSL Cipher字段留空即可;填了错误值(如AES256-SHA)反而会导致握手失败,连都连不上
备份大库时 Navicat 卡住或生成 0KB 文件,和 SSL 有关吗?
完全无关。SSL 只影响连接建立和元数据拉取阶段的通信安全,不影响备份主体逻辑(即导出 SQL 或调用 mysqldump / pg_dump)。卡住是超时或资源限制问题。
- 超过 500MB 的库,GUI 备份容易因默认连接超时中断;Windows 下可编辑
mysql.ini,Linux/macOS 下改mysql.cnf,在[client]段加:connect_timeout=300、max_allowed_packet=512M - 备份路径含中文或空格,会导致后台进程无法写入,生成空文件;优先用纯英文路径,如
D:/backup/prod_20260421.sql - Navicat 的
.nb3备份格式是私有压缩包,不透明;如需可审计、可脚本化、可跨平台还原,直接用命令行导出 SQL:mysqldump -u user -p --ssl-mode=REQUIRED db_name > backup.sql
SQLite 连接界面里找不到 SSL 设置项,是不是 Navicat 版本太低?
不是版本问题,是设计如此。SQLite 根本没有网络传输层,SSL 对它毫无意义。
- Navicat 中 SQLite 连接的 SSL 区域永远是灰色禁用状态
- 所谓“加密数据库”(如 SQLCipher)是文件级 AES 加密,靠密码打开
secure.db,和 TLS/SSL 完全不同维度 - 如果你真需要远程访问 SQLite 并加密传输,该换架构:用 HTTP API 封装查询,再用 Nginx 做 TLS 终止,而不是硬套 Navicat 的 SSL 配置逻辑
ssl=on 和 pg_hba.conf 或 my.cnf 的实际生效状态。


















