登录MysqL,使用show databases;和show tables;这两个命令时报错ERROR 1449,备份数据库时报了同样的错误,这样的话卸载MysqL重装就变得非常危险。
报错信息
ERROR 1449 (HY000): The user specified as a definer (‘MysqL.infoschema’@‘localhost’) does not exist
错误分析
报错信息提示用户MysqL.infoschema@localhost不存在,执行命令
select user,host from MysqL.user;
然而看到MysqL.infoschema用户是存在的,这让人一头雾水,去搜索了一圈,说是让使用MysqL_upgrade命令,这个命令在MysqL8.0已经被废弃了,但是我们还有别的解决办法。
两种方案
第一种:
在终端执行
sudo vim /etc/MysqL/MysqL.conf.d/MysqLd.cnf
打开MysqLd.cnf文件
在末尾键入以下代码(作用是跳过MysqL的登录验证):
skip-external-locking
skip-grant-tables
wq保存并退出,service MysqL restart重启MysqL server,这样就实现了MysqL的免密登录,在终端下输入MysqL再回车,使用show databases;命令,如果运气好的话,应该不会再报错了,也可以正常备份。
可是MysqL免密登录在本地还好,甚至要方便一些,但在服务端有很大的风险,没事,还有第二种方案。
第二种:
注释掉刚才添加过的配置文件代码,重启MysqL,MysqL -uroot -p登录,执行下列命令:
删除导致报错的用户
DROP USER 'MysqL.infoschema'@'localhost';
重新创建该用户,密码自己定义,留空也可以
CREATE USER 'MysqL.infoschema'@'localhost' IDENTIFIED BY 'password';
赋予权限
GRANT ALL PRIVILEGES ON . TO 'MysqL.infoschema'@'localhost' WITH GRANT OPTION;
使更改生效
FLUSH PRIVILEGES;
此时使用show databases;命令可以正常查看数据库了,问题解决,不需要卸载重装。
可能的问题
或许你使用了上述的方法,但发现web项目不能访问,以wordpress为例,会出现连接数据库时出错,这时在终端使用以下命令:
MysqL -u wordpress -p
输入你的密码,应该是不能正常连接的,这与MysqL8.0的新的加密方式有关,可以使用以下方式进行修正:
登录MysqL
MysqL -u root -p
选择数据库
use MysqL;
修改plugin字段
update user set plugin="MysqL_native_password";
删除原有用户
drop user 'wordpress'@'localhost';
重新创建,密码要跟原来的保持一致,当然也可以重新设置,然后修改项目配置文件
CREATE USER 'wordpress'@'localhost' IDENTIFIED BY 'password';
赋予权限
GRANT all ON wordpress.* TO 'wordpress'@'localhost';
FLUSH PRIVILEGES;
exit;
重启MysqL服务,再次访问web项目正常。如果你的项目有很多个,可能每一个都要修改,但是数据不会丢失。
写在后面
暂时没有发现是什么导致了这个问题,试过很多方法也没有重现,不过问题算是解决了。
来源: https://blog.csdn.net/ljc545w/article/details/109725115
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。