在经过千辛万苦终于把mysql8装到linux上,发现登录不知道密码,很尴尬
这里需要将密码重置一下.但是都不知道密码是啥怎么登录mysql操作修改呢?
grep 'temporary password' /var/log/mysqld.log
查看初始化生成的密码
还是回到/etc/my.cnf
增加skip-grant-tables
重启mysql
systemctl restart mysqld
这样就可以跳过登陆的密码了,但是能操作的也很有限,所以还是需要密码
然后我们mysql -uroot -p
直接回车不输入任何东西
成功的进来了.
接下来就是操作数据库
use mysql;
select host, user, authentication_string, plugin from 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%';
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;
现在就可以正常的使用小海豚或者navicat Premium登录了