項目啓動報數據庫連接錯誤:com.mysql.cj.jdbc.exceptions.CommunicationsException: Communications link failure解決辦法

echo編輯整理,歡迎轉載,轉載請聲明文章來源。


將項目拉下來之後,發現啓動報如下錯誤:

 Access denied for user 'root'@'localhost' (using password YES)
  • 這個錯誤說明數據庫沒有開放外部鏈接,密碼是正確的,開放外部權限即可

解決辦法

# 開放權限
# 登錄mysql
mysql -u root -p
# 開放外部訪問權限
ALTER USER 'admin'@'%' IDENTIFIED WITH mysql_native_password BY '123456';
# 注意這裏很有可能報錯,因爲很有可能你的用戶默認是root或者是以前創建過的docker鏡像的用戶,這裏可以先查看'%'對應的用戶是啥
- ERROR 1396 (HY000): Operation ALTER USER failed for 'root'@'%'
# 查看'%'用戶
use mysql
select user,host from user;
# 開放外部訪問權限,根據查詢出來'%'對應的用戶設置
GRANT ALL PRIVILEGES ON *.* TO 'admin'@'%'  IDENTIFIED BY '123456'  WITH GRANT OPTION;
# 刷新權限
flush privileges;

出現如下錯誤:

com.mysql.cj.jdbc.exceptions.CommunicationsException: Communications link failure

The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server.
	at com.mysql.cj.jdbc.exceptions.SQLError.createCommunicationsException(SQLError.java:174) ~[mysql-connector-java-8.0.18.jar:8.0.18]
	at com.mysql.cj.jdbc.exceptions.SQLExceptionsMapping.translateException(SQLExceptionsMapping.java:64) ~[mysql-connector-java-8.0.18.jar:8.0.18]
	at com.mysql.cj.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:836) ~[mysql-connector-java-8.0.18.jar:8.0.18]
    ……
Caused by: com.mysql.cj.exceptions.CJCommunicationsException: Communications link failure

解決辦法

# 先排除yml配置的數據庫連接問題,最關鍵的幾個點有:
- driver-class-name: com.mysql.jdbc.Driver

# 查看數據庫是否有開放權限
- use mysql
  select user,host from user;
看看查詢出來的用戶名稱對應的host是不是有開發對應的ip,或者乾脆所有連接都可以的代表值"%"

# 查看mysql的版本和mysql-connector-java是否匹配
mysql5.7以前用5.1,5.7以後用8.0

# 如果還不行的話,試着加一個連接池試試

# 到這裏還沒解決的話,建議你把項目重新拉一遍,並且把mysql重新安裝,很有可能是mysql的版本導致的,之前也碰到過版本bug
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章