mysqldump Error 2013


18

ฉันมีฐานข้อมูลติดตั้งไว้แล้วและฉันต้องการสำรองข้อมูลใน mysql ปัญหาmysqldumpล้มเหลวในการส่งออกตาราง 'maia_mail'

# mysqldump -u root -p maia > maia.sql
mysqldump: Error 2013: Lost connection to MySQL server during query when dumping table `maia_mail` at row: 15

มันทำงานน้อยกว่า 30 วินาทีและได้รับข้อผิดพลาดตามข้างต้น

ขนาดรวมของฐานข้อมูลคือ 1.3GB โดยมีตาราง maia_mail เป็น 1.0GB

ในmy.cnfชุดนี้มี:

[mysqld]
max_allowed_packet      = 1300M
[mysqldump]
max_allowed_packet      = 1300M

โปรดแนะนำหรือให้คำแนะนำเกี่ยวกับวิธีการถ่ายโอนฐานข้อมูลหรือไม่


พื้นที่ว่าง 170GB มันก็เหมือนกันไม่ว่าฉันจะถ่ายโอนข้อมูลไปยังเครื่อง db อยู่หรืออยู่ในระยะไกล
garfink

สำเนาของอีเมลดังนั้นข้อมูล varchar ส่วนใหญ่
garfink

1300M เป็นการเปลี่ยนแปลงล่าสุดปัญหาเกิดขึ้นเมื่อตั้งค่าเป็น 16M เริ่มต้นด้วย เซิร์ฟเวอร์ถูกรีสตาร์ทหลังจากเปลี่ยนเป็น 1300M
garfink

ฉันตั้งกลับเป็นค่าเริ่มต้น 16M ดัมพ์ผลลัพธ์ในข้อผิดพลาดเดียวกัน 2013 ในแถวที่ 15
garfink

คำตอบ:


13

ฉันสามารถแนะนำการเปลี่ยนแปลงการตั้งค่า InnoDB ได้ง่ายซึ่งอาจเป็นภาระหนักเพียงเล็กน้อยเพื่อให้ mysqldump ทำงานได้ คุณอาจไม่ชอบสิ่งที่ฉันแนะนำเกี่ยวกับ แต่ฉันเชื่อว่ามันเป็นตัวเลือกที่ดีที่สุดของคุณ (เท่านั้น) นี่มันไป:

คำแนะนำ # 1: ปิดใช้งานส่วนแทรกเพิ่มเติม

การตั้งค่าเริ่มต้นสำหรับ mysqldump จะรวมกันเป็นร้อยหรือพันแถวด้วยกันใน INSERT เดียว สิ่งนี้เรียกว่า INSERT แบบขยาย มันเป็นเรื่องที่ก่อให้เกิดการใช้จ่ายเกินกว่าเพียงแค่บาง max_allowed_packet

ฉันตอบกลับโพสต์ในSep 01, 2011( เซิร์ฟเวอร์ MySQL ได้หายไปขัดขวางการนำเข้าทิ้งขนาดใหญ่ ) ที่ฉันพูดคุยทำสิ่งเดียวกันสำหรับการนำเข้า mysqldump ขนาดใหญ่ ฉันเชื่อว่าการปิดใช้งาน INSERT แบบขยายจะช่วยในการสร้าง mysqldump ที่ยุ่งยากเช่นกัน

mysqldump -u root --skip-extended-insert -p maia > maia.sql

ข่าวร้าย: สิ่งนี้จะสร้างคำสั่ง INSERT สำหรับแต่ละแถว สิ่งนี้จะเพิ่มเวลาที่ใช้ในการแสดง mysqldump อย่างแน่นอน ดังนั้นมันจะเพิ่มขึ้นตามเวลาที่ใช้ในการโหลดซ้ำ (อาจมีค่าเท่ากับ 10-100

ฉันได้พูดคุยskip-extended-insertก่อน

คำแนะนำ # 2: การถ่ายโอนข้อมูลไบนารีเป็นเลขฐานสิบหก (ตัวเลือก)

เพื่อให้ข้อมูลไบนารีของ mysqldump เป็นแบบพกพาได้มากกว่าไบต์ให้ถ่ายโอนข้อมูลดังกล่าวเป็นฐานสิบหก

mysqldump -u root --skip-extended-insert --hex-blob -p maia > maia.sql

ข่าวร้าย: มันจะขยาย mysqldump อีกเล็กน้อย

ให้มันลอง !!!

หมายเหตุด้านข้าง: ขนาดสูงสุดของ max_allowed_packet คือ 1G


5

ฉันยังได้รับข้อผิดพลาดเดียวกันในขณะที่พยายามถ่ายโอนฐานข้อมูล 12 GB ฉันทำการเปลี่ยนแปลงต่อไปนี้เพื่อให้ทำงานได้

  1. กำหนดค่า max_allowed_packet เป็น 1024M
  2. กำหนดค่า net_read_timeout เป็น 7200
  3. กำหนดค่า net_write_timeout เป็น 7200

หมายเหตุ: ฉันรู้ว่าค่าหมดเวลาใช้งานสูงเกินไป (7200 วินาทีเช่น 20 ชั่วโมง) แต่ฉันก็แค่ตั้งใจแยกโอกาส ฉันอยู่ในกระบวนการหาค่าการหมดเวลาที่เหมาะสม


2
สำหรับผู้ใช้รายอื่น: สิ่งเหล่านี้เป็นการตั้งค่าบนเซิร์ฟเวอร์ไม่ใช่ในไฟล์ mysqldump config นอกจากนี้ 7200 วินาทีคือ 2 ชั่วโมงไม่ใช่ 20.
ทำเครื่องหมาย

ตั้งค่า net_read_timeout ทั่วโลก = 120; ตั้งค่า net_write_timeout ทั่วโลก = 900; ทำงานให้ฉัน
kasi


1

ตรวจสอบให้แน่ใจว่าคุณมีหน่วยความจำเพียงพอที่จะถ่ายโอนข้อมูล โปรดตรวจสอบหน่วยความจำในขณะที่ทำการถ่ายโอนข้อมูลเช่นใช้คำสั่งเช่นนี้:

free -mt

หากหน่วยความจำของคุณหมดในขณะถ่ายโอนข้อมูลคุณจะได้รับ

mysqldump: Error 2013: การเชื่อมต่อขาด


1

ฉันพบ:

--max-allowed-packet=1G --net-buffer-length=32704

... ทำให้มันใช้งานได้ก่อนหน้านี้ (ไม่น่าเชื่อถือ) แม้ว่าจะมีการเปลี่ยนแปลงการหมดเวลาการอ่าน / เขียนสุทธิ, keepalives TCP ฯลฯ

การmax_allowed_packetตั้งค่าเพียงอย่างเดียวไม่สามารถใช้งานได้ดังนั้นอาจไม่จำเป็นถ้าnet_buffer_lengthใช้ - ralph-bolton

การปรับเปลี่ยนmax-allowed-packetและnet-buffer-lengthดูเหมือนจะดีกว่าการปิดใช้งานการแทรกเพิ่มเติม - kristofer

ดูเพิ่มเติมสิ่งที่ max_allowed_packet มีขนาดใหญ่พอและทำไมฉันต้องเปลี่ยนมัน

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