Navicat 15结构同步前必须确保连接成功,关键在于配置云数据库白名单、使用公网地址、核对端口、启用SSL及授权账号Host为'%',否则无法进入同步向导。
navicat 15 的「结构同步」功能本身不解决连接问题——它只在连接成功后起作用。绝大多数人卡在第一步:根本连不上云库,就点不开「结构同步」向导。
Navicat 15 连不上云数据库:白名单和公网地址是硬门槛
云数据库(无论 MySQL 还是 PostgreSQL)默认关闭所有外网访问。你填对了 host、port、username、password,只要没配白名单,Navicat 就会卡在「Connecting…」或直接报 Connection refused / timeout。
- 去云控制台(阿里云 RDS、腾讯云 CDB、AWS RDS 等)找到实例 → 「白名单设置」或「安全组规则」→ 添加你的本地公网 IP(不是内网 IP;不确定?浏览器搜 “what is my ip”)
- 确认你用的是「公网连接地址」:比如阿里云是
xxx.mysql.rds.aliyuncs.com,不是控制台里标着「内网」的地址;PostgreSQL 同理,别粘贴pg-xxx.pg.rds.aliyuncs.com以外的域名 - 端口别想当然:MySQL 不一定是
3306,PostgreSQL 不一定是5432,必须以控制台「基本信息」页写的「端口」字段为准 - 动态 IP 用户注意:家庭宽带公网 IP 可能变化,白名单需定期更新;企业 NAT 出口建议加 CIDR 段(如
203.208.60.0/24),但切勿长期开0.0.0.0/0
SSL 设置错误:连上又断,其实是被服务器主动拒绝
尤其新购的云 MySQL 8.0+ 或 PostgreSQL 实例,基本强制 SSL。Navicat 默认 SSL Mode = Disable,会导致认证通过后立即断开,日志里出现 no pg_hba.conf entry(PG)或 SSL connection error(MySQL)——这不是 Navicat 故障,是服务端策略拦截。
- MySQL:在 Navicat 新建连接 → 「SSL」选项卡 → 勾选
Use SSL;CA File 通常留空即可(云厂商用系统信任链);个别平台(如 AWS RDS)需下载并指定rds-ca-2019.pem - PostgreSQL:同样勾选
Use SSL,Mode 选Require或Verify-CA;若提示证书验证失败,先试Require - 账号 Host 限制常被忽略:云 MySQL 创建的账号默认
Host = 'localhost',只允许本机登录。必须用 DMS 或命令行执行CREATE USER 'your_user'@'%' IDENTIFIED BY 'xxx'; GRANT ALL ON *.* TO 'your_user'@'%'; FLUSH PRIVILEGES;
Navicat 15 结构同步操作要点:比对前先确认权限与对象范围
「工具」→「结构同步」能可视化比对两个库的表、视图、索引等 DDL 差异,但它不会自动处理权限、存储过程、触发器、事件——这些默认被排除,除非你手动勾选。
- 启动前务必备份:结构变更可能丢数据,用 Navicat 自带「备份」功能导出目标库全量结构(
Backup Database),别依赖「仅结构」选项就心安 - 源库和目标库必须使用相同字符集(如都为
utf8mb4),否则比对结果中大量字段类型会被误判为不一致 - Navicat 默认忽略注释、排序规则(collation)、自增起始值等细节,若业务强依赖这些,得手动检查生成的部署脚本,不能全信「运行」按钮
- 跨版本同步要小心:比如从云 MySQL 5.7 同步到本地 MySQL 8.0,
datetime默认值语法不兼容,脚本会报错;建议先导出源库 DDL,人工过一遍再导入
为什么不用 mysqldump --no-data?什么场景下它更可靠
Navicat 结构同步适合小范围增量调整(比如加一个字段、改个索引),但首次全量对齐或跨大版本迁移时,mysqldump --no-data 更可控、更透明。
-
mysqldump -h your-rds-endpoint -u user -p --no-data --skip-triggers --skip-routines --skip-events your_db > schema.sql:避免因权限不足导致导出中断 - 导出后先用文本编辑器扫一眼:检查是否有云厂商私有语法(如阿里云 RDS 的
/*T![auto_increment]*/注释)、不兼容的关键字(如JSON类型在老版本不支持) - 本地导入前,把
CREATE DATABASE和USE语句删掉,避免覆盖已有库;用mysql -u root -p your_local_db < schema.sql导入 - Navicat 同步无法处理「同名不同结构」的表(比如云库有
id BIGINT,本地是id INT),而mysqldump导出的是完整 DDL,你能一眼看到冲突点
真正麻烦的从来不是「怎么点按钮」,而是连接通路是否稳定、SSL 是否匹配、账号权限是否足够、字符集是否一致——这些底层配置漏一项,结构同步向导连界面都打不开。


















