关于MySQL8.0 访问账户登录的先关问题汇总
背景介绍:接到其它开发团队小伙伴的反馈,说我们线上的测试的MySQL无法访问了,随展开问题查询。
查询流程和用到的命令:
1. 自己分别使用Windows的Navicat、Linux的 mysql命令行链接测试。确实有链接不通的问题。
1. 排查了 当前ECS的网络链接的状态,数据库运行的状态,包括端口绑定的状态 发现都没问题。
2. 所以开始远程到服务器上直接进行,mysql的链接测试,询问负责管理MySQL的同事后,发现root密码也忘记了。
3. 开始重置mysql root账户密码:
以下纯做记录不在说明:find / -name my.cnf
文件中添加无需密码即可登录的配置:
[mysqld]
skip-grant-tables
改完后执行命令:service mysql restart service mysql status
使用命令行登录mysql,重置root密码
mysql -uroot -p
此时是无需密码即可能录状态,因为mysql8开始,必须先将用户密码先置空,再设置密码。
use mysql
select host, user, authentication_string, plugin from user;
update user set authentication_string='' where user='root';
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '极度保密的密码';
FLUSH PRIVILEGES;
密码重置完成后,去除my.cnf中的跳过登录的配置,重启mysql后生效。
修改root用户访问的授权客户端,将只允许本地访问改为可允许任何客户端访问。(此步只做验证操作)
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '' WITH GRANT OPTION;
FLUSH PRIVILEGES;
select host, user, authentication_string, plugin,ssl_type from user;
随后就是重点了:
修改root密码后,发现依然无法访问,随后查看/etc/mysql/mysql.conf.d/mysqld.cnf 发现开启了:require_secure_transport=ON
暂时注释掉,然后使用root成功登录。随后来解决关于require_secure_transport=ON 访问的问题。
全局搜索mysql使用的ssl认证,发现路径 在 /var/lib/mysql/路径下下 ,下载需要的client先关的pem,尝试使用本地的navicat访问失败,可能是navicat版本问题,继续后续测试。
然后又用linux服务器的命令行访问:mysql -h 服务IP -u 用户 -p密码 --ssl-ca='/opt/robot_cert/ca.pem' --ssl-cert='/opt/robot_cert/client-cert.pem' --ssl-key='/opt/robot_cert/client-key.pem';
可以访问。恢复root访问授权。close掉