预设对象过滤规则比手动取消勾选更可靠,支持通配符/正则排除系统库及日志表(如mysql.*、%.%_log),需注意完整对象名匹配、版本差异及同步设置中的隐式开关,默认开启的“同步不存在的对象”最易导致误同步。
比对前在“对象过滤”里预设排除规则更可靠
手动取消勾选容易漏、不可复用,且下次比对又要重来。navicat 的 对象过滤 功能支持通配符和正则(取决于版本),能一次性屏蔽 mysql、information_schema、performance_schema 等系统库,以及 %_log、%_history、binlog% 这类日志表名模式。
操作路径:比对窗口 → 左下角 选项 → 切换到 对象过滤 标签页 → 在“排除对象”区域点击 添加 → 输入模式如:mysql.*、%.%_log(注意点号是字面量,星号才代表通配)。
注意事项:
- 不同 Navicat 版本对正则支持不同:15+ 支持
regex:前缀,旧版仅支持简单通配符 - 模式匹配的是“完整对象名”,即
数据库名.表名,所以%_log不生效,得写成%.%_log - 如果勾选了“同步视图/存储过程”,记得一并排除
sys.库下的内置视图
手动取消勾选时,哪些表名最容易被忽略
比对界面左侧“源”和右侧“目标”的对象列表展开后,常被漏掉的不是系统库本身,而是用户库里的伪装日志表——它们名字不带 log/history,但实际承担日志功能,比如:user_operation_record、audit_trail、sync_log_detail。
这类表往往数据量大、更新频繁,同步时极易拖慢整个流程,甚至因主键缺失或结构差异直接失败。建议提前整理一份业务侧“禁止同步表清单”,在比对前用 Ctrl+F 搜索关键词快速定位:
-
log、record、trace、audit、temp、tmp - 带时间戳后缀的:如
_202406、_bak、_old - 表名全大写或含双下划线(如
__migrations)的元数据表
取消勾选后仍同步?检查“同步设置”里的隐式开关
即使手动取消了某张表的勾选,如果在 同步设置 里启用了 同步表结构 或 同步索引,而该表在目标库不存在,Navicat 可能自动重建它——相当于又把表拉过去了。
正确做法:
- 确认已关闭
同步不存在的对象(这个选项默认开启,危害最大) - 若只需同步部分字段,别只取消整表勾选,改用
字段映射功能精细控制 - 对已取消勾选但仍在执行日志里出现的表,右键该行 →
查看同步语句,确认是否真没生成 DML
自动化场景下必须放弃手动勾选
如果你用 Navicat CLI(navicat.exe --sync)或定时任务跑比对,根本没法手动点。此时唯一可行方案是导出当前比对配置为 .ncx 文件,用文本编辑器修改其中的 <ExcludedObjects> 节点,填入 XML 格式的排除规则,再通过命令行加载该配置。
这个节点内容长这样:
<ExcludedObjects> <Object>mysql.*</Object> <Object>test.%_log</Object> </ExcludedObjects>
注意:.ncx 是二进制格式,不能直接编辑;必须先在 GUI 中配好过滤规则 → 导出配置 → 才能得到可编辑的 XML 片段。
真正麻烦的不是怎么写规则,而是每次数据库新增一个 xxx_audit 表,就得人工更新一次配置——这种维护成本,早该交给数据库自身的 information_schema.TABLES 查询 + 脚本生成来解决。


















