중복 가능성:
MySQL 오류 1153 – ‘max_allowed_packet’ 바이트보다 큰 패킷을 받았습니다.
안녕하세요. 에러가 발생하고 있습니다.
[1153] Got a packet bigger than 'max_allowed_packet'bytes
그러나 나는 내 소스 코드를 변경하지 않았고 호스팅에서는 서버 설정을 변경하지 않았다고 합니다.
무슨 일이 있었는지 모르겠어요.하지만 나는 그 이유를 찾으려고 노력하고 있다.
확인방법max_allowed_packet
mysql 변수 by php 스크립트?
소스코드로 설정할 수 있을까요?
질문에 대한 답변
max_allowed_packet
php 쪽이 아닌 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 및 메인 관리자 또는 슈퍼 관리자로 로그인
SSH/Shell Access를 찾습니다(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.00초)에 해당하는 0행
mysql> set global max_allowed_packet=1000000000;
Query OK(0.00초)에 해당하는 0행
업로드하고 즐기세요!!!