• com.mysql.jdbc.PacketTooBigException: Packet for query is too large (1169 > 1024)


    ### Cause: com.mysql.jdbc.PacketTooBigException: Packet for query is too large (1169 > 1024). You can change this value on the server by setting the max_allowed_packet' variable.

    ; SQL []; Packet for query is too large (1169 > 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 (1169 > 1024). You can change this value on the server by setting the max_allowed_packet' variable.

    我是进入到查看数据库的:

    show VARIABLES like '%max_allowed_packet%';

    太小导致出错。

    在linux下,进入到mysql安装目录下:

    进入到:

    /usr/local/mysql,找到my.cnf,增加一行

    max_allowed_packet = 20M

    故障现象:数据存储的时候报ERROR: Packet for query is too large (2034> 1024). You can change this value on the server by setting the max_allowed_packet' variable.


    排查过程:从报错看是 mysql的 max_allowed_packet参数值设置太少了,用show VARIABLES like '%max_allowed_packet%';查看,显示的是1024,这当然就有问题了,超过1024就存不了,于是在/etc/my.cnf文件中【mysqld]下面加上max_allowed_packet=10M,执行service mysql restart ,再用show VARIABLES like '%max_allowed_packet%'查,生效了!再观察数据存储也没问题了!以为问题就此解决,结果是第二天发现又报这个错,用show VARIABLES like '%max_allowed_packet%'查看,奇怪了,有变成1024了!好烦心!继续查资料,说是内存不足的问题,导致MySQL自动重新设置参数,于是top查看,发现 Java占了 3.2G,mysql占了600+M,总共4G,的确有可能!于是把jvm的-Xms设置为2G,再观察几天,这次真的解决了!
     
    经验教训:不要把一台服务器的内存都用光了,要预留多点内存,另外mysql和Java程序最好分开部署。

    重启mysql:

    service mysql restart

    然后在查询:

     好了,以上解决!

    在做查询数据库操作时,报了以上错误,还有out of memery heap hacp ,原因是MySQL的max_allowed_packet设置过小引起的,我一开始设置的是1M,后来改为了20M

    mysql根据配置文件会限制server接受的数据包大小。

    有时候大的插入和更新会被max_allowed_packet 参数限制掉,导致失败。

    查看目前配置
    show VARIABLES like '%max_allowed_packet%';

    显示的结果为:

    +--------------------+---------+ | Variable_name      | Value   | +--------------------+---------+ | max_allowed_packet | 1048576 | +--------------------+---------+  

    以上说明目前的配置是:1M

     
    修改方法
    1) 方法1
    可以编辑my.cnf来修改(windows下my.ini),在[mysqld]段或者mysql的server配置段进行修改。
    max_allowed_packet = 20M
    如果找不到my.cnf可以通过

    mysql --help | grep my.cnf

    去寻找my.cnf文件。
    2) 方法2

    (很妥协,很纠结的办法)
    进入mysql server
    在mysql 命令行中运行
    set global max_allowed_packet = 2*1024*1024*10
    然后关闭掉这此mysql server链接,再进入。
    show VARIABLES like '%max_allowed_packet%';
    查看下max_allowed_packet是否编辑成功
     

    经验总结:
    在很多台机器上用方法一都没问题,但2011年11月14日遇到一台机器死活都不成功,
    使用命令行方式:set global max_allowed_packet = 16M;
    也不行,但使用
    set global max_allowed_packet = 2*1024*1024*10;
    成功了,很是郁闷
    问题终于找出来了,不是方法的问题,是设置完成后要把命令行退出重新登录查看,看来系统变量的值在登录后会缓存。但在这台机器上使用配置INI文件。

    参考文档:
    http://www.360doc.com/content/11/0214/17/4171006_93014351.shtml
    http://hi.baidu.com/jgs2009/blog/item/2de0701601186202c93d6dfd.html
    http://www.cnblogs.com/phpfans2012/archive/2012/3/2.html
    http://blog.csdn.net/wpekin/article/details/5661625
    http://www.360doc.com/content/11/0214/17/4171006_93014351.shtml

    如果找不到my.cnf文件:

    用rpm包安装的MySQL是不会安装/etc/my.cnf文件的,
    至于为什么没有这个文件而MySQL却也能正常启动和作用,在点有两个说法,
    第一种说法,my.cnf只是MySQL启动时的一个参数文件,可以没有它,这时MySQL会用内置的默认参数启动,
    第二种说法,MySQL在启动时自动使用/usr/share/mysql目录下的my-medium.cnf文件,这种说法仅限于rpm包安装的MySQL,
    解决方法,只需要复制一个/usr/share/mysql目录下的.cnf文件到/etc目录,并改名为my.cnf即可。

    此时可以通过以下修改:

    MySQL根据配置文件会限制Server接受的数据包大小。有时候大的插入和更新会受 max_allowed_packet 参数限制,导致写入或者更新失败。

    查看目前配置:

    复制代码代码如下:
    show VARIABLES like '%max_allowed_packet%';


    显示的结果为:

    复制代码代码如下:
    +--------------------+---------+
    | Variable_name      | Value   |
    +--------------------+---------+
    | max_allowed_packet | 1048576 |
    +--------------------+---------+ 


    以上说明目前的配置是:1M

    修改方法

    1、修改配置文件

    可以编辑my.cnf来修改(windows下my.ini),在[mysqld]段或者mysql的server配置段进行修改。

    复制代码代码如下:
    max_allowed_packet = 20M


    如果找不到my.cnf可以通过

    复制代码代码如下:
    mysql --help | grep my.cnf


    去寻找my.cnf文件。
    linux下该文件在/etc/下。

    2、在mysql命令行中修改

    在mysql 命令行中运行:

    复制代码代码如下:
    set global max_allowed_packet = 2*1024*1024*10


    然后退出命令行,重启mysql服务,再进入。

    复制代码代码如下:
    show VARIABLES like '%max_allowed_packet%';


    查看下max_allowed_packet是否编辑成功

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

    重启mysql语句:

    一、启动方式

    1、使用 service 启动:service mysqld start

    2、使用 mysqld 脚本启动:/etc/inint.d/mysqld start

    3、使用 safe_mysqld 启动:safe_mysqld&

    二、停止

    1、使用 service 启动:service mysqld stop

    2、使用 mysqld 脚本启动:/etc/inint.d/mysqld stop

    3、 mysqladmin shutdown 

    三、重启

    1、 使用 service 启动:service mysqld restart

    2、使用 mysqld 脚本启动:/etc/inint.d/mysqld restart
    提问 编辑摘要


    如何启动/停止/重启MySQL
    一、 启动方式

    1、使用 service 启动:service mysqld start

    2、使用 mysqld 脚本启动:/etc/inint.d/mysqld start

    3、使用 safe_mysqld 启动:safe_mysqld&

    二、停止

    1、使用 service 启动:service mysqld stop

    2、使用 mysqld 脚本启动:/etc/inint.d/mysqld stop

    3、 mysqladmin shutdown

    三、重启

    1、使用 service 启动:service mysqld restart

    2、使用 mysqld 脚本启动:/etc/inint.d/mysqld restart

  • 相关阅读:
    【BZOJ 2124】【CodeVS 1283】等差子序列
    【BZOJ 1036】【ZJOI 2008】树的统计Count
    【BZOJ 1901】【ZJU 2112】Dynamic Rankings
    【BZOJ 3924】【ZJOI 2015】幻想乡战略游戏
    【BZOJ 4103】【THUSC 2015】异或运算
    【BZOJ 4513】【SDOI 2016】储能表
    【HDU 3622】Bomb Game
    【BZOJ 3166】【HEOI 2013】Alo
    【BZOJ 3530】【SDOI 2014】数数
    【BZOJ 4567】【SCOI 2016】背单词
  • 原文地址:https://www.cnblogs.com/gmq-sh/p/7096687.html
Copyright © 2020-2023  润新知