MySQL Packet for query is too large 问题及解决方法

 更新时间:2018年05月24日 21:20:25   作者:dqsweet  
这篇文章主要介绍了MySQL Packet for query is too large 问题及解决方法,需要的朋友可以参考下

问题描述:

报错信息:

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

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

查看 max_allowed_packet 参数:

在客户端执行:

show VARIABLES like '%max_allowed_packet%'; 

得到结果如下:

+--------------------+------------+ 
| Variable_name   | Value  | 
+--------------------+-------------------+ 
| max_allowed_packet | 1024 | 
+--------------------+-------------------+  

修改方法:

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命令行中修改

set global max_allowed_packet = 2*1024*1024*10  
//这里的数值为字节数,这里改为20M,需要重新登陆客户端起作用 

注:在客户端用命令修改后,只能暂时起作用,重新启动MYSQL后,会恢复原来的值。

Linux下mysql 报Packet for query is too large (1040 > 1024)错误的解决方法

项目之前一直正常运行,这几天突然一直提示查询出错,看了下日志发现提示Packet for query is too large (1040 > 1024). You can change this value on the server by setting the max_allowed_packet' variable.错误。百度了解决方法,记录下解决过程。

1.原因

查询数据库返回的数据包太大,超过了默认值。
登录mysql,在控制台输入一下命令查询默认的max_allowed_packet值,发现只有1024

show VARIABLES like '%max_allowed_packet%'; 

2.修改默认最大允许包大小

2.1方式一:命令方式

(1).在mysql控制台下输入以下命令,设置max_allowed_packet为20M

set global max_allowed_packet = 20*1024*1024; 

(2).退出mysql,重启mysql服务,再登录myql中查询max_allowed_packet是否修改成功

show VARIABLES like '%max_allowed_packet%'; 

2.2方式二:修改配置文件my.cnf方式
(1).mysql控制台下输入以下命令,编辑my.cnf

sudo vi  /etc/mysql/my.cnf 

(2).在[mysqId]下面添加

max_allowed_packet = 20M 

2.2退出编辑模式,重启mysql,步骤如2.1的(2)所示

3.注

配置完查询max_allowed_packet发现是16777216,实际上是16*1024*1024,并不是期望的20M,于是又查了下,可能是服务器内存容量不够,因为java就占了很多,所以mysql可能会自动重设参数。所以某些情况下可能是你当时更改完max_allowed_packet参数,过一段时间mysql自动重设参数变为默认的1024,又出现了同样的错误。

相关文章

  • 简单分析MySQL中的primary key功能

    简单分析MySQL中的primary key功能

    这篇文章主要介绍了MySQL中的primary key功能,包括讲到了其对InnoDB使用的影响,需要的朋友可以参考下
    2015-05-05
  • MSSQL产生死锁的根本原因及解决方法

    MSSQL产生死锁的根本原因及解决方法

    死锁是指两个或两个以上的进程在执行过程中,因争夺资源而造成的一种互相等待的现象,若无外力作用,它们都将无法推进下去.此时称系统处于死锁状态或系统产生了死锁,这些永远在互相等的进程称为死锁进程
    2016-04-04
  • MySql执行流程与生命周期详解

    MySql执行流程与生命周期详解

    当你执行一次MySQL查询时,有没有仔细想过,在查询结果返回之前,经过了哪些步骤呢?这些步骤有可能消耗了超出想象的时间和资源。因此,在对MySQL的查询进行优化之前,应该了解一下MySQL查询的生命周期
    2022-09-09
  • MYSQL的存储过程和函数简单写法

    MYSQL的存储过程和函数简单写法

    简单的说,就是一组SQL语句集,功能强大,可以实现一些比较复杂的逻辑功能,类似于JAVA语言中的方法,这里就为大家简单介绍一下,需要的朋友可以参考下
    2018-05-05
  • mysql 字符串函数收集比较全

    mysql 字符串函数收集比较全

    mysql 字符串函数收集,需要的朋友可以参考下。
    2010-03-03
  • MySQL索引查询limit offset及排序order by用法

    MySQL索引查询limit offset及排序order by用法

    这篇文章主要介绍了MySQL限制数据返回条数limit offset及排序order by用法,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-05-05
  • SQL- join多表关联问题

    SQL- join多表关联问题

    这篇文章主要介绍了SQL- join多表关联问题,具有很好的参考价值,希望对大家有所帮助。
    2022-12-12
  • Mysql忘记密码解决方法

    Mysql忘记密码解决方法

    这篇文章主要给大家风向的是Mysql忘记密码解决方法,我们忘记mysql密码时,我们可以通过mysql的配置文件设置登录不需要认证就可以不需要密码进行登录了,下面我们就进入文章学习具体的解决方法吧
    2022-02-02
  • Mysql的复合索引如何生效

    Mysql的复合索引如何生效

    本文主要介绍了Mysql的复合索引如何生效,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-12-12
  • 解决Mysql收缩事务日志和日志文件过大无法收缩问题

    解决Mysql收缩事务日志和日志文件过大无法收缩问题

    这篇文章主要介绍了解决Mysql收缩事务日志和日志文件过大无法收缩问题,非常不错,具有参考借鉴价值,需要的朋友可以参考下
    2017-08-08

最新评论