ข้อผิดพลาดของ MySQL 1153 - มีแพ็คเก็ตที่ใหญ่กว่า 'max_allowed_packet' ไบต์


430

ฉันกำลังนำเข้าดัมพ์ MySQL และรับข้อผิดพลาดต่อไปนี้

$ mysql foo < foo.sql 
ERROR 1153 (08S01) at line 96: Got a packet bigger than 'max_allowed_packet' bytes

เห็นได้ชัดว่ามีสิ่งที่แนบมาในฐานข้อมูลซึ่งทำให้แทรกขนาดใหญ่มาก


นี่คือเครื่องท้องถิ่นของฉัน, Mac ที่ติดตั้ง MySQL 5 จากแพ็คเกจ MySQL

ฉันmax_allowed_packetจะเปลี่ยนการนำเข้าดัมพ์ได้ที่ไหน

มีอะไรอีกที่ฉันควรตั้งค่า?

เพิ่งทำงานmysql --max_allowed_packet=32M …ส่งผลให้เกิดข้อผิดพลาดเดียวกัน


เป็นไปได้ที่ซ้ำกันของวิธีเปลี่ยนขนาด
max_allowed_packet

@Muleskinner คำถามนี้ถูกโพสต์เมื่อ 3 ปีก่อนที่คุณพูดถึงและฉันจะชี้ให้คุณเห็น 4 ปีหลังจากความคิดเห็นของคุณ : p
tiomno

2
Webyog.com ลิงก์ใช้งานไม่ได้: 404
Pathros

ที่นี่ข้อผิดพลาดที่คล้ายกัน "แพ็คเก็ตสำหรับการค้นหามีขนาดใหญ่ (5526600> 1048576)" เกิดจากการป้อนรหัสผ่านผิดเมื่อเชื่อมต่อกับฐานข้อมูล MySQL โดยใช้ DataGrip 2016.1 โดย JetBrains และแก้ไขเมื่อแก้ไขแล้ว (ใช้รหัสผ่านที่ถูกต้อง สอดคล้องกับผู้ใช้ฐานข้อมูล MySQL)
nyedidikeke

คำตอบ:


589

คุณอาจต้องเปลี่ยนทั้งไคลเอนต์ (คุณกำลังเรียกใช้เพื่อทำการนำเข้า) และ daemon mysqld ที่กำลังทำงานและยอมรับการนำเข้า

สำหรับลูกค้าคุณสามารถระบุไว้ในบรรทัดคำสั่ง:

mysql --max_allowed_packet=100M -u root -p database < dump.sql

นอกจากนี้ให้เปลี่ยนไฟล์ my.cnf หรือ my.iniภายใต้ส่วน mysqld และตั้งค่า:

max_allowed_packet=100M

หรือคุณสามารถเรียกใช้คำสั่งเหล่านี้ในคอนโซล MySQL ที่เชื่อมต่อกับเซิร์ฟเวอร์เดียวกัน:

set global net_buffer_length=1000000; 
set global max_allowed_packet=1000000000;

(ใช้ค่าขนาดใหญ่มากสำหรับขนาดแพ็คเก็ต)


ฉันมีเซิร์ฟเวอร์ที่มี RAM ขนาด 16 GB เป็นความคิดที่ไม่ถูกต้องหรือไม่ที่จะตั้งค่าmax_allowed_packetเป็น 100 MB
Webnet

11
FYI - ช่วยให้ฉันแก้ไขข้อผิดพลาดที่แตกต่าง - "เซิร์ฟเวอร์ # 2006 หายไปแล้ว"
itsho

37
โปรดทราบว่าการใช้ "set global" จะใช้งานได้จนกว่าบริการ mysql ครั้งต่อไปจะรีสตาร์ท
Will Shaver

2
ข้าม "กำหนดทั่วโลก" และสุดท้าย ";" เมื่อเพิ่มค่าเหล่านี้ไปยังไฟล์ my.ini หรือ my.cnf ตัวอย่าง: "net_buffer_length = 1000000" ใน my.conf
Rustavore

3
บน CentOS 5 my.cnf ตั้งอยู่ที่
/etc/my.cnf

124

ดังที่ michaelpryor กล่าวคุณต้องเปลี่ยนทั้งไคลเอนต์และเซิร์ฟเวอร์ daemon mysqld

โซลูชันของเขาสำหรับบรรทัดคำสั่งไคลเอนต์ดี แต่ไฟล์ ini ไม่ได้ทำเคล็ดลับขึ้นอยู่กับการกำหนดค่า

ดังนั้นให้เปิดเทอร์มินัลพิมพ์ mysql เพื่อรับพรอมต์ mysql และออกคำสั่งเหล่านี้:

