修改max_allowed_packet后Java连接MySQL仍报数据包过大错误如何解决
解决步骤
第一步:验证服务端配置是否生效
登录目标MySQL服务,执行命令:show variables like 'max_allowed_packet';若返回值为65535(即64KB),说明之前的配置未生效:
- 检查
my.cnf配置是否写在[mysqld]分段下,不能写到[mysql]等客户端配置分段 - 配置示例:
max_allowed_packet = 16M(需大于实际的数据包大小4.7MB,这里设16M即可) - 重启MySQL服务后重新执行上述SQL确认参数生效
- 检查
第二步:添加JDBC连接参数
MySQL 8.x版本的JDBC驱动存在客户端层面的数据包大小限制,需在JDBC连接串中显式配置maxAllowedPacket参数,修改后的连接串如下:String url = "jdbc:mysql://10.20.30.40:32/BI_data?maxAllowedPacket=16777216" ;其中
16777216对应16MB的字节数,可根据实际业务需求调整大小。第三步:排查中间链路限制
如果上述配置都生效后仍报错,需检查访问链路上是否存在数据库代理、防火墙、WAF等设备,这类中间设备可能会限制单TCP包的最大大小,导致数据包被截断返回报错。第四步:SSH隧道访问适配(针对最终需求)
若需要通过SSH隧道访问MySQL,需先在本地建立SSH端口转发:- 执行SSH端口转发命令:
ssh -L 本地端口:127.0.0.1:MySQL服务端口 SSH用户名@SSH服务器IP - 将JDBC连接串的IP和端口改为
127.0.0.1:本地端口即可,SSH隧道默认无数据包大小限制,无需额外调整SSH配置(除非手动修改过SSH的MaxPacketSize参数)
- 执行SSH端口转发命令:
内容的提问来源于stack exchange,提问作者VSTech
相关产品推荐
相关产品推荐

