navicat 15 无原生定时功能,真稳定同步需系统级调度+命令行:仅 premium 15+ 支持 navicat.exe/-runjob 调用 .ncx 任务;必须勾选任务计划中“不管用户是否登录都要运行”和“使用最高权限运行”,并统一字符集为 utf8mb4、慎选同步模式。
navicat 15 本身没有后台服务,所谓“定时”只是客户端前台运行时的轮询检查——关掉窗口、切到其他应用、锁屏或休眠,任务就停了。真要每天稳定同步 sql server 到 mariadb,必须绕过「自动运行」界面,用系统级调度 + 命令行工具。
确认 Navicat Premium 15+ 是否带命令行工具
只有 Navicat Premium 或 Navicat for SQL Server / Navicat for MariaDB 15 及以上版本才附带 navicat.exe(Windows)或 navicat(macOS/Linux)。低版本或试用版可能缺失该文件。检查路径:
- Windows:
C:\Program Files\PremiumSoft\Navicat Premium 15\navicat.exe - macOS:
/Applications/Navicat Premium.app/Contents/MacOS/navicat - Linux:
~/navicat/navicat(安装目录下)
若找不到,重装 Premium 15+ 并勾选「安装命令行工具」选项(安装向导里有小字提示)。
导出同步任务为 .ncx 文件并验证可执行性
图形界面里配置一次完整的 SQL Server → MariaDB 同步(注意:必须先做结构同步,否则字段类型不匹配会静默失败),然后右键该同步任务 →「导出任务」→ 保存为 sync_sqlserver_to_mariadb.ncx。别跳过这步直接用「自动运行」建计划——那只是 UI 层封装,不可靠。
导出后立刻手动测试命令行能否跑通:
- Windows:
navicat.exe -runjob "C:\path\to\sync_sqlserver_to_mariadb.ncx" - macOS/Linux:
./navicat -runjob "/path/to/sync_sqlserver_to_mariadb.ncx"
成功标志是控制台输出 Job completed successfully,且 MariaDB 目标表数据更新。失败常见原因:Failed to load job: Permission denied(权限不足)、Connection refused(SQL Server 或 MariaDB 连接参数错,尤其是端口或白名单)、中文乱码(字符集未统一设为 utf8mb4)。
Windows 任务计划程序必须启用的两个关键选项
用「任务计划程序」新建基本任务,操作设置为上述 navicat.exe -runjob ... 命令后,双击任务 →「属性」→ 必须勾选:
-
不管用户是否登录都要运行(否则锁屏后失效) -
使用最高权限运行(否则无法读取密钥库或访问网络驱动器)
如果这两项灰显,说明当前登录账户不是管理员组成员——不能靠「以管理员身份运行」临时解决,必须切换为 Administrator 或加入 Administrators 组的账户登录系统再配置。另外,触发器里建议勾选「如果任务失败,每隔 X 分钟重试 Y 次」,避免单次网络抖动导致整日同步中断。
同步模式选错会导致数据被覆盖或漏同步
SQL Server 和 MariaDB 字段类型、默认值、空值处理逻辑不同,Navicat 默认的「结构 + 数据」全比对极易出问题。实操中应按场景选模式:
- 仅追加新订单/日志类数据 → 选「仅主键匹配」+ 勾选「插入记录」,禁用「更新记录」和「删除记录」
- 需双向修正但无冲突风险 → 先在两张表加同名
updated_at字段,SQL Server 用GETDATE(),MariaDB 用NOW(),同步时选「时间戳字段」模式 - 绝对避免「逐行比较」:SQL Server 的
datetime和 MariaDB 的datetime微秒精度不一致,哈希比对必失败,10 万行以上还会卡死
跨库同步最易忽略的是 SQL 模式:SQL Server 默认允许空字符串插入非空字段,MariaDB 开启 STRICT_TRANS_TABLES 会直接报错中断。务必在两个连接的「高级」设置里把 SQL Mode 清空或设为兼容值,并确认 Character set 都是 utf8mb4。
真正稳定的定时同步,从来不是靠 Navicat 界面点几下完成的。它本质是个命令行工具包装器,系统调度才是骨架。一旦依赖「自动运行」界面,等于把生产任务挂在前台进程上——电脑重启、用户登出、远程桌面断连,都会让同步无声失效。那些显示「成功」却没数据的案例,90% 出在权限或字符集没对齐,而不是同步逻辑本身。











