Пакет для запроса слишком большой MySQL

У меня есть приложение tomcat, подключающееся к приложению MySQL Db/java

я продолжаю получать

Пакет для запроса слишком большой 1080>1024

Я попытался изменить my.cnf: в my.cnf максимальный размер пакета определяется как 50 МБ и

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.

Спасибо за помощь.


person Mayank R Jain    schedule 29.01.2016    source источник
comment
на клиенте - это maxAllowedPacket или max_allowed_packet?   -  person pherris    schedule 29.01.2016
comment
Какой запрос вы выполняете? Если вы манипулируете большими двоичными объектами, вам нужно использовать другую технику для передачи данных туда и обратно. Пакет размером 50 МБ кажется возмутительным.   -  person Christopher Schultz    schedule 31.01.2016
comment
Не связанное с этим примечание: innodb_additional_mem_pool_size — это бесполезная настройка. если вы не используете внутренний распределитель памяти MySQL вместо стандартного malloc (чего делать не следует). Этот параметр был удален в более поздних версиях MySQL.   -  person Christopher Schultz    schedule 31.01.2016


Ответы (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.

person mainframer    schedule 16.04.2020

Похоже, что-то настроено неправильно... Вы перезапустили MySQL после внесения изменений в конфигурацию? Вы должны настроить размер на обоих концах:

И клиент, и сервер имеют свою собственную переменную max_allowed_packet, поэтому, если вы хотите обрабатывать большие пакеты, вы должны увеличить эту переменную как на клиенте, так и на сервере.

Однако размер сервера по умолчанию составляет 1 МБ (1024 КБ). Учитывая, что ваша ошибка говорит 1080>1024, я предполагаю, что ваши изменения конфигурации не произошли (по крайней мере, ни на клиенте, ни на сервере).

Это происходит из-за того, что запрос, строка или событие двоичного журнала превышают 1 МБ:

Коммуникационный пакет представляет собой один оператор SQL, отправляемый на сервер MySQL, одну строку, отправляемую клиенту, или двоичное событие журнала, отправляемое с главного сервера репликации на подчиненный.

Я бы попробовал увеличить до 5 МБ на клиенте и сервере (включая ваш экземпляр репликации, если он у вас есть). Вам придется отказаться от MySQL, чтобы изменения вступили в силу.

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

person pherris    schedule 29.01.2016
comment
Я перезапустил сервер MySQL - никакого эффекта - та же ошибка. Есть ли другой способ, которым Тони определяет переменную на стороне клиента, кроме URL-адреса подключения? Как мне проверить - person Mayank R Jain; 29.01.2016
comment
вы запускаете репликацию? вы проверили формат параметра на клиенте? похоже, это должен быть змеиный чехол, а не верблюжий max_allowed_packet - person pherris; 29.01.2016
comment
Нет репликации - один сервер - person Mayank R Jain; 29.01.2016
comment
Проверка с помощью Param в строке URL-адреса в случае змеи... Сообщит вам, работает ли это - person Mayank R Jain; 29.01.2016
comment
Некоторые доп. Чтение говорит, что для большинства клиентов по умолчанию установлено значение выше 1 МБ, поэтому не думаю, что это проблема. Одно интересное примечание: этот документ: dev.mysql .com/doc/refman/5.5/en/, в котором говорится, что значение конфигурации должно быть целым числом — вы можете попробовать max_allowed_packet = 51200 вместо 50M (хотя в других частях документации говорится, что это сработает). Кроме того, вы отбрасываете экземпляр MySQL, когда вносите изменения в my.cnf, верно? - person pherris; 29.01.2016
comment
Да перезагружаю после каждого изменения - person Mayank R Jain; 29.01.2016
comment
Так что змеиный случай не помогает - опять вылезла ошибка - 2039 › 1024 на этот раз - person Mayank R Jain; 30.01.2016
comment
Также изменен my.cnf для чтения 5230000 вместо перезапуска 50M - та же ошибка после 30 минут использования. Что мне не хватает? - person Mayank R Jain; 30.01.2016
comment
Разве 5230000 не 5,3 гб? 1 гб это максимум. Извините, я не уверен на 100%. - person pherris; 30.01.2016