• 问题: Packet for query is too large (1786 > 1024). You can change this value on the server by setting the max_allowed_packet' variable.


    错误描述:

    今天在手机端查看之前上线的项目时,突然报了下面的错误。再之后用电脑登陆,其他设备登陆都一直报这个错误。

    错误信息:

    ### Error querying database. Cause: com.mysql.jdbc.PacketTooBigException: Packet for query is too large (1036 > 1024). You can change this value on the server by setting the max_allowed_packet' variable. 
    ### The error may involve defaultParameterMap 
    ### The error occurred while setting parameters 
    ### Cause: com.mysql.jdbc.PacketTooBigException: Packet for query is too large (1036 > 1024). You can change this value on the server by setting the max_allowed_packet' variable.
    ; SQL []; Packet for query is too large (1036 > 1024). You can change this value on the server by setting the max_allowed_packet' variable.; nested exception is com.mysql.jdbc.PacketTooBigException: Packet for query is too large (1036 > 1024). You can change this value on the server by setting the max_allowed_packet' variable. 

    主要错误信息:Packet for query is too large (1036 > 1024)

    出错的原因就是表面的意思:请求包的大小是1036,而mysql设置的允许的最大包的大小是1024,因此出错。

    解决思路:

    在抛出的异常信息中已经给出了解决方案:You can change this value on the server by setting the max_allowed_packet' variable.

    也就是设置下“max_allowed_packet”的值就好了[什么是max_allowed_packet:MySQL根据配置文件会限制Server接受的数据包大小。有时候大的插入和更新会受 max_allowed_packet 参数限制,导致大数据写入或者更新失败。

    ]

    具体操作:

    (1)可以先看下“max_allowed_packet”的值

    show  VARIABLES like '%max_allowed_packet%';

     

    可以看出我当前的值是1024(修改之前的默认值)

    (2)下面就是修改

    遇到这个问题后,看了不少博客,说的都是下面的两种解决方案:

    1)命令行临时修改(不需要重启mysql)

    SET GLOBAL  max_allowed_packet=1073741824 

    2)修改配置文件,可以长久生效的(修改完需要重启mysql)

     找到配置文件的目录

    mysql –help | grep my.cnf

    修改配置文件 (my.cnf)

    max_allowed_packet = 20M 

    我尝试了第一种方法,可以执行成功,但是,修改完依然报错,再通过sql查看时发现值没变。

    (值没变的原因:

    SET GLOBAL max_allowed_packet=1073741824 

    注意里面的"GLOBAL",设置的范围是GLOBAL ,但是查看的时候是show VARIABLES like '%max_allowed_ 并没有GLOBAL ,

    通过

    show  GLOBAL  VARIABLES like '%sql_mode%'; 

    发现

    值确实被修改了

    详细内容见大佬简书:https://www.jianshu.com/p/629685b97030

    注意:该值设置过小将导致单个记录超过限制后写入数据库失败,且后续记录写入也将失败。

    3)我选择了比较稳妥的方法,修改配置文件,他然后重启mysal、

    原以为这样就不会有问题了,但是!!!在大约一个月后又报了这个错,max_allowed_packet的值又变成了1024,重新打开配置文件,发现里面的值还是20M啊,但是通过命令查询的时候却发现查出来的值是1024,然后我就把mysql重启了一下,在去查询的时候发现配置文件里的配置生效了。由于当时比较忙,也没去查生效值变为1024的原因。之后这个错误又出现了三次,每次都是重启服务器解决。直到有一天数据库中了勒索病毒。库被删了,让用比特币换。才意识到问题的严重性。

    具体的才可以查看下面这篇博客:

    Mysql max_allowed_packet自动重置为1024(黑客入侵?)

  • 相关阅读:
    C#中 File,Directory,FileInfo,DirectoryInfo区别与应用
    C#中设置开机自动运行和关机
    C# 线程手册 第三章 使用线程 小心死锁
    C# WinForm判断Win7下是否是管理员身份运行
    C#应用MemoryStream提高File读取速度
    CodeforcesDouble Profiles
    SRM533 D1 L1
    SRM532 D1 L2
    SRM533 D2 L3
    次小生成树 | 割点 | 割边
  • 原文地址:https://www.cnblogs.com/excellencesy/p/10411330.html
Copyright © 2020-2023  润新知