Как проверить и установить переменную max_allowed_packet mysql

Возможный дубликат:
Ошибка MySQL 1153 - получен пакет, размер которого превышает байты 'max_allowed_packet'

Привет, я получаю ошибку:

[1153] Got a packet bigger than 'max_allowed_packet'bytes

но я не внес никаких изменений в свой исходный код и хостинг заявляет, что они не сделали никаких изменений в настройках сервера.

Я не знаю, что случилось. Но я пытаюсь найти причину.

итак, как проверить max_allowed_packet Переменная mysql скриптом php?

и это возможно установить его в исходном коде?

3 ответа

Решение

max_allowed_packetустанавливается в конфиге mysql, а не на стороне php

[mysqld]
max_allowed_packet=16M 

Вы можете увидеть его текущее значение в MySQL следующим образом:

SHOW VARIABLES LIKE 'max_allowed_packet';

Вы можете попробовать изменить его следующим образом, но вряд ли это сработает на виртуальном хостинге:

SET GLOBAL max_allowed_packet=16777216;

Вы можете прочитать об этом здесь http://dev.mysql.com/doc/refman/5.1/en/packet-too-large.html

РЕДАКТИРОВАТЬ

[Mysqld] необходимо сделать max_allowed_packet работает, начиная с версии MySQL 5.5.

Недавно установил экземпляр на AWS EC2 с поисковой системой Drupal и Solr, для чего потребовалось 32M max_allowed_packet, Если вы установите значение под [mysqld_safe] (настройки по умолчанию поставляются с установкой mysql) в /etc/my.cnf, это не сработало. Я не копался в проблеме. Но после того, как я изменил его на [mysqld] и перезапустил mysqld, все заработало.

Следующий PHP работал для меня (используя расширение MySQL, но запросы должны быть такими же для других расширений):

$db = new mysqli( 'localhost', 'user', 'pass', 'dbname' );
// to get the max_allowed_packet
$maxp = $db->query( 'SELECT @@global.max_allowed_packet' )->fetch_array();
echo $maxp[ 0 ];
// to set the max_allowed_packet to 500MB
$db->query( 'SET @@global.max_allowed_packet = ' . 500 * 1024 * 1024 );

Так что, если у вас есть запрос, который вы ожидаете довольно длинный, вы можете быть уверены, что mysql примет его примерно так:

$sql = "some really long sql query...";
$db->query( 'SET @@global.max_allowed_packet = ' . strlen( $sql ) + 1024 );
$db->query( $sql );

Обратите внимание, что я добавил дополнительные 1024 байта к длине строки, потому что согласно инструкции,

Значение должно быть кратно 1024; немножки округляются до ближайшего кратного.

Надеемся, что это должно установить размер max_allowed_packet достаточно большим, чтобы обработать ваш запрос. Я не пробовал это на общем хосте, поэтому применима та же оговорка, что и к @Glebushka.

Зайдите в cpanel и войдите как Главный Администратор или Супер Администратор

  1. найти SSH/Shell Access (вы найдете на вкладке безопасности cpanel)

  2. Теперь укажите имя пользователя и пароль Супер Администратора как root или же whatyougave

    note: do not give any username, cos, it needs permissions
    
  3. как только вы в консоли типа

    тип ' mysql и нажмите Enter, теперь вы попадаете в

    mysql> /* и введите здесь как */

    mysql> set global net_buffer_length=1000000;

    Запрос в порядке, затронуто 0 строк (0, 00 с)

    mysql> set global max_allowed_packet=1000000000;

    Запрос в порядке, затронуто 0 строк (0, 00 с)

Теперь загружай и наслаждайся!!!

Другие вопросы по тегам