旧库导出的 SQL 放到新服务器上执行 前面几千行插入都正常 到最后几个视图报 The user specified as a definer does not exist 错误 整个导入卡住。碰到这种情况,我一般先确认改动有没有真的生效。

原因不复杂,视图和存储过程带着 DEFINER 指向旧账号 新服务器上没有这个用户 MySQL 创建对象时要校验定义者 直接拒绝执行 整段语句回滚 表也白导了。

「DEFINER 报错」这个问题文档写得含糊,实际行为以当前版本为准,别照旧版本的结论套。别只看报错的最后一行,往上看几行,真正的起因通常在上面。

grep -n 'DEFINER=' old.sql | head
sed -i 's/DEFINER=[^ ]*//g' old.sql
mysql -uroot -p newdb < old.sql

同类问题如果隔一段时间又出现,多半是某个定时任务或重启流程把改动冲掉了。

具体做法是,用 mysqldump 导出时先跳过视图 只把表和数据完整导出来;已经导出的文件把 DEFINER 段批量替换成当前账号或去掉;确实要保留视图的 先在新库建好同名账号再导入。

最后用这个标准收尾,导入到最后不再报 definer 不存在 建好的视图在库里都能正常查询 逐张可用。

作者 9823189