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

403

Я импортирую дамп 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 … привел к той же ошибке.

  • 0
    возможный дубликат Как изменить размер max_allowed_packet
  • 0
    @Muleskinner, этот вопрос был опубликован за 3 года до того, который вы упомянули, и я указываю на это через 4 года после вашего комментария. :п
Показать ещё 2 комментария
Теги:

14 ответов

507
Лучший ответ

Вероятно, вам придется изменить его как для клиента (вы выполняете импорт), так и для 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;

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

  • 9
    думаю, корпоративная поддержка по-прежнему превосходит эту вещь сообщества: P
  • 0
    У меня есть сервер с 16 ГБ ОЗУ, это плохая идея установить max_allowed_packet на 100 МБ?
Показать ещё 14 комментариев
123

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

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

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

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

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

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

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

[mysqld]

max_allowed_packet = 10M
  • 5
    на Mac файл явно находится в другом месте.
  • 2
    конечно, но конфигурация все еще где-то, хотя я не знаю точное местоположение
Показать ещё 2 комментария
15

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

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

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

  • 0
    Конфигурация по умолчанию для OSX выглядит как my-medium.cnf, хотя размер max_allowed_packet в my-large.cnf одинаков ... пока вы не начнете что-то менять :)
  • 0
    В моем случае /usrl/local/mysql/my.cnf не работал, пока я не скопировал его в /etc/my.cnf.
12

В 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 
10

Исправление состоит в том, чтобы увеличить демоны MySQL max_allowed_packet. Вы можете сделать это для запускаемого демона, войдя в систему как 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
  • 0
    На какой версии MySQL вы работали?
5

В 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

Слегка не связанный с вашей проблемой, поэтому здесь один для Google.

Если вы не использовали mysqldump SQL, возможно, ваш SQL файл поврежден.

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

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

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

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

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

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

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

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

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

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
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
0

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

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

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

0

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

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

  • 0
    сделал это, не сработало. действительно использовал mysqldump.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню