The user specified as a definer('mysql.infochema'@''localhost') does not exist
最近将之前用的 mysql5.5 升级到了 mysql8.0,第一天还能正常使用,几天没用后,登录发现报错:The user specified as a definer ('mysql.infoschema'@'localhost') does not exists ,大概意思就是 infoschema 用户无了,我寻思我这几天啥也没干啊,就在网上找啊找,什么方法都试了一下,要不就是不行,要不就是在过程中报一些莫名其妙的错,在我万念俱灰之际,突然发现了这个大佬的博客,看到这儿了。这都是废话,下次记得跳过
https://www.iteye.com/blog/hellohank-2521011#comments
直观原因:就是mysql.user表里面少了一个账号信息:mysql.infoschema
解决方法:
1、使用mysql语句创建账号:
CREATE USER 'mysql.infoschema'@'localhost' IDENTIFIED BY '密码';
有可能报错:
mysql8 ERROR 1726 (HY000): Storage engine 'MyISAM' does not support system tables. [mysql.user]
解决方法:
ALTER TABLE mysql.user ENGINE = InnoDB;
修复之后,继续创建用户,发现哪个表报上面的错,就用上面的语句更改引擎。但,最终还是报错:
Column count of mysql.user is wrong. Expected 51, found 45. The table is probably corrupted
那就不要挣扎了,这条路已经几乎不通了,还有什么使用mysql_upgrade的,基本上都不靠谱了。直接使用下面的第二种方法
2、插入对应的账号数据,亲测有效:
mysql -uroot -p"密码" use mysql; INSERT INTO mysql.user(`Host`,`User`,`plugin`,`authentication_string`,ssl_cipher,x509_issuer,x509_subject) VALUES ('localhost','mysql.infoschema','mysql_native_password','*THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE','','',''); FLUSH PRIVILEGES; update user set Select_priv = 'Y' where User = 'mysql.infoschema'; FLUSH PRIVILEGES;
修改好了以后发现还是有问题!!!继续看↓↓↓
avicat 链接mysql 数据库报错,
使用mysql终端登陆 show 命令也报错
ERROR 1356 (HY000): View 'information_schema.COLUMNS' references invalid table(s) or column(s) or function(s) or definer/invoker of view lack rights to use them
报错信息是没有权限,隐约记得改过mysql.user 表的mysql.infoschema权限信息,information_schema库下面的所有视图不能访问
不知道mysql.infoschema的哪个权限跟information_schema的查询有关,以为是Show_view_priv,Show_db_priv,Process_priv影响的但是改完后仍报错,最后尝试修改Select_priv 能正常访问了
执行语句
mysql -uroot -p
select * from user where User ='mysql.infoschema';
update user set Select_priv = 'Y' where User = 'mysql.infoschema';
flush privileges;
连接成功!!!!!!!