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实现异步复制的示例

    MySQL实现异步复制的示例

    MySQL的复制就是将来自一个MySQL数据库服务器(主库)的数据复制到一个或多个MySQL数据库服务器(从库),本文主要介绍了MySQL实现异步复制的示例,感兴趣的可以了解一下
    2024-09-09
  • 推荐没有虚拟主机的小巧的Mysql数据库备份脚本(PHP)

    推荐没有虚拟主机的小巧的Mysql数据库备份脚本(PHP)

    推荐没有虚拟主机的小巧的Mysql数据库备份脚本(PHP)...
    2007-07-07
  • 深入了解SQL注入

    深入了解SQL注入

    本篇文章通过SQL和MYSQL的对比,以及SQL注入的原理等方面详细分析了SQL注入相关知识点,对此有兴趣的朋友学习下。
    2018-02-02
  • MySQL中将一列以逗号分隔的值行转列的实现

    MySQL中将一列以逗号分隔的值行转列的实现

    这篇文章主要介绍了MySQL中将一列以逗号分隔的值行转列的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-10-10
  • MySql下关于时间范围的between查询方式

    MySql下关于时间范围的between查询方式

    这篇文章主要介绍了MySql下关于时间范围的between查询方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-07-07
  • Mysql使用concat函数实现关键字模糊查询功能(列表数据过滤含前后端代码)

    Mysql使用concat函数实现关键字模糊查询功能(列表数据过滤含前后端代码)

    在我们的平时开发中经常会遇到根据条件过滤列表数据项,今天在做自己项目的时候就遇到了这个问题,正好借着这个机会分享我的思路以及相关的代码,对Mysql使用concat函数实现关键字模糊查询功能感兴趣的朋友一起看看吧
    2023-02-02
  • Windows10下MySQL5.7.31解压版安装与卸载方法

    Windows10下MySQL5.7.31解压版安装与卸载方法

    这篇文章主要介绍了Windows10下MySQL5.7.31解压版安装与卸载,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2023-12-12
  • linux 之centos7搭建mysql5.7.29的详细过程

    linux 之centos7搭建mysql5.7.29的详细过程

    这篇文章主要介绍了linux 之centos7搭建mysql5.7.29的详细过程,本文通过图文并茂的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-05-05
  • 如何查看MySQL连接的root密码

    如何查看MySQL连接的root密码

    前几天在用Navicat去连本地的MySQL的时候发现我已经忘了密码了,试了网上很多方式都不行…后来发现其实可以自己直接去看当初设置的密码,下面将方法总结出来分享给大家,有需要的朋友们可以参考借鉴,下面来一起看看吧。
    2017-01-01
  • 忘记mysql数据库root用户密码重置方法[图文]

    忘记mysql数据库root用户密码重置方法[图文]

    忘记mysql数据库root用户密码重置方法,需要的朋友可以参考下。
    2011-11-11

最新评论