“ เซิร์ฟเวอร์ MySQL หายไปแล้ว” เมื่อพยายามนำเข้าไฟล์ดัมพ์ขนาดใหญ่


11

ฉันกำลังพยายามนำเข้าไฟล์ดัมพ์ MySQL

ไฟล์ถูกสร้างขึ้นบนเซิร์ฟเวอร์ Linux ฉันกำลังพยายามนำเข้าบน windows

ฉันเข้าสู่บรรทัดคำสั่งแล้ววิ่ง:

SOURCE c:/dump.sql

แต่สิ่งนี้ดูเหมือนจะทำให้เกิดปัญหาชุดอักขระ (โดยเฉพาะกับเครื่องหมายคำพูดอัจฉริยะและเครื่องหมายวรรคตอนอื่น ๆ ที่ไม่ใช่มาตรฐาน)

มันแนะนำให้ฉันที่ฉันทำงาน:

mysql -u username -d dbase < c:\dump.sql

เมื่อฉันลองทำสิ่งนี้ฉันจะได้รับข้อผิดพลาด

ERROR 2006 (HY000) at line 149351: MySQL server has gone away

googling เล็กน้อยแนะนำว่านี่เป็นสิ่งที่เกี่ยวข้องกับสวิตช์ max_allowed_packet แต่ฉันได้ลองแล้ว แต่มันก็ใช้ไม่ได้ มีใครรู้บ้างไหมว่ามันจะเป็นเช่นไร?

หากใครมีข้อเสนอแนะเกี่ยวกับปัญหาชุดอักขระที่จะเป็นประโยชน์เช่นกัน


ข้อเสนอแนะใด ๆ [15 ตัวอักษรที่ต้องแสดงความคิดเห็น]
Mihai Limbăşan

คำตอบ:


23

สัญชาตญาณแรกของฉันหลังจากอ่านข้อความแสดงข้อผิดพลาดในชื่อคำถามคือเพื่อแนะนำให้เพิ่ม max_allowed_packet คุณพูดถึงว่าคุณได้ลองใช้ "สวิตช์" และยังไม่ทำงาน คุณสามารถยืนยันได้ว่าคุณได้แก้ไขไฟล์กำหนดค่าของเซิร์ฟเวอร์อย่างถูกต้องหรือไม่? การใช้ถ้อยคำของคุณทำให้ดูเหมือนว่าคุณได้ลองใช้มันเป็นสวิตช์บรรทัดคำสั่งบนบรรทัดคำสั่งไคลเอนต์ mysql.exe ซึ่งจะไม่ทำให้เซิร์ฟเวอร์เปลี่ยนพฤติกรรม

ดังนั้นในระยะสั้นสิ่งที่คุณควรลองทำคือค้นหาและแก้ไขไฟล์ my.cnf ที่เซิร์ฟเวอร์ของคุณใช้อยู่ ใน[mysqld]ส่วนแก้ไขการตั้งค่า max_allowed_packet เป็นอย่างเช่น

[mysqld]
max_allowed_packet=32M

อย่าลืมรีสตาร์ทเซิร์ฟเวอร์หลังจากแก้ไขการกำหนดค่า

ฉันเคยใช้ 32M (เป็นมูลค่าที่น่าขันมาก) เป็นตัวอย่าง เนื่องจากข้อความค้นหาของคุณดูเหมือน enourmous คุณควรลองใช้ค่านี้ (หรืออาจเป็น 64M หากคุณมี RAM เพียงพอ) เพื่อดูว่าทำงานได้หรือไม่

ตัวเลือกอื่นคือการปล่อยให้เซิร์ฟเวอร์ตามสภาพเดิมและปรับเปลี่ยนพฤติกรรมของไคลเอนต์ที่ใช้ในการสร้าง SQL dump บอกให้ จำกัด ขนาดของข้อความค้นหาแต่ละรายการให้ต่ำกว่า 1 MB - ซึ่งควรทำด้วย

