遭遇MySQL的 Error Code: 1449问题
问题描述:
1、MySQL数据库迁移,用MySQL Workbench,做数据导出。
2、导入到另外一个MySQL服务器上,表查询都正常,程序调用存储过程时出现问题,报1449错。
call mysql.loop_seek('c') Error Code: 1449. The user specified as a definer ('skip-grants user'@'skip-grants host') does not exist 0.000 sec
3、用MySQL Workbench 查看相关表,存储过程都正常,编译也正常。错误号是用户权限的问题;
4、看用户表发现:
5、检查导出的sql文件
默认指定了这个用户skip-grants user
@skip-grants host
CREATE DEFINER=`skip-grants user`@`skip-grants host` PROCEDURE
6、按网上说的重新强制授权:
mysql> grant all privileges on *.* to 'skip-grants user'@'skip-grants host' identified by ".";
ERROR 1819 (HY000): Your password does not satisfy the current policy requirements
mysql> grant all privileges on *.* to 'skip-grants user'@'skip-grants host' identified by "qwe1234";
ERROR 1819 (HY000): Your password does not satisfy the current policy requirements
mysql> grant all privileges on *.* to 'skip-grants user'@'skip-grants host' identified by "Qwed1234#";
Query OK, 0 rows affected, 1 warning (0.00 sec)
mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)
密码策略默认比较严格,大小写和特殊字符,才能通过。
但是想到是一个莫名其妙的用户,和程序中登录的用户不一致,还是不好。
不调整用户授权了,还是从根上解决此问题!!!
7、重新导入存储过程,为了不一个一个手工删除一堆的存储过程,生成批量删除脚本:
SELECT concat("DROP PROCEDURE " , t.specific_name," ;" ) as command FROM information_schema.routines t
where definer='skip-grants user@skip-grants host';
删除存储过程后,创建存储过程脚本中的’skip-grants user@skip-grants host’ 全部替换为自己用的用户。
程序再重新执行存储过程成功!
总之,就是存储过程的用户权限不对。
问题:MySQL Workbench 导出时为什么是指定这么奇怪的用户?如有高手指点一二。