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

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM