Navicat默认备份不导出存储过程、触发器等对象,必须在高级设置中手动勾选“导出存储过程和函数”“导出触发器”“导出事件”“导出视图”,并确保备份账号具备SELECT、SHOW VIEW、EXECUTE权限,否则还原时将静默丢失这些对象。
Navicat 备份任务默认不导出存储过程和触发器
直接点「备份」→「保存」生成的 .psc 文件,只含表结构和数据,不会自动包含存储过程、函数、触发器、事件。哪怕数据库里明明有 create procedure 或 create trigger,还原时也会丢失——这是最常被忽略的“静默遗漏”。
必须在「高级」选项卡里手动勾选
新建备份任务后,不要直接点保存。点击右下角的 高级 按钮(不是「计划」或「设置任务计划」里的那个),进入高级设置页:
- 勾选
导出存储过程和函数(对应 MySQL 的ROUTINE权限) - 勾选
导出触发器(否则CREATE TRIGGER语句不会出现在导出 SQL 中) - 如果用了事件调度器(
EVENT),还得额外勾选导出事件 - 确认
导出视图也已勾选(虽然它常被误认为“默认开启”,实际不是)
勾选后仍还原失败?检查用户权限是否匹配
即使勾了「导出存储过程」,还原时也可能报错 ERROR 1418 (HY000): This function has none of DETERMINISTIC... 或 Access denied for routine:
- 备份用的账号必须有
SELECT+SHOW VIEW+EXECUTE权限,缺一不可 - MySQL 5.7+ 默认要求函数/存储过程声明
DETERMINISTIC或NO SQL,否则拒绝创建;可在备份 SQL 文件开头手动加SET log_bin_trust_function_creators = 1;再执行 - 触发器还原失败常见于目标库开启了
sql_log_bin=OFF(比如从库),需临时设为ON
验证导出内容是否完整
别只信 Navicat 界面提示。导出完成后,用文本编辑器打开生成的 .psc 文件(或先「提取 SQL」成 .sql),搜索关键词确认:
-
CREATE PROCEDURE—— 至少出现一次 CREATE FUNCTIONCREATE TRIGGER-
DELIMITER $$—— 表明多语句块已正确包裹
如果搜不到,说明高级选项没生效,或备份时连接用的是低权限账号——这时候重做备份比调试更省时间。











