Mysql 5.7.28初始化使用root无法登录

背景:

新买的云服务器,Ubuntu系统,在线安装了mysql-5.7.28,初始化之后并成功启动

 

问题:

打开error.log日志,使用root账号登录失败,从日志中也无法找到临时密码,无法登录

解决方法:

1. 修改配置文件mysqld.cnf,添加配置skip-grant-tables, 重启mysql

#sudo vi /etc/mysql/mysql.conf.d/mysqld.cnf

 

#sudo service mysql restart

2. 使用root账号无密码登录

#mysql -u root -p

3. 查看root账号的信息

mysql> select user, host, authentication_string, plugin from mysql.user where user = 'root' and host = 'localhost' \G

 4. 修改root账号的plugin为‘mysql_native_password’,并设置密码

mysql>update mysql.user set plugin = 'mysql_native_password', authentication_string = password('hello123') where user = 'root' and host = 'localhost';

mysql> flush privileges;

 5. 修改配置文件mysqld.cnf,注释配置skip-grant-tables, 重启mysql

#sudo vi /etc/mysql/mysql.conf.d/mysqld.cnf

 

 

 6. 使用账号root登录mysql,并输入设置的密码

#mysql -u root -p

 

 

 

总结:

1. 由于在线安装mysql,初始化也是自动完成的,该安装包使用的是--initialize-insecure 方式,所有没有给root创建默认的初始密码,导致在error.log中找不到随机密码。

2. 根据官网解释,如果使用--initialize-insecure 方式,只需要使用命令mysql -u root --skip-password登录后设置密码即可,但是试过方式失败,原因是因为root的plugin使用的是“auth_socket”而不是“mysql_native_password". 在官网暂未找到为何plugin会被设置成”auth_socket"的原因。

3. auth_socket,是检验连接是否通过unix套接字实现的,而不是校验账号密码的,如果账号的plugin选择的是auth_socket,即使设置了密码,也是无法通过账号密码登录的,详情可参考官网 https://dev.mysql.com/doc/refman/5.7/en/socket-pluggable-authentication.html

 

 

 

posted @ 2020-01-05 15:43  icy_chen  阅读(998)  评论(0编辑  收藏  举报