สำหรับรายละเอียดเพิ่มเติมดูB.1.2.10 แพคเก็ตใหญ่เกินไปในคู่มือ MySQL


1
ใช่ฉันแค่ลองเปลี่ยนบรรทัดคำสั่ง เหตุผลที่ฉันคิดว่ามันมีผลกระทบคือมันให้ข้อผิดพลาดน้อยที่สุดที่อนุญาตให้แพ็คเก็ตเล็กเกินไปเมื่อฉันตั้งค่าให้เล็กลง ฉันจะลองข้อเสนอแนะของคุณในวันจันทร์ ขอบคุณ
Jeremy French

ไม่เป็นไร - ฉันเกือบจะแน่ใจว่ามันใช้งานได้ น่าเสียดายที่ซอฟต์แวร์อื่น ๆ จำนวนมากที่เขียนในช่วง 50 ปีที่ผ่านมาข้อความข้อผิดพลาดของ MySQL มีแนวโน้มที่จะดูดและทำให้เข้าใจผิดหากคุณไม่คุ้นเคยกับวิธีที่จิตใจของนักพัฒนาทำงาน :)
Mihai Limbăşan

ดีใจที่ได้ยินเช่นนั้น - ขอให้สนุก
Mihai Limbăşan

ยอดเยี่ยมมาก ฉันมีปัญหาเดียวกันนี้มาที่นี่เพื่อถามคำถามและปัง! แก้ไข @Mihai - ทุกสิ่งที่คุณได้รับเงิน มันไม่ได้ :) พอ
สตีเว่น Evers

วิธีนี้ช่วยเราได้เมื่อเราพบข้อผิดพลาดหลังจากย้าย MySQL จาก localhost ไปยังเซิร์ฟเวอร์ระยะไกล ขอบคุณมาก!
Lea Cohen

1

บน MySQL 5.7.24 เป็นเพราะการตั้งค่าเก่าจาก MySQL 5.6

sql_mode=STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION. 

ตัวเลือกด้านล่างมีผลบังคับใช้หาก SQL เวอร์ชันเดียวกัน 5.7.5 หรือสูงกว่า

sql_mode=TRADITIONAL

นอกจากนี้ยังมีสองพารามิเตอร์ max_allowed_packet ใน /etc/my.cnf อีกพารามิเตอร์หนึ่งคือ mysqldump โปรดรับทราบสิ่งเดียวกัน

max_allowed_packet = <1G>

การติดตั้งของฉันอยู่บน CentOS7


0

คุณสามารถเข้าถึงอินสแตนซ์ MySQL บนเซิร์ฟเวอร์ windows จากกล่อง linux หรือไม่

หากเป็นเช่นนั้นคุณสามารถเรียกใช้คำสั่งบนกล่อง linux โดยใช้สวิตช์ -hเพื่อเชื่อมต่อกับเซิร์ฟเวอร์บนกล่อง windows ได้หรือไม่

mysql -u username -d dbase -h <windows host> < dump.sql

สิ่งนี้อาจช่วยแก้ปัญหาชุดอักขระของคุณเนื่องจากคุณใช้ไคลเอนต์ Linux บนกล่องดั้งเดิมเพื่อนำเข้า (เพียงเดา)


0

บันทึก MySQL พูดว่าอะไร?

บางครั้งข้อผิดพลาดนี้จะถูกรายงานในไคลเอนต์หากมีข้อผิดพลาดที่ไม่สามารถแก้ไขได้บนเซิร์ฟเวอร์ นี่อาจเป็นตัวบ่งชี้ถึงความเสียหายของดิสก์ของตารางฐานข้อมูล


-1

บัญชีของคุณมีรหัสผ่านหรือไม่? บางทีคุณต้องเพิ่มสวิตช์ -p:

mysql -u username -p -d dbase < c:\dump.sql

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