navicat 16 不支持真正定时执行脚本,自动化作业仅为界面级手动触发;清理未激活用户须依赖 mysql 事件调度器或系统任务计划器,推荐启用 event_scheduler 后创建每日执行的 delete 事件。

Navicat 16 本身不支持真正意义上的定时执行脚本,所谓“自动化作业”只是界面级手动触发器,关机、退出或用户登出即失效;清理未激活用户数据必须交由数据库服务端(如 MySQL 事件)或操作系统调度器(如 Windows 任务计划程序 / macOS launchd)来完成。
MySQL 事件调度器自动删未激活用户(推荐)
这是最稳定、不依赖 Navicat 在线的方式,适合清理 users 表中长期未登录的账号。
- 先确认事件调度器已启用:
SHOW VARIABLES LIKE 'event_scheduler';,返回ON才能用 - 若为
OFF,需执行SET GLOBAL event_scheduler = ON;(要求 SUPER 权限) - 确保当前用户对
users表有DELETE权限,且事件定义者(DEFINER)账号也具备该权限 - 建事件示例(每天删 90 天未登录用户):
CREATE EVENT clean_inactive_users ON SCHEDULE EVERY 1 DAY DO DELETE FROM users WHERE last_login_time
-
NOW()按 MySQL 服务器时区计算,和 Navicat 客户端时区无关;别写成CURDATE() - 90这类易错表达式 -
last_login_time字段必须有索引,否则每日全表扫描会拖慢主业务
Windows 任务计划 + Navicat 命令行工具 ncli.exe
这是唯一能“看起来像在 Navicat 里做定时”的路径,本质是调用其命令行工具执行 SQL 脚本。
- 确认
ncli.exe路径已加入系统 PATH,或在任务中使用绝对路径(如"C:\Program Files\PremiumSoft\Navicat Premium 16\ncli.exe") - 参数必须完整:
-c "MyProdDB" -q "D:\scripts\clean_users.sql",其中"MyProdDB"是 Navicat 中连接的**显示名称**,大小写和空格都要一致 - 任务属性 → 「常规」页必须勾选「不管用户是否登录都要运行」+「使用最高权限运行」,否则静默失败
-
clean_users.sql内容应为纯 SQL,避免USE mydb;——外部调用时需显式指定库名,否则可能误删其他库同名表 - 脚本路径必须全英文、无空格(如
D:\navicat_scripts\clean_users.sql),含中文会报错
macOS 上用 launchd 自动执行重置脚本(针对试用期,非数据清理)
注意:这个方案不用于清理用户数据,而是解决 Navicat 16/17 Mac 版每 14 天试用到期的问题。如果你实际想的是“清理未激活用户”,请忽略本节;但很多用户混淆了“清理数据”和“重置软件试用”,这里明确区分。
- macOS 的试用追踪数据分散在三处:
~/Library/Preferences/com.navicat.NavicatPremium.plist(含 32 位哈希密钥)、~/Library/Application Support/PremiumSoft CyberTech/Navicat CC/Navicat Premium/(点开头哈希文件)、钥匙串中对应条目 - 项目
navicat_reset_mac提供的auto_reset_navicat.command会创建 LaunchAgent,每 13 天自动执行一次清理,日志记录在~/Library/Logs/navicat_reset.log - 它不会碰你的数据库数据,只清理本地试用指纹;数据库连接配置和密码默认保留
- 不要把试用重置脚本和数据库数据清理混用——前者改本地文件,后者改数据库表
真正容易被忽略的点是:所有定时清理逻辑都必须脱离 Navicat GUI 独立存活。哪怕你用 Navicat 写好了 DELETE FROM users WHERE...,只要没交给 MySQL 事件或系统调度器,它就只是个静态文本,不会自己跑。另外,大表清理前务必确认时间字段有索引,否则一次 DELETE 可能锁表几分钟,影响线上业务。











