navicat没有自动同步功能,所有结构变更必须手动触发「结构同步」向导,仅在点击「比对」和「部署」时才快照式拉取元数据、生成并执行ddl,不监听、不轮询、不订阅任何数据库变更事件。

Navicat 修改表选项后没有自动同步结构,是因为它根本就没有“自动同步”这个功能——所有结构变更都必须手动触发「结构同步」向导,且仅在你明确点击「比对」和「部署」时才生成并执行 DDL。
Navicat 不监听表结构变更,只做一次性比对
- 你在源库用
ALTER TABLE改了字段、加了索引,或在 Navicat「设计表」里点保存,这些操作只作用于当前连接的数据库,不会广播、不写日志、不触发任何后台任务 - Navicat 的「结构同步」不是数据库变更监听器,它不轮询
INFORMATION_SCHEMA,也不订阅 binlog 或 DDL event;它只是在你打开向导那一刻,对两个库快照式拉取元数据并比对 - 常见误解:以为「设计表 → 保存」会把改动推到目标库 —— 实际上那只是一次本地 DDL 执行,仅影响当前选中的库
图形界面修改 ≠ 同步已启用
- 在「设计表」中拖动列顺序、改主键字段顺序、调
COMMENT、切COLLATE,这些操作可能根本不生成有效 DDL(比如复合主键顺序拖拽完全无效) - 即使生成了语句,也只发给当前连接的目标库,不会记录变更历史,更不会带入后续的结构同步流程
- 某些版本的「设计表」保存逻辑还受连接参数影响:
autocommit=0时,点保存可能只是缓存,没真正提交,导致你以为改了,其实没生效
同步前必须人工确认三件事,否则“改了也白改”
-
MySQL版本兼容性:比如源库用了JSON字段,目标库是5.6,同步脚本直接报错,但界面不会提前预警 - 目标库用户权限缺失:只给了
SELECT和INSERT,ALTER被拒绝,但 Navicat 可能卡在「正在部署」而不报具体错误 - 目标库存在同名但手动改过的表:Navicat 默认按差异覆盖,不会跳过,也不会提示“该表上周被 DBA 加了唯一索引”,结果就是你的新索引被删、旧字段被还原
最常被忽略的一点是:结构同步不是“同步动作”,而是“生成+执行 DDL 脚本”的两阶段过程。你改完源库、打开同步向导、点比对、勾选变更、点运行——这整套动作缺一不可。少点一次,就等于什么都没发生。











