有,Navicat自动运行任务的日志分散在任务自身输出日志和主程序操作日志中,但无可视化历史面板,且日志不持久、不累积,关键变更需依赖执行前的Compare&Preview预览确认。
Navicat 自动运行任务有没有执行日志?
有,但不是传统意义上的“历史记录面板”。navicat 本身不提供可视化的同步任务执行时间线或变更明细表格,它的日志是分散的、被动记录的——主要靠两个地方:自动运行任务自身的输出日志 和 navicat 主程序的操作日志文件。
- 自动运行任务(Batch Job)每次触发后,会在其配置界面右下角显示「Last Run Status」和「Last Run Time」,点开该任务 → 右键 →
View Log,就能看到本次执行的完整控制台输出,包括连接状态、表处理进度、成功/失败行数、报错堆栈(比如ERROR: duplicate key violates unique constraint)。 - 主程序日志则藏在本地:
%AppData%\PremierSoft\Navicat Premium\logs\(Windows)或~/Library/Application Support/PremierSoft/Navicat Premium/logs/(macOS),里面是按日期命名的navicat.log和batchjob.log。注意:这些文件会在 Navicat 启动时被覆写,所以不能长期依赖。
为什么预览(Compare&Preview)比日志更重要?
因为 Navicat 的数据同步本质是「差异驱动」,真正决定变更内容的,不是事后日志,而是执行前的 Compare&Preview 结果。它才是你唯一能确认「这次到底改了哪些行、插入了几条、更新了哪几列」的地方。
- 预览界面里选中某张表,底部会并排显示源/目标对应记录,冲突字段高亮,支持逐条勾选/取消(比如跳过某条主键重复但业务上不该覆盖的记录);
- 如果你没保存 profile,下次重跑就得重新比对——而比对本身不写日志,只存在内存里;
- 常见错误:直接点
Compare&Deploy跳过预览,结果发现误删了目标库独有配置数据,却无法从日志反推“删了哪几条”。
如何手动补全变更追踪能力?
Navicat 不内置审计表或 binlog 解析,想还原“谁在什么时间同步了什么”,得靠外部配合:
- 在 PostgreSQL 目标库启用
log_statement = 'mod'或建触发器记录 DML 操作(注意性能开销); - MySQL 源库开启
general_log,或用SHOW BINLOG EVENTS定位同步窗口内的变更; - 更实际的做法:每次同步前,在目标库用 SQL 手动快照关键表的行数与校验和,例如:
SELECT 'users' AS table_name, COUNT(*) AS cnt, MD5(GROUP_CONCAT(id ORDER BY id)) AS chk FROM users;
把结果存到一张sync_audit表里,和任务名、时间戳一起记下来。
容易被忽略的关键点
- 自动运行任务依赖系统级计划服务(Windows Task Scheduler / macOS launchd),如果该服务停了,Navicat 界面里看任务状态仍是“已启用”,但实际从不执行;
-
View Log 只保留最近一次执行记录,历史任务日志不会累积——想留痕,必须自己定期导出或用脚本抓取 batchjob.log;
- 同步过程若涉及跨类型转换(如 MySQL
DATETIME → PostgreSQL TIMESTAMP WITH TIME ZONE),错误可能静默发生(比如时区偏移丢失),日志里未必报错,只能靠预览里的字段值比对发现。
View Log 只保留最近一次执行记录,历史任务日志不会累积——想留痕,必须自己定期导出或用脚本抓取 batchjob.log;DATETIME → PostgreSQL TIMESTAMP WITH TIME ZONE),错误可能静默发生(比如时区偏移丢失),日志里未必报错,只能靠预览里的字段值比对发现。事情说清了就结束。


















