понедельник, 6 декабря 2010 г.

Ошибка Got a packet bigger than 'max_allowed_packet' bytes

   При попытке "поднять" архив База Данных увидел сообщение об ошибке: Got a packet bigger than 'max_allowed_packet' bytes
   База данных содержала таблицы в которых были blob поля. Вся проблема оказалась в параметре max_allowed_packet он был равен 1 Мб у меня на сервере, а blob поля которые были в запросе имели размер больше 1 Мб.
   Для просмотра значения max_allowed_packet я выполнил следующий запрос:
show variables like 'max_allowed_packet';
Результат мы получим в байтах (Рис.1).
 Рис. 1
   Для изменения я выполнил следующие действия (У меня Windows Vista и MySQL Server 5.1):
  1. Найти файл my.ini (Для Linux нужен файл my.cnf)(По умолчанию находится в каталоге, в который устанавливался сервер(у меня С:\Program Files\MySQL\MySQL Server 5.1\), или в папке Windows)
  2. Открыть его и изменить значение max_allowed_packet.Если у вас нет такой строчки - тогда найдите секцию [mysqld](у меня уже была создана и содержала значение порта port=3306) и допишите следующею строчку
  3. max_allowed_packet = 32M
    У вас может быть больше или меньше 32, мне было достаточно 32 Мб. Сохраняем файл my.ini
  4. Теперь нужно перезагрузить сервер MySQL для того чтобы все изменения вступили в силу (Для перезагрузки нужно выполнить следующие действия Пуск->Панель управления->Администрирование->Службы ищем в списке MySQL и нажимаем на нем правой кнопкой мыши, после чего появится меню в котором нужно выбрать Свойства(Рис.2). После чего откроется окно "Свойства" с помощью которого можно осуществить перезагрузку службы MySQL сервера. Для перезагрузки нужно нажать кнопку "Остановить"(пункт 1 Рис.3) после остановки сервера станет доступной кнопку "Запустить", теперь нужно нажать кнопку "Запустить"(пункт 2 Рис.3) Все сервер перезагружен, теперь нажимаем "ОК"(пункт 3 Рис.3)).
 Рис. 2
Рис. 3
   Теперь нам нужно проверить вступило ли все в силу или нет, для этог нам нужно выполнить запрос, который мы выполняли в начале:
show variables like 'max_allowed_packet';
  Результат запроса: 33554432байта что в свою очередь равно нашим 32Мб, которые мы установили в файле настроек.

PS: Статья была описана как заметка на будущее. Информация была частично с официального сайта MySQL.

3 комментария:

Анонимный комментирует...

Спасибо Вам огромное. Вес нэт перерыл. Всё пишут как для спецов.

Анонимный комментирует...

Спасибо! Помогло!

Анонимный комментирует...

Резернавя копия биртикса не хотела распаковываться на денвере. Ваш совет помог, все заработало:) Спасибо!