1. 程式人生 > 其它 >奇怪的問題:JEECG-BOOT專案啟動報資料庫連線失敗

奇怪的問題:JEECG-BOOT專案啟動報資料庫連線失敗

MySQL版本:Server version: 8.0.28 MySQL Community Server

JEECG-BOOT版本:3.1.0

問題描述:

jeecg-boot連線本地資料庫報錯。

異常資訊詳情:

2022-05-10 09:32:08.329 [Druid-ConnectionPool-Create-650835126] ERROR com.alibaba.druid.pool.DruidDataSource:2781 - create connection SQLException, url: jdbc:mysql://127.0.0.1:3306/jeecg-boot?characterEncoding=UTF-8&useUnicode=true&useSSL=false&tinyInt1isBit=false&allowPublicKeyRetrieval=true&serverTimezone=Asia/Shanghai, errorCode 1045, state 28000
java.sql.SQLException: Access denied for user 'root'@'localhost' (using password: YES)
	at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:129)
	at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:97)
	at com.mysql.cj.jdbc.exceptions.SQLExceptionsMapping.translateException(SQLExceptionsMapping.java:122)
	at com.mysql.cj.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:836)

問題排查步驟:

第一步、給root使用者開通遠端訪問許可權

-- 登入資料庫後切換至mysql資料庫
use mysql;
-- 給root使用者開通遠端訪問許可權
update user set host = '%' where user = 'root';
-- 重新載入許可權資料
flush privileges

給root使用者開通遠端訪問許可權後,再次啟動程度,問題還存在,沒有解決!

第二步、確認配置檔案中的資料庫連線密碼是否正確

配置的資料庫連線密碼正確,可以在其它電腦上使用DataGrip成功連線資料庫。

第三步、那到底是哪裡出了問題呢?

到底是哪裡出了問題呢?不知道,一臉懵B。嘗試將資料庫連線密碼修改為abc123

-- 登入資料庫後切換至mysql資料庫
use mysql;
-- 修改root使用者密碼
alter user 'root'@'%' identified by 'abc123';
-- 重新載入許可權資料
flush privileges

再次啟動程式,居然成功了。

最後問題雖然解決了,但是沒有弄明白問題出在哪了。原來的密碼由大寫字母、小寫字母、@符號、數字4部分組成,用這種格式的密碼,執行程式就報資料庫連線錯誤,改成abc123這種簡單的密碼,就能夠成功連線。So,是druid動態資料庫連線配置資訊不支援密碼中含有特殊字元?不應該吧,Druid這麼強,阿里出品。

後記

MySQL8修改root密,在MySQL 8.04前,執行:SET PASSWORD=PASSWORD(‘[新密碼]’);

,但是MySQL8.0.4開始,這樣是不可行的。需要使用如下語句修改root使用者密碼:

-- 修改root使用者密碼
alter user 'root'@'%' identified by 'abc123';
-- 重新載入許可權資料
flush privileges

參考連結

MySQL8.0.11修改root密碼