понедельник, 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 комментария:

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

    ОтветитьУдалить
  2. Спасибо! Помогло!

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

    ОтветитьУдалить