Мы очищали проблемы базы данных в течение прошлых четырех часов благодаря поврежденному mysqldump
это не было достаточно erroring. Мы получали эти ошибки:
mysqldump: Error 2020: Got packet bigger than "max_allowed_packet" bytes when dumping table "search_dataset" at row: 68014
Какого черта та установка делает? Это - очевидно, не размер пакета IP, так как у меня есть он набор к 32M теперь. Почему это существует?
Согласно странице 99 "Понимания MySQL Internals" (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 абзаца прямо из книги.
Документация объясняет это в полных деталях здесь:
"Максимальный размер одного пакета или любой генерировал/посредничал строку...."
Документация также продолжает обращаться к БЛОБАМ и как эта установка набрасывается на них.