首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

Eclipse JDBC 連 MySQL 失敗「Can't get hostname for your address」:MySQL 服務登錄身份配置錯誤

     編輯:程式設計綜合問答

錯誤現場

com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException: 
Communication link failure, message from server: "Can't get hostname for your address"

環境:校園網 DHCP,IP 頻繁變化。Oracle JDBC 正常,MySQL 5.6 + mysql-connector-java-5.1.26 失敗。

根因與修復

MySQL 服務屬性 → 登錄身份 默認選「網絡服務」,導致服務無權解析客戶端主機名(反向 DNS 查詢失敗)。

  1. 打開 services.msc。
  2. 找到 MySQL56(或對應服務名)。
  3. 右鍵 → 內容 → 登錄 選項卡。
  4. 選中 本地系統賬戶,勾選「允許服務與桌面交互」(可選)。
  5. 重啟服務。

原理補充

  • MySQL 默認啟用 skip-name-resolve = OFF,嘗試解析客戶端 IP 對應主機名以做權限匹配(user@host)。
  • 「網絡服務」賬戶無網絡查詢權限,導致解析超時拒絕連接。
  • 「本地系統」擁有完整網絡權限,解析成功;或在 my.ini 設 skip-name-resolve=1 禁用解析(需改用 IP 授權賬號)。

驗證步驟

> mysql -h 127.0.0.1 -u root -p
# 能連上說明服務端無誤,問題在 JDBC 客戶端網絡權限

避坑指南

  • Windows 服務登錄身份影響網絡權限,不止 MySQL,PostgreSQL、Redis 等同理。
  • 校園網 IP 變化不影響 JDBC 連接(客戶端主動發起),僅影響服務端反向解析。
  • 生產環境建議 Linux 部署 MySQL,避免 Windows 服務權限坑。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved