การตั้งค่า MySQL“ max_allowed_packet” จริง ๆ แล้วควบคุมอะไร?


8

เราได้ทำการแก้ไขปัญหาฐานข้อมูลในช่วงสี่ชั่วโมงที่ผ่านมาด้วยความเสียหายmysqldumpที่เกิดจากข้อผิดพลาดที่ไม่เพียงพอ เราได้รับข้อผิดพลาดเหล่านี้:

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

การตั้งค่านั้นทำอะไร เห็นได้ชัดว่าไม่ใช่ขนาดแพ็คเก็ต IP เนื่องจากฉันตั้งไว้ที่ 32M ตอนนี้ ทำไมมันมีอยู่?

คำตอบ:


7

ตามหน้า 99 ของ "การทำความเข้าใจกับ MySQL ภายใน" (ไอ 0-596-00957-7) ต่อไปนี้คือย่อหน้าที่ 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 ย่อหน้าเหล่านั้นจากหนังสือ


ขอบคุณสำหรับการโพสต์ที่ ดูเหมือนว่าคำใบ้ "แพ็กเก็ต" หมายถึง "แพ็คเก็ต IP"
Randolf Richardson

คำตอบที่ดี ฉันเดาว่านี่ใกล้เคียงกับที่ฉันได้รับคำตอบจริง (ฉันยังค่อนข้างแน่ใจว่านี่ไม่ได้หมายถึงแพ็คเก็ต IP มันไม่ได้พูดถึง IP ที่ใดก็ได้และฉันเชื่อว่า 65535 ไบต์มักเป็นขีด จำกัด ของโลกแห่งความเป็นจริงสำหรับแพ็คเก็ต IP ที่กระจัดกระจาย)
Plutor

1

เอกสารอธิบายรายละเอียดทั้งหมดได้ที่นี่:

"ขนาดสูงสุดของหนึ่งแพ็คเก็ตหรือสตริงใด ๆ ที่สร้างขึ้น / ระดับกลาง ... "

เอกสารประกอบไปยังที่อยู่ BLOBs และวิธีการตั้งค่านี้เชื่อมโยงกับพวกเขา


แต่นั่นไม่ได้ตอบคำถามของฉัน แพ็กเก็ตในบริบทนี้คืออะไร อันที่จริงมันเป็น IP แพ็คเก็ตหรือไม่? ไม่มีวิธีที่ดีกว่าการ จำกัด ไบต์ง่ายๆในการตรวจจับข้อมูลที่มีรูปแบบไม่ถูกต้องหรือไม่?
พลูโต

นอกจากว่าพวกเขากำหนด "แพ็คเก็ต" ว่าเป็นสิ่งอื่น (ซึ่งพวกเขาไม่ปรากฏในเอกสารประกอบ) ก็มีเหตุผลที่คาดว่า "แพ็คเก็ต" หมายถึง IP แพ็คเก็ต
Randolf Richardson

ฉันพบคำจำกัดความในหนังสือที่ฉันมี ฉันเพิ่มข้อความที่ตัดตอนมาจากหนังสือเล่มนี้เป็นคำตอบของฉัน
RolandoMySQLDBA
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.