Navicat 12 默认不导出触发器和存储过程,因其“转储SQL文件”功能仅支持表级操作,不读取mysql.proc或information_schema.TRIGGERS;必须使用“数据传输”功能,在“对象类型”和“高级”页中分别勾选Triggers、Procedures及对应导出选项。
navicat 12 默认不导出触发器和存储过程,这不是漏配,而是功能边界限制——它把“转储sql文件”定位为表级操作,压根不读 mysql.proc 或 information_schema.triggers。
为什么“转储SQL文件”里勾选了对象也没用
你右键数据库 → “转储SQL文件→结构和数据”,哪怕在“结构”选项卡里勾了“视图”“函数”,CREATE TRIGGER 和 CREATE PROCEDURE 依然不会出现。原因很直接:
- 该功能底层调用的是类似
mysqldump --no-create-info的逻辑,不带--triggers和--routines参数 - “包含对象”弹窗里的复选框只控制表(
TABLE)列表,对TRIGGER、PROCEDURE等非表对象完全不可见、不可控 - Navicat 12.x 对 MySQL 8.0+ 的
mysql.routines表支持不完整,即使权限够,也可能跳过扫描
必须改用“数据传输”并显式启用 routines 和 triggers
这是 Navicat 12 下唯一稳定、可验证的导出路径:
- 顶部菜单 → 工具 →
数据传输 - 源:选中目标连接和数据库;目标:选“文件”,类型设为
.sql - 点“选项” → 切到“对象类型”页 → 务必勾选
Triggers和Procedures(Functions同理) - 切到“高级”页 → 勾选
Include CREATE PROCEDURE / FUNCTION statements(部分 12.x 版本显示为Export routines) - 开始传输后,检查生成的 SQL 文件开头是否有
DELIMITER $$,以及是否含完整的CREATE TRIGGER ...块
导出后还原失败?重点查这三个权限和配置
即使导出成功,还原时仍可能报错,常见于以下三处:
- 账号缺
SELECT ON mysql.triggers(MySQL 5.7)或SELECT ON mysql.routines(8.0+),执行GRANT SELECT ON mysql.triggers TO 'user'@'%';补上 - 存储过程定义含
DEFINER = 'xxx'@'yyy',而目标库用户无SUPER权限 → 在“高级”页勾选Remove DEFINER and SQL SECURITY - MySQL 8.0+ 目标库未开启
log_bin_trust_function_creators→ 还原前手动执行SET GLOBAL log_bin_trust_function_creators = 1;
备份任务里同样要进“高级”才生效
如果你走的是「工具 → 备份」路径,别被界面迷惑——新建备份后直接点“保存”是无效的。必须:
- 点击右下角的“高级”按钮(不是“计划”里的那个)
- 勾选
导出触发器和导出存储过程和函数(注意:这两项默认是未勾选状态) - 导出完成后,用文本编辑器打开生成的
.psc文件,搜索CREATE TRIGGER确认存在;若搜不到,说明高级设置根本没生效,重做备份比调试更省时间
Navicat 12 的限制很明确:不支持在“转储SQL文件”中导出非表对象。所有试图在那个对话框里找“触发器复选框”的操作,都是在对抗设计逻辑。真正关键的开关,永远藏在“数据传输”的“对象类型”页和“高级”页里——而且必须两个都开,缺一不可。


















