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

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

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

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

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

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

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

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

Ответ 1

max_allowed_packet установлен в mysql config, а не на стороне php

[mysqld]
max_allowed_packet=16M 

Вы можете увидеть это curent значение в 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, он сработал.

Ответ 2

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

$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; nonmultiples округляются до ближайшего кратного.

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

Ответ 3

перейти cpanel и войти в качестве главного администратора или супер администратора

  • найдите SSH/Shell Access (вы найдете под вкладкой security cpanel)

  • теперь укажите имя пользователя и пароль супер администратора как root или whatyougave

    note: do not give any username, cos, it needs permissions
    
  • после вашего типа консоли

    введите 'mysql' и нажмите enter, чтобы найти себя в

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

    mysql> set global net_buffer_length=1000000;

    Query OK, 0 строк (0.00 sec)

    mysql> set global max_allowed_packet=1000000000;

    Запрос ОК, 0 строк, затронутых (0.00 сек)

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