MySQL“max_allowed_packet”설정은 실제로 무엇을 제어합니까? than “max_allowed_packet” bytes

오류가 mysqldump충분하지 않은 오류로 인해 지난 4 시간 동안 데이터베이스 문제를 정리 했습니다. 다음과 같은 오류가 발생했습니다.

mysqldump: Error 2020: Got packet bigger than "max_allowed_packet" bytes when dumping table "search_dataset" at row: 68014

도대체 그 설정은 무엇입니까? 지금 32M으로 설정했기 때문에 IP 패킷 크기는 아닙니다. 왜 존재합니까?



답변

“MySQL 내부 이해”(ISBN 0-596-00957-7)의 99 페이지 에 따르면 , 1-3 항을 설명합니다.

MySQL 네트워크 통신 코드는 쿼리가 항상 합리적으로 짧다는 가정하에 작성되었으므로 서버에서 하나의 청크로 서버로 보내고 처리 할 수 ​​있습니다 .이를 MySQL 용어 로 패킷 이라고합니다 . 서버는 패킷을 저장하기 위해 임시 버퍼를위한 메모리를 할당하고이를 완전히 맞추기에 충분한 요청을합니다. 이 아키텍처는 서버에 메모리가 부족하지 않도록주의해야합니다.이 옵션은 패킷 크기를 제한합니다.

이 옵션과 관련하여 관심있는 코드는
sql / net_serv.cc에 있습니다. 한 번 봐 가지고 my_net_read ()를 , 다음의 호출에 따라 my_real_read을 () 와에 특히주의
) (net_realloc .

이 변수는 또한 많은 문자열 기능의 결과 길이를 제한합니다. 자세한 내용은 sql / field.cc
sql / intem_strfunc.cc 를 참조하십시오.

이것은 아마도 내가 본 max_allowed_packet에 대한 가장 완벽한 설명 일 것입니다. 나는 그 책에서 바로 그 3 개의 문단을 입력했다.


답변

문서는 여기에 자세히 설명되어 있습니다.

“한 패킷 또는 생성 / 중간 문자열의 최대 크기. …”

또한 BLOB에 대한 설명과이 설정이 BLOB에 어떻게 연결되는지 설명합니다.