mysql版本:Server version: 8.0.16 MySQL Community Servermysql
錯誤提示:linux
# 登陸mysql,輸入密碼後sql
mysql -u root -p mysql: [Warning] Using a password on the command line interface can be insecure. ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)
提示須要密碼驗證,訪問拒絕,密碼錯誤,正確密碼未知,需重置密碼。數據庫
解決辦法:函數
# 默認狀況下,mysql安裝後,若是密碼爲空,會自動建立隨機密碼spa
# 若是密碼錯誤,沒法登陸,打開my.ini的將skip-grant-tables放開,linux環境下是/etc/my.cnf,表示無認證登陸插件
mysql -u root -p
# 查看mysql日誌文件所在文件置,在error log中,有爲root用戶隨機生成了一個密碼日誌
select @@log_error;
# 經過grep命令找到隨機密碼code
grep "password" /var/log/mysqld.log 2019-06-29T14:00:02.600036Z 5 [Note] [MY-010454] [Server] A temporary password is generated for root@localhost: Se4%Fa3r5_rP
# 登陸,用該密碼登陸到服務端後,必須立刻修改密碼ip
mysql -u root -pSe4%Fa3r5_rP
#(或者,直接跳過上述方式,直接修改密碼)
# 進入mysql
use mysql;
# 查看user信息
select host,user,authentication_string from user;
# 若是當前root用戶authentication_string字段下有內容,先將其設置爲空
update user set authentication_string='' where user='root'
# 密碼要包含大寫字母,小寫字母,數字,特殊符號
ALTER user 'root'@'localhost' IDENTIFIED BY 'Db_user_2019#'
#改完後退出,再登陸便可
mysql -u root -pDb_user_2019#
注意:在mysql 5.7.9之後廢棄了password字段和password()函數;authentication_string:字段表示用戶密碼。
修改爲功後,再次到my.ini文件中的將skip-grant-tables註釋,開啓認證登陸,重啓mysql服務;
修改密碼後,navicat沒法鏈接到mysql,帳號密碼都正確,鏈接報錯1251,就連項目程序中也沒法鏈接到mysql數據庫。
在MySQL 8.04前,執行:SET PASSWORD=PASSWORD('[新密碼]');可是MySQL8.0.4開始,這樣默認是不行的。由於以前,MySQL的密碼認證插件是「mysql_native_password」,而如今使用的是「caching_sha2_password」。
須要再次修改一次root密碼。
解決辦法:
# 登陸進入mysql環境
mysql -u root -pDb_user_2019#
# 定位到mysql數據庫
use mysql;
# 從新修改密碼
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'Db_user_2019#';
# 刷新權限
FLUSH PRIVILEGES;