Spec-Zone .ru
спецификации, руководства, описания, API
|
Коммуникационный пакет является единственным SQL-оператором, отправленным серверу MySQL, единственная строка, которая отправляется клиенту, или двоичному событию журнала, отправленному от главного сервера репликации до ведомого устройства.
Самый большой пакет, который может быть передан к или от сервера MySQL 5.7 или клиента, составляет 1 Гбайт.
Когда клиент MySQL или mysqld
сервер получают пакет, больше чем max_allowed_packet
байты, это выходит ER_NET_PACKET_TOO_LARGE
ошибка и завершения соединение. С некоторыми
клиентами можно также получить a Lost connection to MySQL server during query
ошибка, если коммуникационный пакет является слишком большим.
У и клиента и сервера есть их собственное max_allowed_packet
переменная, так, если Вы хотите обработать большие пакеты,
следует увеличить эту переменную и в клиенте и в сервере.
Если Вы используете mysql клиентскую программу, ее значение по умолчанию max_allowed_packet
переменная составляет 16 МБ. Чтобы установить большее значение, запустите mysql как это:
shell> mysql --max_allowed_packet=32M
Это устанавливает пакетный размер в 32 МБ.
Значение по умолчанию сервера max_allowed_packet
значение составляет 1 МБ. Можно увеличить это, если сервер
должен обработать большие запросы (например, если Вы работаете с большим BLOB
столбцы). Например, чтобы установить переменную в 16 МБ, запустите
сервер как это:
shell> mysqld
--max_allowed_packet=16M
Можно также использовать файл опции, чтобы установить max_allowed_packet
. Например, чтобы установить размер для сервера к 16 МБ,
добавьте следующие строки в файле опции:
[mysqld]max_allowed_packet=16M
Безопасно увеличить значение этой переменной, потому что дополнительная память выделяется только при необходимости. Например, mysqld выделяет больше памяти только, когда Вы выпускаете долгий запрос или когда mysqld должен возвратить большую строку результата. Маленькое значение по умолчанию переменной является предосторожностью, чтобы поймать неправильные пакеты между клиентом и сервером и также гарантировать, что Вы не исчерпываете память при использовании больших пакетов случайно.
Можно также получить странные проблемы с большими пакетами, если Вы используете большой BLOB
значения, но не предоставили mysqld доступ к достаточному количеству памяти, чтобы обработать
запрос. Если Вы подозреваете дело обстоит так, попытайтесь добавить ulimit-d
256000 к началу mysqld_safe сценария и перезапуска mysqld.