phpmyadmin默认不导出function,必须在「对象创建选项」中勾选「include_routines」;若权限不足(如无select on mysql.routines)或definer不匹配,仍会导致缺失或还原失败。
phpmyadmin 默认不导出自定义函数(function),必须手动勾选「 routines」选项,否则导出的 sql 文件里 create function 语句会完全缺失。
导出时必须启用「routines」选项
phpMyAdmin 的导出界面默认只导出表结构和数据,存储过程(PROCEDURE)和函数(FUNCTION)属于「routines」范畴,需显式开启。不勾选就等于告诉 phpMyAdmin:“忽略所有 CREATE FUNCTION 和 CREATE PROCEDURE”。
- 进入数据库 → 「导出」页签 → 选择「自定义」导出方式
- 向下滚动到「对象创建选项(Object creation options)」区域
- 务必勾选
添加 CREATE FUNCTION / PROCEDURE / EVENT / TRIGGER 语句(对应配置项名是include_routines) - 如果只导出单个函数,可先在「数据库」页点击「Routines」标签,再选中该函数 → 点「导出」,此时会自动启用 routines 且限定范围
权限不足会导致 routines 导出为空或报错
即使勾选了 routines,若当前 MySQL 用户没有 SELECT 权限访问 mysql.proc 表(或 MySQL 8.0+ 的 mysql.routines 视图),phpMyAdmin 就无法读取函数定义,导出文件中不会包含 CREATE FUNCTION,甚至可能静默跳过、无提示。
- 检查权限:执行
SHOW GRANTS FOR CURRENT_USER;,确认含SELECT ON mysql.proc(MySQL 5.7 及更早)或SELECT ON mysql.routines(MySQL 8.0+) - 临时修复(有 SUPER 权限时):
GRANT SELECT ON mysql.proc TO 'your_user'@'%'; FLUSH PRIVILEGES; - 部分托管环境(如 cPanel 共享主机)禁用
mysql库访问,此时 phpMyAdmin 根本无法导出 routines —— 需改用命令行mysqldump --routines
导出的 FUNCTION 语句可能因 definer 失败
导出的 CREATE FUNCTION 默认带 DEFINER=`user`@`host`,还原时若目标库不存在该用户,或用户无 EXECUTE 权限,会报错 ERROR 1449: The user specified as a definer does not exist。
- 导出前,在 phpMyAdmin「导出」页的「格式特定选项」中,勾选
忽略 DEFINER 和 SQL SECURITY(对应skip_definer) - 或者导出后手动替换:把所有
DEFINER=`xxx`@`yyy`替成DEFINER=CURRENT_USER或直接删掉整段(MySQL 5.7+ 允许省略) - 还原前确保目标用户有
CREATE ROUTINE权限:GRANT CREATE ROUTINE ON `db_name`.* TO 'user'@'host';
真正容易被忽略的是权限链:能登录 phpMyAdmin ≠ 能读 mysql.proc;勾选了 routines ≠ 实际导出了内容;导出成功 ≠ 还原成功 —— DEFINER 和权限缺一不可。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











