Navicat默认不导出视图、存储过程和函数,必须在备份对话框右下角点击“高级”按钮,勾选“导出视图”“导出存储过程和函数”等选项,并确保账号具备SHOW VIEW、EXECUTE等权限,否则生成的.psc文件仅含表结构和数据。
Navicat默认不导出视图和存储过程,必须手动勾选
右键数据库 → backup database → 弹窗里直接点「开始」或「保存」,生成的 .psc 文件**只含表结构和数据**,view、procedure、function 这些对象根本不会出现。这不是 bug,是 navicat 的默认行为——它把“完整备份”拆成了多个开关,你得一个个打开。
关键动作在「高级」选项卡里,不是「对象选择」页里的复选框(那里根本没有「视图」「存储过程」选项):
- 点击备份对话框右下角的
高级按钮(注意:不是「计划」按钮,也不是「设置任务计划」里的那个) - 勾选
导出视图—— 否则CREATE VIEW语句不会写入 SQL - 勾选
导出存储过程和函数—— 对应 MySQL 的ROUTINE权限,缺它就导不出CREATE PROCEDURE - 如果数据库里用了
EVENT,还得额外勾选导出事件
导出后文件里真有吗?别信弹窗,直接搜 DELIMITER
Navicat 界面显示「备份成功」不代表内容完整。很多用户还原时才发现触发器没执行、函数报错,结果发现导出的 SQL 根本没包含 DELIMITER $$ 和 CREATE PROCEDURE 块。
验证方法很简单:用记事本或 VS Code 打开生成的 .psc 文件(或先右键 → 提取 SQL 得到 .sql),搜索以下关键词:
-
DELIMITER $$—— 多语句块的起始标记,没有它说明存储过程/函数没导出 -
CREATE VIEW—— 至少出现一次,确认视图被包含 -
CREATE TRIGGER或CREATE PROCEDURE—— 至少各有一处匹配
如果搜不到,基本可以断定:要么高级选项没生效,要么备份时用的是低权限账号(比如只给了 SELECT,没给 SHOW VIEW 或 EXECUTE)——这时候重做备份比调试更省时间。
还原时报 ERROR 1418 或跳过存储过程?权限和 MySQL 版本限制在作怪
即使导出文件里有 CREATE PROCEDURE,还原时也可能静默失败或报错,常见原因有三个:
- 备份账号缺少
EXECUTE权限:导出需要读取information_schema.ROUTINES,还原需要执行创建语句,SELECT + SHOW VIEW + EXECUTE缺一不可 - MySQL 5.7+ 默认校验函数/过程的确定性声明:若原过程没加
DETERMINISTIC、NO SQL或READS SQL DATA,还原会直接拒绝;可在 SQL 文件开头手动插入SET log_bin_trust_function_creators = 1; - 目标库是只读从库且
sql_log_bin = OFF:触发器和过程还原会被跳过,需临时设为ON再执行
别用「转储 SQL 文件」功能来导出视图和存储过程
右键数据库 → 转储 SQL 文件 → 选「结构和数据」,出来的文件永远不含 CREATE PROCEDURE 或 CREATE VIEW。这不是配置问题,是功能定位决定的:它底层调用类似 mysqldump --no-create-info,根本不查 information_schema.ROUTINES 或 mysql.triggers 表。
这个功能只扫描 TABLE 类对象,对视图、过程、函数、事件全部无视。哪怕你在「对象」页里勾了「包含所有对象」,也不会出现这些选项——因为它们压根不在该功能的勾选列表里。
真正能导出完整对象的路径只有一条:工具 → 数据传输,源选数据库,目标选「SQL 文件」,在「对象类型」里展开并勾选 Views、Functions、Procedures,再进「高级」启用 Export routines。











