查询包太大了MySQL

时间:2016-01-29 07:47:13

标签: mysql tomcat tomcat-jdbc

我有一个tomcat应用程序连接到MySQL Db / java应用程序

我一直在

用于查询的数据包太大1080> 1024

我尝试更改my.cnf: 在my.cnf中,Max包大小定义为50 MB和

socket = /var/run/mysqld/mysqld.sock
port = 3306
basedir     = /usr
datadir = /var/lib/mysql
tmpdir      = /tmp
lc-messages-dir = /usr/share/mysql
lower_case_table_names  = 1
skip-external-locking



bind-address = 0.0.0.0



key_buffer      = 16M
max_allowed_packet = 50M
thread_stack        = 192K
thread_cache_size       = 8
group_concat_max_len=100000
innodb_lock_wait_timeout=300
innodb_buffer_pool_size=22G
innodb_locks_unsafe_for_binlog = ON
innodb_additional_mem_pool_size=40M

我甚至尝试将Param作为连接字符串的一部分传递

jdbc:mysql://serverIP:3306/dbname?maxAllowedPacket=2048000

到jdbc驱动程序 - 我仍然继续

用于查询的数据包太大1080> 1024

每隔几个小时就会发生这种情况。

我应该检查什么?

MySQL版本是5.5

感谢您的帮助。

2 个答案:

答案 0 :(得分:1)

看起来没有正确配置的东西......在配置更改后你重启了MySQL吗?您必须在两端配置大小:

  

客户端和服务器都有自己的max_allowed_pa​​cket变量,因此如果要处理大数据包,则必须在客户端和服务器中增加此变量。

但是,服务器的默认大小为1mb(1024 kb)。鉴于您的错误1080>1024我猜测您的配置更改没有发生(至少在客户端和服务器上都没有)。

这是因为查询,行或二进制日志事件大于1mb:

  

通信数据包是发送到MySQL服务器的单个SQL语句,发送到客户端的单个行,或从主复制服务器发送到从属服务器的二进制日志事件。

我尝试在客户端和服务器(包括你的复制实例,如果有的话)上碰到5mb。您必须退回MySQL才能使更改生效。

https://dev.mysql.com/doc/refman/5.5/en/packet-too-large.html

答案 1 :(得分:1)

对于那些只想增加max_allowed_packet的大小而又不想永久保留此更改的人,请尝试执行sql:

use your_db;
set global max_allowed_packet = 1024*1024*10; # set size to 10M  

要验证其是否生效,您需要打开一个新的查询会话并执行:

show VARIABLES like '%max_allowed_packet%';

请注意,此更改是临时性的,并在mysql重新启动时恢复为默认值。