錯(cuò)誤場(chǎng)景描述
使用數(shù)據(jù)庫(kù)連接工具(如:dataGrip)或者使用 msyql 命令行連接 mysql 8.0 的本地 server 時(shí),報(bào)如下錯(cuò)誤:
Access denied for user 'root'@'localhost'(using password: YES)
本地 mysql8.0 數(shù)據(jù)庫(kù)版本:

解決辦法
1. 停掉 mysql 服務(wù)
# 切換至管理員賬戶
sudo bash -c "su"
# 殺掉 mysql 進(jìn)程
ps aux | grep -v grep | grep mysql | awk '{print $2}' | xargs kill -9
執(zhí)行完畢后,可以在系統(tǒng)偏好設(shè)置的 mysql 服務(wù)里查看 mysql 服務(wù)器的狀態(tài):

當(dāng)然也可以通過(guò)如下命令查看是否還存在 mysql 進(jìn)程:
# 查看是否還存在 mysql 進(jìn)程
ps aux | grep -v grep | grep mysql
2. 啟動(dòng) mysql 8.0 server
# 切換至管理員用戶
sudo bash -c "su"
# 不啟動(dòng) grant-tables 授權(quán)表方式啟動(dòng) mysql server,可以不用輸入密碼登錄數(shù)據(jù)庫(kù),此時(shí)該終端會(huì)阻塞
/usr/local/mysql/bin/mysqld_safe --skip-grant-tables

3. 新開(kāi)一個(gè) terminal 終端,登錄 mysql 8.0 server
# 輸入如下命令,按回車即可登錄數(shù)據(jù)庫(kù),無(wú)需輸入密碼,直接回車即可
/usr/local/mysql/bin/mysql -uroot -p

4. 執(zhí)行如下命令
# 1. 使用 mysql 數(shù)據(jù)庫(kù)
mysql> use mysql;
# 2. 將 authentication_string 置空
mysql> update user set authentication_string = '' where user = 'root';
# 3. 重新設(shè)置新密碼,其中 new_password 就是要設(shè)置的新密碼
mysql> alter user 'root'@'localhost' identified by 'new_password';
# 4. 如果上述第 3 步執(zhí)行提示成功,則輸入如下命令,然后關(guān)閉命令終端,就可以正常登錄 mysql 8.0 server 了
mysql> flush privileges;
此時(shí),會(huì)報(bào)如下錯(cuò)誤:

關(guān)閉已經(jīng)打開(kāi)的兩個(gè) terminal 終端,重新執(zhí)行上述的步驟 1,殺死 mysql 進(jìn)程:

使用系統(tǒng)偏好設(shè)置的 MySQL 服務(wù)正常開(kāi)啟 mysql 服務(wù),然后重新執(zhí)行上述步驟的 3、4:
# 1. 輸入如下命令,按回車即可登錄數(shù)據(jù)庫(kù),無(wú)需輸入密碼,直接回車即可
/usr/local/mysql/bin/mysql -uroot -p
# 2. 使用 mysql 數(shù)據(jù)庫(kù)
mysql> use mysql;
# 3. 將 authentication_string 置空
mysql> update user set authentication_string = '' where user = 'root';
# 4. 重新設(shè)置新密碼,其中 new_password 就是要設(shè)置的新密碼
mysql> alter user 'root'@'localhost' identified by 'new_password';
# 5. 如果上述第 3 步執(zhí)行提示成功,則輸入如下命令,然后關(guān)閉命令終端,就可以正常登錄 mysql 8.0 server 了
mysql> flush privileges;

5. 重新使用 dataGrip 連接 mysql 8.0 server

注意
上述操作同樣適用于,忘記 root 賬戶登錄密碼時(shí),用來(lái)重置登錄密碼