Ошибка MySQL 1153 - получен пакет, размер которого превышает байты max_allowed_packet


430

Я импортирую дамп MySQL и получаю следующую ошибку.

$ mysql foo < foo.sql 
ERROR 1153 (08S01) at line 96: Got a packet bigger than 'max_allowed_packet' bytes

По-видимому, в базе данных есть вложения, что делает их очень большими.


Это на моей локальной машине, Mac с MySQL 5, установленный из пакета MySQL.

Где я могу изменить, max_allowed_packetчтобы иметь возможность импортировать дамп?

Есть что-нибудь еще, что я должен установить?

Просто запуск mysql --max_allowed_packet=32M …привел к той же ошибке.


Возможный дубликат Как изменить размер
max_allowed_packet

@Muleskinner, этот вопрос был опубликован за 3 года до того, который вы упомянули, и я указываю на это через 4 года после вашего комментария. : p
tiomno

2
Webyog.com Ссылка не работает: 404
Pathros

Здесь аналогичная ошибка «Пакет для запроса слишком большой (5526600> 1048576).» Была вызвана неправильным вводом пароля при подключении к базе данных MySQL с использованием DataGrip 2016.1 от JetBrains и устранена при исправлении (с использованием правильного пароля). соответствующий пользователю базы данных MySQL).
nyedidikeke

Ответы:


589

Возможно, вам придется изменить его как для клиента (вы выполняете импорт), так и для демона mysqld, который запускает и принимает импорт.

Для клиента вы можете указать его в командной строке:

mysql --max_allowed_packet=100M -u root -p database < dump.sql

Также измените файл my.cnf или my.ini в разделе mysqld и установите:

max_allowed_packet=100M

или вы можете выполнить эти команды в консоли MySQL, подключенной к тому же серверу:

set global net_buffer_length=1000000; 
set global max_allowed_packet=1000000000;

(Используйте очень большое значение для размера пакета.)


У меня есть сервер с 16 ГБ ОЗУ, плохая идея установить max_allowed_packet100 МБ?
вебнет

11
К вашему сведению - это помогло мне решить РАЗНУЮ ошибку: «Сервер № 2006 ушел»
свой день

37
Имейте в виду, что использование «set global» работает до следующего перезапуска службы mysql.
Будет ли бритва

2
Пропустить "установить глобальный" и окончательный ";" при добавлении этих значений в файлы my.ini или my.cnf. Пример: "net_buffer_length = 1000000" в my.conf.
Руставоре

3
На CentOS 5 my.cnf находится по адресу /etc/my.cnf
Руставоре

124

Как сказал michaelpryor, вы должны изменить его как для клиента, так и для сервера демона mysqld.

Его решение для командной строки клиента хорошо, но ini-файлы не всегда делают свое дело, в зависимости от конфигурации.

Итак, откройте терминал, введите mysql, чтобы получить приглашение mysql, и выполните следующие команды:

set global net_buffer_length=1000000; 
set global max_allowed_packet=1000000000; 

Оставьте приглашение mysql открытым и запустите выполнение SQL командной строки на втором терминале.


2
Решил проблему для меня; импорт, который я делаю, является однократным, и я не могу легко изменить конфигурацию. Это сработало отлично. : D
Роб Ховард

39

Это можно изменить в вашем my.iniфайле (в Windows, расположенном в \ Program Files \ MySQL \ MySQL Server) в разделе сервера, например:

[mysqld]

max_allowed_packet = 10M

5
на Mac файл явно находится в другом месте.
KCH

2
конечно, но конфигурация все еще где-то, хотя я не знаю точное местоположение
GHad

Для меня в Fedora 20 с MariaDB, размещение этого параметра в конце /etc/my.cnf.d/server.cnf добилось цели. Мне пришлось перезапустить службу, конечно ... sudo nano systemctl перезапустить mariadb.service
Рэй Фосс

Скорее всего, файл будет "my.cnf" и в системах nix, обычно в / etc / или / usr / local / etc. После редактирования обязательно перезапустите сервер MySQL, чтобы изменения вступили в силу.
Крис

17

Перепишите my.cnf в Mac OS X при использовании MySQL из дистрибутива пакета mysql.com dmg

По умолчанию my.cnf нигде не найдено.

Вам нужно скопировать один из /usr/local/mysql/support-files/my*.cnfк /etc/my.cnfи рестарт mysqld. (Что вы можете сделать на панели настроек MySQL, если вы установили его.)


