在进行一个数据迁移时,同一服务不同库之间的数据迁移。因为只需要迁移部分满足条件的数据,所以需要带查询条件。
写了大致如下结构的SQL:
insert into “表A” select * from “数据库名”.“表A” where id in ('1','2','3');
结果报错:
[Err] 1449 - The user specified as a definer ('root'@'localhost') does not exist
网上搜寻都说是权限问题,我ROOT账号本来就是所有权限了,暴躁了好一会。 突然发现我的root账号是root@%,为啥会提示root@localhost。
检查了一遍后,发现在目标数据库中表A上有触发器,触发器中调用了存储过程,然后存储过程中定义者为root@localhost。
改成 root@%,重新执行正确。
这个问题肯定是权限的问题。一定要仔细检查权限是否授权:
- grant all privileges
- 检查存储过程或者函数的定义者
- 检查视图的定义者
来源:oschina
链接:https://my.oschina.net/linx/blog/3215504