Чим фактично керується настройка MySQL “max_allowed_packet”?


8

Ми прибирали проблеми з базами даних протягом останніх чотирьох годин, завдяки зламаному, mysqldumpщо не було достатньо помилок. Ми отримували ці помилки:

mysqldump: Error 2020: Got packet bigger than "max_allowed_packet" bytes when dumping table "search_dataset" at row: 68014

Що, чорт, робить це налаштування? Це, очевидно, не розмір пакета IP, оскільки я зараз його встановив на 32М. Чому воно існує?

Відповіді:


7

Відповідно до сторінки 99 "Розуміння внутрішніх даних MySQL" (ISBN 0-596-00957-7) , ось пункти 1-3, що пояснюють це:

Код зв'язку в мережі MySQL був написаний з припущенням, що запити завжди досить короткі, а тому можуть бути відправлені та оброблені сервером за один фрагмент, який в термінології MySQL називається пакетом . Сервер виділяє пам'ять на тимчасовий буфер для зберігання пакету, і він вимагає достатньо, щоб повністю його вмістити. Ця архітектура вимагає запобіжних заходів, щоб уникнути втрати пам’яті сервера --- обмеження розміру пакету, яке виконується цим параметром.

Код, що цікавить цей параметр, можна знайти в sql / net_serv.cc . Погляньте на my_net_read () , потім слідкуйте за викликом до my_real_read () і зверніть особливу увагу на net_realloc () .

Ця змінна також обмежує довжину результату багатьох функцій струн. Докладніше див. Sql / field.cc та sql / intem_strfunc.cc .

Це, мабуть, найповніше пояснення max_allowed_packet, який я коли-небудь бачив. Я набрав ці 3 абзаци прямо з книги.


Дякуємо, що опублікували це. Здається, натякає, що "пакет" означає "IP-пакет".
Рендольф Річардсон

Чудова відповідь. Я думаю, це так близько, як я доходжу до реальної відповіді. (Я все ще впевнений, що це не стосується IP-пакетів. Ніде не згадується IP-адреса, і я вважаю, що 65535 байт зазвичай є обмеженням у реальному світі для навіть фрагментованих IP-пакетів.)
Plutor

1

Документація пояснює це повністю тут:

"Максимальний розмір одного пакета або будь-якого згенерованого / проміжного рядка. ..."

Документація також йде на адресу BLOB, а також на те, як ця настройка пов'язана з ними.


Це насправді не відповідає на моє запитання. Що таке пакет у цьому контексті? Це насправді IP-пакет? Чи не існує кращого способу, ніж простий ліміт байтів для вилучення неправильно сформованих даних?
Plutor

Якщо вони не визначають "пакет" як щось інше (що, як видається, не роблять у документації), розумно очікувати, що "пакет" відноситься до IP-пакету.
Рендольф Річардсон

Я знайшов визначення в книзі, яку я маю. Я додав уривок із цієї книги як свою відповідь.
RolandoMySQLDBA
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.