解决com.mysql.cj.jdbc.exceptions.PacketTooBigException

异常日志:

com.mysql.cj.jdbc.exceptions.PacketTooBigException: Packet for query is too large(12,900,367〉 4,194,304). You can change this value on the server by setting the 'max_allowed_packet' variable.

这个错误提示表明 MySQL 服务器在执行查询时,数据包的大小超过了 max_allowed_packet 的限制。max_allowed_packet 是 MySQL 服务器中允许传输的最大数据包大小,默认值通常是 4 MB(4,194,304 字节)。


解决方法:

一、查看当前 max_allowed_packet

你可以通过以下命令查看当前的 max_allowed_packet 值:

SHOW VARIABLES LIKE 'max_allowed_packet';

查看 max_allowed_packet


二、调整当前 max_allowed_packet
方法 1:修改 MySQL 配置文件
  1. 打开配置文件
    根据操作系统不同,MySQL 的配置文件位置有所不同:

    • Linux/Unix 系统:通常位于 /etc/my.cnf/etc/mysql/my.cnf
    • Windows 系统:通常位于 C:\ProgramData\MySQL\MySQL Server X.Y\my.ini
  2. 修改配置
    在配置文件中找到 [mysqld] 部分,添加或修改如下配置:

    [mysqld]
    max_allowed_packet=64M
    

    您可以将 64M 调整为适合您需求的值,确保它大于当前的数据包大小。

  3. 保存并重启 MySQL 服务

    sudo service mysql restart
    

    或者使用适合您操作系统的命令来重启 MySQL 服务。

方法 2:通过 MySQL 命令行设置

如果不方便修改配置文件,可以通过 MySQL 命令行动态修改:

  1. 连接到 MySQL

    mysql -u root -p
    
  2. 执行以下 SQL 命令来临时调整

    SET GLOBAL max_allowed_packet = 64M;
    

    注意: 这个设置在 MySQL 服务重启后会恢复为默认值。如果需要永久生效,仍建议修改配置文件。


验证修改效果

修改 max_allowed_packet 后,可以再次执行查看命令以确认设置是否生效:

SHOW VARIABLES LIKE 'max_allowed_packet';

此外,尝试重新执行之前导致错误的查询,正常是没有问题的。


其他建议

  1. 优化查询:有时候,数据包过大可能是因为查询返回了过多的数据。考虑优化查询,减少返回的数据量,例如通过分页查询 、减少返回不必要的字段、优化子查询和连接等方式。

  2. 客户端设置:确保客户端(如 JDBC 驱动)的 maxAllowedPacket 设置与服务器一致,以避免客户端与服务器之间的数据传输限制不匹配。

参考

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值