max_allowed_mysql 변수 확인 및 설정 방법 [max]

중복 가능성:
MySQL 오류 1153 – ‘max_allowed_packet’ 바이트보다 큰 패킷을 받았습니다.

안녕하세요. 에러가 발생하고 있습니다.

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

그러나 나는 내 소스 코드를 변경하지 않았고 호스팅에서는 서버 설정을 변경하지 않았다고 합니다.

무슨 일이 있었는지 모르겠어요.하지만 나는 그 이유를 찾으려고 노력하고 있다.

확인방법max_allowed_packetmysql 변수 by php 스크립트?

소스코드로 설정할 수 있을까요?



질문에 대한 답변



max_allowed_packetphp 쪽이 아닌 mysql 구성으로 설정되어 있습니다.

[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 Search Engine을 사용하여 인스턴스를 셋업하여 32M이 필요했습니다.max_allowed_packet. 값을 설정했을 경우[mysqld_safe]/etc/my.cnf 의 mysql 인스톨에 부속된 디폴트 설정입니다만, 동작하지 않았습니다.나는 그 문제를 파고들지 않았다.그런데 이렇게 바꾸고 나서[mysqld]mysqld를 다시 시작했는데, 작동했어요




다음 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의 배수여야 합니다.비배수는 가장 가까운 배수로 반올림됩니다.

그러면 쿼리를 처리하기에 충분한 크기의 max_allowed_packet이 설정될 것입니다.공유 호스트에서는 사용해 본 적이 없기 때문에, @Glebushka와 같은 경고가 적용됩니다.




goto 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;

    Query OK(0.00초)에 해당하는 0행

    mysql> set global max_allowed_packet=1000000000;

    Query OK(0.00초)에 해당하는 0행

업로드하고 즐기세요!!!