Ubuntu20.04中MySQL8.0出现ERROR(1449)

发现错误

登录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项目正常。如果你的项目有很多个,可能每一个都要修改,但是数据不会丢失。

写在后面

暂时没有发现是什么导致了这个问题,试过很多方法也没有重现,不过问题算是解决了。

  • 7
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值