異常:org.apache.ibatis.exceptions.PersistenceException: ### Error querying database. Cause: com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure


異常信息:

org.apache.ibatis.exceptions.PersistenceException: 
### Error querying database.  Cause: com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure

The last packet successfully received from the server was 1,423 milliseconds ago.  The last packet sent successfully to the server was 1,413 milliseconds ago.
### The error may exist in yh/dao/UserMapper.xml
### The error may involve yh.dao.IUserMapper.selectUser
### The error occurred while executing a query
### Cause: com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure

出現場景

  使用 MyBatis 操作數據庫時,出現問題,一頓排查代碼問題無果,才想到可以能是連接上的問題

mybatis-config.xml 中 url 的配置:

<property name="url" value="jdbc:mysql://localhost:3306/mybatis?useSSL=true&amp;useUnicode=true&amp;characterEncoding=utf8"/>

可能產生問題的地方

   首先,異常消息`Communications link failure`,意味着該數據庫根本無法訪問。可能有以下一種或多種原因:
  1. JDBC URL中的IP地址或主機名錯誤。
  2. 本地DNS服務器無法識別JDBC URL中的主機名。
  3. JDBC URL中的端口號丟失或錯誤。
  4. 數據庫服務器已關閉。
  5. 數據庫服務器不接受TCP / IP連接。
  6. 數據庫服務器已用盡連接。
  7. Java和DB之間的某種事物正在阻止連接,例如防火牆或代理。

要解決一個或另一個,請遵循以下建議:

  1. 使用驗證並測試它們 ping。
  2. 刷新 DNS 或在 JDBC URL中使用 IP 地址。
  3. 檢查 my.cnf 或 my.ini 是否有錯誤。
  4. 啟動數據庫。
  5. 驗證mysqld是否在沒有 ——skip-networking 選項的情況下啟動。
  6. 重新啟動數據庫,並相應地修復您的代碼,使其關閉中的連接finally。
  7. 禁用防火牆和/或配置防火牆/代理以允許/轉發端口。

解決問題

  通過排查,發現是 useSSLeep=true(一種安全協議。在傳輸層與應用層之間對網絡連接進行加密。) 這一個參數引發的異常,搜索了解了一下,發現我的 SSL 是開啟了的,但是還需要在 my.ini 配置文件中指定 ssl 證書路徑:
# 在配置文件中指定ssl證書路徑
ssl-ca=/usr/local/mysql5728/data/ca.pem
ssl-cert=/usr/local/mysql5728/data/server-cert.pem
ssl-key=/usr/local/mysql5728/data/server-key.pem

直接將 mysql5728 改為自己的 MySQL 根目錄名即可(重啟服務生效)

而后就可以通過 MyBatis 在配置了 SSL=true 的情況下鏈接數據庫進行操作了,並解決了安全連接問題


免責聲明!

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



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