mysql8.XXX版本以后重置密码,修改加密方式解决Authentication plugin 'XXX' cannot be loaded问题

在经过千辛万苦终于把mysql8装到linux上,发现登录不知道密码,很尴尬

这里需要将密码重置一下.但是都不知道密码是啥怎么登录mysql操作修改呢?

方法一

grep 'temporary password' /var/log/mysqld.log
查看初始化生成的密码

方法二

还是回到/etc/my.cnf
增加skip-grant-tables

mysql8.XXX版本以后重置密码,修改加密方式解决Authentication plugin 'XXX' cannot be loaded问题_第1张图片
重启mysql
systemctl restart mysqld

这样就可以跳过登陆的密码了,但是能操作的也很有限,所以还是需要密码

然后我们mysql -uroot -p
直接回车不输入任何东西

mysql8.XXX版本以后重置密码,修改加密方式解决Authentication plugin 'XXX' cannot be loaded问题_第2张图片

成功的进来了.
接下来就是操作数据库

use mysql;

select host, user, authentication_string, plugin from user; 

可以看到user表是这样的

表格介绍:

  • host: 允许用户登录的 ip ‘位置’ % 表示可以远程;

  • user: 当前数据库的用户名;

  • authentication_string: 用户密码(在mysql 5.7.9以后废弃了password字段和password()函数);

  • plugin: 密码加密方式;

尤其是plugin,这个跟mysql8之前的版本不一样,是一个挖坑点.(感觉自从mysql被oracle收购后为了数据安全后完全不管人性化了)

我们先把密码去掉

update user set authentication_string='' where user='root';

quit; 

然后我们再vi /etc/my.cnf注释掉或删除skip-grant-tables

重启mysql服务

service msqld restart

再重新登陆

mysql -u root -p

回车直接进去

使用 ALTER 修改 root 用户密码
此处先不急着操作,后面还有坑!!

  • 不完善的操作:
ALTER user 'root'@'localhost' IDENTIFIED BY '123456';

  • 完善一点的操作:(原因在下面)
update user set Host='%' where User='root';
ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'password'; # password换成你的密码

注意这个密码如果设置的比较简单,例如 123456 等等,会设置不成功,它会提示你设置的密码太简单,最好设置成大写字母、数字、符号的组合。这个也是新版mysql的一个特点,MySQL 5.7.6 以后废弃了 user 表中的 password 字段和 password() 方法,所以使用旧的方法去重置密码对 mysql 8.0 是不行的!

方法:

SHOW VARIABLES LIKE 'validate_password%';

mysql8.XXX版本以后重置密码,修改加密方式解决Authentication plugin 'XXX' cannot be loaded问题_第3张图片
将其安全策略改为LOW就可以了

set global validate_password.policy = LOW;


下面解释为什么要用完善一点的操作
现在在本机上登陆是没有问题的,但是如果在其他主机上连接过来,会发现连不上

Host xxxx is not allowed to connect to this MySql server

这个可以往上看看user那个表,host里面都是清一色的localhost,也就是只有localhost才能pass,所以我们需要将root这个host改成通配符%,让所有的主机都能登陆

在本机上登陆mysql , 修改host为百分号

use mysql;

update user set Host='%' where User='root';

在这里插入图片描述

这样是不是就可以了呢?
其实并不会,还有一个坑

Authentication plugin 'caching_sha2_password' cannot be loaded

这是因为mysql把密码加密方式改了,而很多数据库软件目前都还没反应过来,还是用的以前的密码认证,所以通不过,没办法,只能先把加密方式换成我们以前版本的

登录mysql,现在再来改密码


ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'password'; # password换成你的密码

FLUSH PRIVILEGES;

再看看user表

# 查看一下现在的user表
select host, user, authentication_string, plugin from user; 

在这里插入图片描述
可以看到plugin那我们已经换过来了

现在就可以正常的使用小海豚或者navicat Premium登录了

你可能感兴趣的:(数据库)