Изменен max_allowed_packet и все еще появляется ошибка 'Packet Too Large'
8
Я использую mysqldump для создания плоского файла в целях резервного копирования. Я использовал этот файл для воссоздания базы данных на альтернативном сервере. Я запустил процесс импорта через ssh в командной строке и получил несколько Packet too Largeошибок.
Я перезапустил mysql с гораздо большим max_allowed_packet (т.е. 1000M) и все еще получил ошибку. Я даже попытался установить max_allowed_packet в файле импорта, но все равно получил ошибку.
Есть ли способ убедиться, что установлен max_allowed_packet и / или использовать mysqldump, который создаст файл, который не вызывает эту проблему?
Код сетевого взаимодействия MySQL был написан в предположении, что запросы всегда достаточно короткие, и поэтому могут отправляться и обрабатываться сервером в одном фрагменте, который в терминологии MySQL называется пакетом . Сервер выделяет память для временного буфера для хранения пакета и запрашивает достаточно для его полного заполнения. Эта архитектура требует мер предосторожности, чтобы избежать исчерпания памяти на сервере - ограничение размера пакета, которое выполняет эта опция.
Интересующий код в отношении этой опции находится в
sql / net_serv.cc . Посмотрите на my_net_read () , затем выполните вызов my_real_read () и обратите особое внимание на
net_realloc () .
Эта переменная также ограничивает длину результата многих строковых функций. Смотрите sql / field.cc и
sql / intem_strfunc.cc для подробностей.
Любопытно, откуда взялись эти 10x - это простое правило или есть код в MySQL, который говорит, что выделяет 10 фиксированных буферов, поэтому вам нужно 10, чтобы убедиться, что 1 из них достаточно большой?
Гай
Является ли эта книга авторитетной?
Pacerier
2
MySQL по- max_allowed_packetпрежнему должен находиться в пределах оболочки, которая его запустила - ulimit -aпоказывает ли это data seg sizeнеограниченность?
Это очень поучительно! Поскольку в отчете об ошибке обсуждается расширенная вставка в связи с этой проблемой, возможно, выполнение --skip-extended-insert может компенсировать некоторые из них, но, несомненно, приведет к созданию большего mysqldump. +1 за то, что вы нашли этот алмаз в необработанном виде, который Oracle оставит умирать !!!
RolandoMySQLDBA
--skip-extended-insert определенно работает, но в моей базе данных замедление восстановления в 100 раз делает его непригодным для использования.
Леопд
Простите, мои соболезнования. Возможно, mysqldump создаст CSV-файлы и попытается загрузить их обратно, используя LOAD DATA INFILE и увеличив объем bulk_insert_buffer_size до 1G или 2G. Эй, ты никогда не знаешь !!!
MySQL по-
max_allowed_packet
прежнему должен находиться в пределах оболочки, которая его запустила -ulimit -a
показывает ли этоdata seg size
неограниченность?источник
Почему-то
max_allowed_packet
игнорируетсяmysqldump
- по замыслу ? Фактическое дополнение естьnet_buffer_length
. Так что вместо этого попробуйтеисточник