文章目录
异常日志:
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
方法 1:修改 MySQL 配置文件
-
打开配置文件
根据操作系统不同,MySQL 的配置文件位置有所不同:- Linux/Unix 系统:通常位于
/etc/my.cnf或/etc/mysql/my.cnf - Windows 系统:通常位于
C:\ProgramData\MySQL\MySQL Server X.Y\my.ini
- Linux/Unix 系统:通常位于
-
修改配置
在配置文件中找到[mysqld]部分,添加或修改如下配置:[mysqld] max_allowed_packet=64M您可以将
64M调整为适合您需求的值,确保它大于当前的数据包大小。 -
保存并重启 MySQL 服务
sudo service mysql restart或者使用适合您操作系统的命令来重启 MySQL 服务。
方法 2:通过 MySQL 命令行设置
如果不方便修改配置文件,可以通过 MySQL 命令行动态修改:
-
连接到 MySQL
mysql -u root -p -
执行以下 SQL 命令来临时调整
SET GLOBAL max_allowed_packet = 64M;注意: 这个设置在 MySQL 服务重启后会恢复为默认值。如果需要永久生效,仍建议修改配置文件。
验证修改效果
修改 max_allowed_packet 后,可以再次执行查看命令以确认设置是否生效:
SHOW VARIABLES LIKE 'max_allowed_packet';
此外,尝试重新执行之前导致错误的查询,正常是没有问题的。
其他建议
-
优化查询:有时候,数据包过大可能是因为查询返回了过多的数据。考虑优化查询,减少返回的数据量,例如通过分页查询 、减少返回不必要的字段、优化子查询和连接等方式。
-
客户端设置:确保客户端(如 JDBC 驱动)的
maxAllowedPacket设置与服务器一致,以避免客户端与服务器之间的数据传输限制不匹配。
4525

被折叠的 条评论
为什么被折叠?