set global net_buffer_length=1000000; 
set global max_allowed_packet=1000000000; 

เปิดการแจ้งเตือน mysql ไว้และรันการประมวลผล SQL บรรทัดคำสั่งของคุณบนเทอร์มินัลที่สอง ..


2
แก้ไขปัญหาให้ฉัน; การนำเข้าที่ฉันทำนั้นเป็นครั้งเดียวและฉันไม่สามารถเปลี่ยนการกำหนดค่าได้อย่างง่ายดาย มันใช้งานได้ดีมาก : D
Rob Howard

39

สิ่งนี้สามารถเปลี่ยนแปลงได้ในmy.iniไฟล์ของคุณ(บน Windows ซึ่งอยู่ใน \ Program Files \ MySQL \ MySQL Server) ใต้ส่วนเซิร์ฟเวอร์ตัวอย่างเช่น:

[mysqld]

max_allowed_packet = 10M

5
สำหรับ mac ไฟล์จะอยู่ที่อื่นอย่างชัดเจน
kch

2
แน่นอน แต่การกำหนดค่ายังคงอยู่ที่ใดที่หนึ่งแม้ว่าฉันจะไม่ทราบตำแหน่งที่แน่นอน
GHad

สำหรับฉันใน Fedora 20 กับ MariaDB การวางการตั้งค่านั้นไว้ที่ส่วนท้ายของ /etc/my.cnf.d/server.cnf ก็ทำการหลอกลวง ฉันต้องรีสตาร์ทบริการแน่นอน ... sudo nano systemctl รีสตาร์ท mariadb.service
Ray Foss

ไฟล์ดังกล่าวน่าจะเป็น "my.cnf" และบนระบบ nix ซึ่งโดยปกติจะอยู่ใน / etc / หรือ / usr / local / etc เมื่อคุณแก้ไขให้แน่ใจว่าได้รีสตาร์ทเซิร์ฟเวอร์ mysql เพื่อใช้การเปลี่ยนแปลง
Chris

17

my.cnf อีกครั้งบน Mac OS X เมื่อใช้ MySQL จากการกระจายแพคเกจ mysql.com dmg

ตามค่าเริ่มต้น my.cnf ไม่พบที่ใดเลย

คุณต้องคัดลอกหนึ่ง/usr/local/mysql/support-files/my*.cnfไปและเริ่มต้นใหม่/etc/my.cnf mysqld(ซึ่งคุณสามารถทำได้ในบานหน้าต่างการตั้งค่า MySQL ถ้าคุณติดตั้ง)


การกำหนดค่าเริ่มต้นในสถานที่สำหรับ OSX ดูเหมือนจะเป็น my-medium.cnf แม้ว่าขนาด max_allowed_packet จะเหมือนกันใน my-large.cnf ... จนกว่าคุณจะเริ่มเปลี่ยนสิ่งต่าง ๆ :)
Chris Burgess

ในกรณีของฉัน /usrl/local/mysql/my.cnf ไม่ทำงานจนกว่าฉันจะคัดลอกไปยัง /etc/my.cnf
VG

14

ใน etc / my.cnf ลองเปลี่ยน max_allowed _packet และ net_buffer_length เป็น

max_allowed_packet=100000000
net_buffer_length=1000000 

หากไม่ได้ผลให้ลองเปลี่ยนเป็น

max_allowed_packet=100M
net_buffer_length=100K 

12

การแก้ไขคือการเพิ่ม max_allowed_packet ของ MySQL daemon คุณสามารถทำสิ่งนี้กับ daemon ที่กำลังทำงานอยู่โดยลงชื่อเข้าใช้ในชื่อ Super และรันคำสั่งต่อไปนี้

# mysql -u admin -p

mysql> set global net_buffer_length=1000000;
Query OK, 0 rows affected (0.00 sec)

mysql> set global max_allowed_packet=1000000000;
Query OK, 0 rows affected (0.00 sec)

จากนั้นนำเข้าดัมพ์ของคุณ:

gunzip < dump.sql.gz | mysql -u admin -p database

MySQL รุ่นไหนที่คุณใช้อยู่?
crmpicco

6

บน CENTOS 6 /etc/my.cnf ภายใต้ [mysqld] ส่วนไวยากรณ์ที่ถูกต้องคือ:

[mysqld]
# added to avoid err "Got a packet bigger than 'max_allowed_packet' bytes"
#
net_buffer_length=1000000 
max_allowed_packet=1000000000
#

4

ใช้max_allowed_packetตัวแปรที่ออกคำสั่งเช่น

mysql --max_allowed_packet=32M -u root -p database < dump.sql


