Access denied
MySQL server has gone away
Can't connect to [local] MySQL server
Host '...' is blocked
Too many connections
Some non-transactional changed tables couldn't be rolled back
Out of memory
Packet too large
The table is full
Can't create/write to file
Commands out of sync
Ignoring user
Table 'xxx' doesn't exist
Can't initialize character set xxx
File not found
)Buy this Reference Manual in softcover from Barnes & Noble!
Packet too large
Когда клиент MySQL или сервер mysqld
получают пакет с размерами, превышающими max_allowed_packet
байтов, программа выдает ошибку Packet too large
и закрывает соединение.
В MySQL 3.23 размер самого большого возможного пакета составляет 16 Mб (из-за ограничений клиент-серверного протокола). В MySQL 4.0.1 и выше размер пакета ограничивается только количеством имеющейся на сервере памяти (вплоть до теоретического максимума в 2 Гб).
Коммуникационный пакет - это одна команда SQL, посылаемая серверу, или одна строка, посылаемая клиенту.
Когда клиент MySQL или сервер mysqld
получают пакет, размеры которого превышают max_allowed_packet
байтов, программа выдает ошибку Packet too large
и закрывает соединение. Если коммуникационный пакет слишком велик, то в некоторых клиентах может быть выдана ошибка Lost connection to MySQL server during query
.
Отметим, что и клиент, и сервер имеют свои собственные переменные max_allowed_packet
. Если требуется обрабатывать большие пакеты, то эту переменную необходимо увеличить как для клиента, так и для сервера.
Увеличение переменной не опасно, поскольку память выделяется только при необходимости; эта переменная скорее является мерой предосторожности для "отлавливания" неправильных пакетов между клиентом и сервером, а также для того, чтобы предупредить ситуацию нехватки памяти, вследствие случайного использования больших пакетов.
Если используется клиент mysql
, то можно задать больший буфер, запустив клиент посредством mysql --set-variable=max_allowed_packet=8M
. Для других клиентов существуют собственные методы установки этой переменной.
Для установки max_allowed_packet
большего размера в mysqld
можно также использовать файл опций. Например, если в таблице предполагается хранить значение типа MEDIUMBLOB
максимальной длины, то нужно запускать сервер с опцией set-variable=max_allowed_packet=16M
.
При использовании больших пакетов могут также возникать непредсказуемые проблемы, если вы работаете с большими значениями типа BLOB
, и mysqld
не был предоставлен доступ к достаточному объему памяти для обработки запроса. Если есть подозрение, что дело в этом, попробуйте добавить ulimit -d 256000
в начале скрипта safe_mysqld
и перезапустить mysqld
.
Add your own comment.