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


8

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

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

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

답변:


7

"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.ccsql / intem_strfunc.cc 를 참조하십시오.

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


게시 해 주셔서 감사합니다. "패킷"은 "IP 패킷"을 의미한다고 암시하는 것 같습니다.
랜돌프 리차드슨

좋은 대답입니다. 나는 이것이 실제 답변에 가까워지는 것 같아요. (여전히 이것이 이것이 IP 패킷을 언급하는 것은 아니라고 확신합니다. IP는 어디에도 언급되어 있지 않으며 65535 바이트가 조각난 IP 패킷에 대한 실제 한계라고 생각합니다.)
Plutor

1

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

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

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


그것은 실제로 내 질문에 대답하지 않습니다. 이 맥락에서 패킷은 무엇입니까? 실제로 IP 패킷입니까? 잘못된 데이터를 포착하는 간단한 바이트 제한보다 더 좋은 방법이 있습니까?
Plutor

"패킷"을 다른 것으로 정의하지 않는 한 (문서에서 보이지 않는 것처럼) "패킷"이 IP 패킷을 참조하는 것이 합리적입니다.
랜돌프 리차드슨

내가 가진 책에서 정의를 찾았습니다. 나는 그 책의 발췌문을 내 대답으로 추가했습니다.
RolandoMySQLDBA
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.