Packet for query is too large (2044 > 1024). You can change this value on the server.........

昨天考试管理项目在生成试卷时出现了问题,现将整个解决过程记录下来。

一、问题描述

在项目的运行日志出现了这样段话,

[WARN][2018-01-25 22:53:16,070][org.hibernate.engine.jdbc.spi.SqlExceptionHelper][SqlExceptionHelper.java][144]SQL Error: 0, SQLState: S1000
[ERROR][2018-01-25 22:53:16,071][org.hibernate.engine.jdbc.spi.SqlExceptionHelper][SqlExceptionHelper.java][146]Packet for query is too large (2044 > 1024). You can change this value on the server by setting the max_allowed_packet' variable.
[ERROR][2018-01-25 22:53:16,083][com.exam.www.exception.CustomerExceptionResolver][CustomerExceptionResolver.java][21]could not extract ResultSet; nested exception is org.hibernate.exception.GenericJDBCException: could not extract ResultSet

二、问题分析

看到这个问题主要是看第二段,意思大概是mysql的查询到的数据太大了已经超过了最大显示1024,即1M,你需要在服务器上设置mysql的相应参数为合适的值就能解决问题。
(该参数为max_allowed_packet)

三、解决问题

解决方式可能有多种,我只介绍我亲身使用的这一种。
1、首先登录到mysql数据库上,然后输入下面的命令设置max_allowed_packet的值

mysql>set global max_allowed_packet = 20*1024*1024; //这里是20m,可以根据具体情况改成适合的值

2、重启mysql数据库,查看改动的结果

root>service mysql restart;//不同版本的服务器,重启方式可能有差别!!!
//重启后再次登录mysql
mysql>show VARIABLES like '%max_allowed_packet%';

在进行以上操作后可看到下面的结果

这里写图片描述
如果原本设置的值大小为20m,但是实际的结果小于20m,不用担心,并不是操作有问题,这是因为当服务器的内存不够时,mysql数据库会自动设置max_allowed参数的值为此时所能达到的最大值。

四、设置了max_allowed参数后,又自动恢复到原来的值。

我从网上了解到导致这个原因可能有两种情况。
1、服务器内存不够。
2、骇客攻击。

首先确定是否真的是内存不够,因为我的服务器是阿里学生服务器,内存的确不大,所以很可能是这个原因。
不过为了保险起见,还是要确认是否是骇客攻击,即有人篡改了max_allowed_packet参数,下面可以设置mysql的日志与查看。
参考了下面几个链接,用于开启日志和查看日志的操作。
1、MySQL中开启和使用通用查询日志的实例教程
2、MYSQL启用日志,和查看日志

如果已配过日志,通过下面操作可找到日志的路径。。。

这里写图片描述

在完成以上操作后,将日志下载到本地查看,,,还真的是,,,,,,,,被攻击了,,,,,,,

这里写图片描述
上面很清楚,凌晨2点多,一个陌生的ip登录了服务器,然后修改了max_allowed_packet参数。。。
后面该肿么办?
对这个不了解,网上讲改密码,端口号什么的,但我目前只是改了密码,封了那个ip。


至今为止,是我第一次碰见骇客,以前对骇客只是有所耳闻,这些利用自己的知识出于特别的目的去侵犯他人的权益的人到底在生活中是什么样的人?我无法想象。


Only those who have the pratience to do simple things perfectly ever acquire the skill to do difficult things easily.

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值