com.mysql.jdbc.exceptions.jdbc4.MySQLNonTransientConnectionException:
Communication link failure, message from server: "Can't get hostname for your address"
MySQL 服務端嘗試對客戶端 IP 做**反向 DNS 解析**(獲取主機名),但 DNS 服務器無響應或無 PTR 記錄,導致握手超時/失敗。
[mysqld]
skip_name_resolve = 1
# 重啟 MySQL 服務生效
mysql.user 的 Host 列只能用 IP/通配符,不能用主機名。192.168.1.50 client-hostname
jdbc:mysql://localhost:3306/db?useUnicode=true&characterEncoding=utf-8&
connectTimeout=5000&socketTimeout=30000&
autoReconnect=true&failOverReadOnly=false
# 服務器上測試反向解析
dig -x 192.168.1.50
# 或
host 192.168.1.50
# 若超時/無記錄,確認是 DNS 問題
Can't get hostname for your address 純屬 MySQL 服務端反向 DNS 解析失敗。生產環境**強烈建議開啟 skip_name_resolve=1**,同時確保權限表使用 IP 授權。配合 JDBC 超時參數,可徹底規避此類連接抖動。