【MySQL】ERROR 1449 (HY000) at line 1: The user specified as a definer (‘skip-grants user’@’skip-grants host’) does not exist
xixuefeng
MySQL, MySQL-DEV
2019-05-08 10:08:08
2,265 次浏览
【MySQL】ERROR 1449 (HY000) at line 1: The user specified as a definer (‘skip-grants user’@’skip-grants host’) does not exist已关闭评论
通过shell调用存储过程,定期做一些对表的操作,具体做什么不重要,主要是这个过程,每天定时调用shell调用MySQL的存储过程,突然有一天就报如题的错误(当然,在命令行下直接调用过程也是报同样的错误)。
错误很明确,定义的用户不存在,那么问题是:1:之前一直没有问题;2:压根也没这么一个用户
回想一下,我只做了一个操作,就是将MySQL的参数文件加了skip-grant-tables这个参数(公司内部测试环境,所以为了方便及某种测试,所以加了这个参数。生产环境是绝对不允许使用这个参数的。)
查看一下存储过程的DDL,也就是存储过程的创建语句,大致如下:
1 2 3 4 5 6 7 8 |
CREATE DEFINER=`skip-grants user`@`skip-grants host` PROCEDURE `sp_truncate_tab`() BEGIN #Routine body goes here... DECLARE v_table_name VARCHAR(20); DECLARE v_spname VARCHAR(50) DEFAULT 'sp_truncate_tab'; DECLARE v_err INT DEFAULT 0; DECLARE v_sql VARCHAR(500); …… |
看到这个就明白了,原来之前一直使用skip-grant-tables这个参数,导致同事在创建过程登录数据库时,直接mysql登录的,登陆后创建的过程,用户就是skip-grants user
@skip-grants host
这个东西。
解决:既然参数问价中已经把skip-grant-tables这个参数去掉了,那么重新再创建一下这个过程就好了。