Spec-Zone.ru › MySQL 5.7

B.3.2.8 Пакет слишком большой

Пакет связи — это отдельное SQL-предложение, отправляемое на сервер MySQL, отдельная строка, отправленная клиенту, или событие двоичного журнала, отправленное от сервера источника репликации на сервер-реплику.

Максимально возможный пакет, который может быть передан на сервер или с сервера MySQL 5.7, составляет 1 ГБ.

Когда MySQL-клиент или сервер mysqld получает пакет, больший, чем max_allowed_packet байт, он выдаёт ошибку и закрывает соединение. В некоторых клиентах вы также можете получить ошибку Lost connection to MySQL server during query, если пакет связи слишком большой.

И клиент, и сервер имеют собственную переменную max_allowed_packet, поэтому, если вы хотите обработать большие пакеты, вам необходимо увеличить эту переменную как в клиенте, так и на сервере.

Если вы используете программу-клиент mysql, её значение по умолчанию переменной max_allowed_packet составляет 16 МБ. Чтобы задать большее значение, запустите mysql следующим образом:

$> mysql --max_allowed_packet=32M

Это устанавливает размер пакета в 32 МБ.

Значение по умолчанию переменной max_allowed_packet сервера составляет 4 МБ. Вы можете увеличить это значение, если серверу необходимо обрабатывать большие запросы (например, если вы работаете с большими колонками BLOB). Например, чтобы установить переменную в 16 МБ, запустите сервер так:

$> mysqld --max_allowed_packet=16M

Вы также можете использовать файл опций для установки max_allowed_packet. Например, чтобы установить размер для сервера в 16 МБ, добавьте следующие строки в файл опций:

[mysqld]
max_allowed_packet=16M

Безопасно увеличивать значение этой переменной, так как дополнительная память выделяется только при необходимости. Например, mysqld выделяет больше памяти только тогда, когда вы выполняете длинный запрос или когда mysqld должен вернуть большую строку результата. Маленькое значение по умолчанию переменной — это мера предосторожности для обнаружения неправильных пакетов между клиентом и сервером, а также для предотвращения исчерпания памяти при случайном использовании больших пакетов.

Вы также можете столкнуться со странными проблемами с большими пакетами, если вы используете большие значения BLOB, но не предоставили mysqld доступ к достаточному объёму памяти для обработки запроса. Если вы подозреваете, что это так, попробуйте добавить ulimit -d 256000 в начало скрипта mysqld_safe и перезапустить mysqld.

© 2025 Oracle
Licensed under the GPLv2 License.
https://docs.oracle.com/cd/E17952_01/mysql-5.7-en/packet-too-large.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API