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;

连接成功!!!!!!!

 

posted @ 2022-05-15 12:37  yl_diao  阅读(446)  评论(0编辑  收藏  举报