type
status
date
slug
summary
tags
category
icon
password
js
最近将Spring Boot升级到了3.4.0,同时升级了mysql-connector-j的版本。一开始以为是Spring Boot的锅,结果查资料发现是mysql-connector-j的问题。
原因
直接上结论:这是高版本mysql-connector-j(8.4以上都有这个问题),由于触发了反向 DNS 查询导致。当一个 InetAddress 创建时包含了域名信息,getHostName() 方法会直接返回这个域名,否则会触发反向 DNS 解析,当配置的 DNS 服务器与目标 InetAddress 之前网络状况不佳就会产生延时。而我们本地部署的Mysql不会有域名,它花了很长时间去反解析(感觉是个bug,理论上要屏蔽内网地址)。
解决方案
- 引入 8.0.33 以下版本,因为此版本的 ConnectionImpl 没有 getHostName() 方法。
- 此方法没成功,数据库版本8.0.24。这里贴出来仅供参考 修改 mysql 数据库配置文件,启用 skip-name-resolve 配置,这样就会跳过反向 DNS 解析,只会基于 IP 地址来进行连接和身份验证,加速连接过程并避免 DNS 配置或延迟导致的问题。在 [mysqld] 节点下,新增配置:skip-name-resolve。推荐此方法,简单粗暴。同时,请注意在增加该配置参数后,mysql 的授权表中的 host 字段就不能使用域名只能使用 ip ,因为配置 skip-name-resolve 禁止了域名解析。
📎 参考文章
- 作者:吕行者
- 链接:https://www.lvy.life/article/2025/04/21/1dc1f2f0-5182-8050-a9d3-cea3b9914a58
- 声明:本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。
相关文章