2
ลองแล้วไม่ทำงาน การถ่ายโอนข้อมูลทั้งหมดใน 272mb ลองด้วยสูงสุดมากกว่า
kch

4

ไม่เกี่ยวข้องกับปัญหาของคุณเล็กน้อยดังนั้นนี่คือปัญหาสำหรับ Google

หากคุณไม่ได้ mysqldump SQL อาจเป็นไปได้ว่า SQL ของคุณเสีย

ฉันเพิ่งได้รับข้อผิดพลาดนี้โดยบังเอิญมีสตริงตามตัวอักษร unclosed ในรหัสของฉัน นิ้วเลอะเทอะเกิดขึ้น

นั่นเป็นข้อความแสดงข้อผิดพลาดที่ยอดเยี่ยมสำหรับการใช้งานสตริงที่ต้องขอบคุณสำหรับ MySQL นั้น!


1
ฉันยังได้รับข้อผิดพลาดนี้เนื่องจาก SQL ที่ใช้งานไม่ได้ โดยเฉพาะอย่างยิ่งตารางของฉันมีข้อ จำกัด เป็นโมฆะและรหัสของฉันแทรกค่าเป็นศูนย์ แทนที่จะให้ข้อผิดพลาดที่ให้ข้อมูลแก่ฉัน MySQL คืนmax_allowed_packetข้อผิดพลาด ถ้ามันจะช่วยคนในอนาคตฉันก็ต้องใช้ pandas APIdf.to_sql(...)
Alex Petralia

1

บางครั้งการตั้งค่าประเภท:

max_allowed_packet = 16M

ใน my.ini ไม่ทำงาน

ลองพิจารณา my.ini ดังต่อไปนี้:

set-variable = max_allowed_packet = 32M

หรือ

set-variable = max_allowed_packet = 1000000000

จากนั้นรีสตาร์ทเซิร์ฟเวอร์:

/etc/init.d/mysql restart

1

มีความเสี่ยงด้านความปลอดภัยที่มีmax_allowed_packetค่าสูงกว่าเนื่องจากผู้โจมตีสามารถผลักดันแพ็คเก็ตขนาดใหญ่ขึ้นและทำให้ระบบล่ม

ดังนั้นค่าที่เหมาะสมของmax_allowed_packetที่จะปรับและทดสอบ

ก็คือการที่ดีกว่าที่จะเปลี่ยนเมื่อจำเป็นต้องใช้(ใช้set global max_allowed_packet = xxx) กว่าจะมีมันเป็นส่วนหนึ่งของmy.iniหรือmy.conf


0

ฉันทำงานในสภาพแวดล้อมการโฮสต์ที่ใช้ร่วมกันและฉันได้โฮสต์เว็บไซต์ตาม Drupal ฉันไม่สามารถแก้ไขmy.iniไฟล์หรือmy.confไฟล์ได้

ดังนั้นฉันจึงลบตารางทั้งหมดที่เกี่ยวข้องCacheและด้วยเหตุนี้ฉันจึงสามารถแก้ไขปัญหานี้ได้ ฉันยังคงกำลังมองหาทางออกที่สมบูรณ์แบบ / วิธีจัดการกับปัญหานี้

แก้ไข - การลบตารางที่สร้างปัญหาให้ฉัน coz Drupal คาดหวังว่าตารางเหล่านี้ควรมีอยู่ ดังนั้นฉันจึงเทเนื้อหาของตารางเหล่านี้ซึ่งแก้ไขปัญหา


0

ข้อผิดพลาด:

ข้อผิดพลาด 1153 (08S01) ที่บรรทัด 6772: มีแพ็คเก็ตที่ใหญ่กว่า 'max_allowed_packet' ไบต์การดำเนินการล้มเหลวด้วย exitcode 1

ค้นหา:

SET GLOBAL max_allowed_packet=1073741824;
SHOW VARIABLES LIKE 'max_allowed_packet'; 

ค่าสูงสุด:

Default Value (MySQL >= 8.0.3)  67108864
Default Value (MySQL <= 8.0.2)  4194304
Minimum Value   1024
Maximum Value   1073741824

-1

ตั้งค่า max_allowed_packet ให้เท่าเดิม (หรือมากกว่า) เมื่อเทียบกับ mysqldump หากคุณไม่สามารถทำได้ให้ทำการถ่ายโอนข้อมูลอีกครั้งด้วยค่าที่น้อยลง

นั่นคือสมมติว่าคุณทิ้งมันด้วย mysqldump หากคุณใช้เครื่องมืออื่นคุณจะต้องใช้เครื่องมือของคุณเอง

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