5

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

我不断得到

查询包太大 1080>1024

我尝试更改 my.cnf:在 my.cnf 中,最大数据包大小定义为 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

我什至尝试将参数作为连接字符串的一部分传递

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

到 jdbc 驱动程序 - 我仍然不断得到

查询包太大 1080>1024

这每隔几个小时就会出现一次。

我应该检查什么?

MySQL版本是5.5

谢谢您的帮助。

4

2 回答 2

2

对于那些只想临时增加大小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 重新启动时恢复为默认值。

于 2020-04-16T14:58:54.657 回答
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

于 2016-01-29T08:12:30.040 回答