Конфигурация по умолчанию для OSX выглядит как my-medium.cnf, хотя размер max_allowed_packet в my-large.cnf одинаков ... пока вы не начнете что-то менять :)
Крис Берджесс

В моем случае /usrl/local/mysql/my.cnf не работал, пока я не скопировал его в /etc/my.cnf.
VG

14

В etc / my.cnf попробуйте изменить max_allowed _packet и net_buffer_length на

max_allowed_packet=100000000
net_buffer_length=1000000 

если это не работает, попробуйте изменить на

max_allowed_packet=100M
net_buffer_length=100K 

12

Исправление состоит в том, чтобы увеличить max_allowed_packet демона MySQL. Вы можете сделать это с работающим демоном, войдя в систему как Super и выполнив следующие команды.

# mysql -u admin -p

mysql> set global net_buffer_length=1000000;
Query OK, 0 rows affected (0.00 sec)

mysql> set global max_allowed_packet=1000000000;
Query OK, 0 rows affected (0.00 sec)

Затем, чтобы импортировать ваш дамп:

gunzip < dump.sql.gz | mysql -u admin -p database

На какой версии MySQL вы работали?
crmpicco

6

На CENTOS 6 /etc/my.cnf в разделе [mysqld] правильный синтаксис:

[mysqld]
# added to avoid err "Got a packet bigger than 'max_allowed_packet' bytes"
#
net_buffer_length=1000000 
max_allowed_packet=1000000000
#

4

Используйте max_allowed_packetпеременную, выдав команду

mysql --max_allowed_packet=32M -u root -p database < dump.sql


2
попробовал, не сработало. весь дамп в 272мб, пробовал с макс выше чем то.
KCH

4

Немного не связано с вашей проблемой, так что вот для Google.

Если вы не выполняли mysqldump SQL, возможно, ваш SQL сломан.

Я только что получил эту ошибку, случайно обнаружив в своем коде незамкнутый строковый литерал. Небрежные пальцы случаются.

Это фантастическое сообщение об ошибке для бегущей строки, спасибо за это MySQL!


1
Я также получил эту ошибку из-за сломанного SQL. Более конкретно, моя таблица имеет нулевые ограничения, и мой код вставлял нулевые значения. Вместо того, чтобы дать мне информативную ошибку, MySQL возвратил max_allowed_packetошибку. Если это поможет в будущем, я вставляю с помощью API пандdf.to_sql(...)
Alex Petralia

1

Иногда тип установки:

max_allowed_packet = 16M

в my.ini не работает.

Попробуйте определить my.ini следующим образом:

set-variable = max_allowed_packet = 32M

или

set-variable = max_allowed_packet = 1000000000

Затем перезапустите сервер:

/etc/init.d/mysql restart

1

Риск безопасности имеет max_allowed_packetболее высокое значение, поскольку злоумышленник может отправить пакеты большего размера и привести к сбою системы.

Итак, оптимальное значение max_allowed_packetдля настройки и тестирования.

Лучше изменить при необходимости (используя set global max_allowed_packet = xxx), чем иметь его как часть my.ini или my.conf .


0

Я работаю в среде общего хостинга, и у меня есть веб-сайт на основе Drupal. Я не могу редактировать my.iniфайл или my.confфайл тоже.

Итак, я удалил все таблицы, которые были связаны, Cacheи, следовательно, я мог решить эту проблему. Тем не менее, я ищу идеальное решение / способ справиться с этой проблемой.

Edit - удаление таблиц создало для меня проблемы, потому что Drupal ожидал, что эти таблицы должны существовать. Поэтому я опустошил содержимое этих таблиц, что решило проблему.


0

Ошибка:

ОШИБКА 1153 (08S01) в строке 6772: получен пакет больше, чем байты 'max_allowed_packet' Операция завершилась неудачно с кодом выхода 1

QUERY:

SET GLOBAL max_allowed_packet=1073741824;
SHOW VARIABLES LIKE 'max_allowed_packet'; 

Максимальное значение:

Default Value (MySQL >= 8.0.3)  67108864
Default Value (MySQL <= 8.0.2)  4194304
Minimum Value   1024
Maximum Value   1073741824

-1

Установите для max_allowed_packet то же самое (или больше), что и при сбросе с помощью mysqldump. Если вы не можете сделать это, сделайте дамп снова с меньшим значением.

То есть, если вы сбросили его с помощью mysqldump. Если вы использовали какой-то другой инструмент, вы по своему усмотрению.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.