MySQL Error 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 …призвів до тієї ж помилки.



@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
FYI - це допомогло мені вирішити РІЗНУ помилку - "сервер № 2006 відійшов"
його

37
Майте на увазі, що використання "set global" працює до наступного перезавантаження служби mysql.
Буде Шавер

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

3
На CentOS 5 my.cnf розміщений за адресою /etc/my.cnf
Rustavore

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, файл, очевидно, знаходиться в іншому місці.
кч

2
Зрозуміло, але конфігурація все ще десь, хоча я не знаю точного місця розташування
GHad

Для мене в Fedora 20 з MariaDB, встановивши цю настройку в кінці /etc/my.cnf.d/server.cnf, зробив свою справу. Мені довелося перезапустити сервіс, звичайно ... sudo nano systemctl перезапустити mariadb.service
Ray Foss

Файл швидше буде "my.cnf" і в nix системах, як правило, в / etc / або / usr / local / тощо. Після редагування переконайтесь, що перезапустіть сервер 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 ..., поки ви не почнете змінювати речі :)
Chris Burgess

У моєму випадку /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 Мб, спробував з макс. вище, ніж це.
кч

4

Трохи не пов’язаний із вашою проблемою, тож ось для Google.

Якщо ви не mysqldump SQL, можливо, ваш SQL зламаний.

Я просто отримав цю помилку, випадково маючи незакритий рядковий літерал у своєму коді. Трапляються неохайні пальці.

Це фантастичне повідомлення про помилку, щоб отримати рятувальну рядок, спасибі за цей MySQL!


1
Я також отримав цю помилку через зламаний SQL. Більш конкретно, у моїй таблиці є нульові обмеження, і мій код був ВСТАВЛЕННЯ нульових значень. Замість того, щоб дати мені інформаційну помилку, MySQL повернув max_allowed_packetпомилку. Якщо це допомагає тим, хто в майбутньому, я ВСТУПУвав за допомогою API пандdf.to_sql(...)
Алекс Петралія

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і тому я міг вирішити цю проблему. Я все ж шукаю ідеальне рішення / спосіб вирішити цю проблему.

Редагувати - Видалення таблиць створило для мене проблеми, тому що Drupal очікував, що ці таблиці повинні існувати. Тож я випорожнив вміст цих таблиць, які вирішили проблему.


0

Помилка:

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

ПИТАННЯ:

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.