โดยทั่วไปแล้วข้อผิดพลาด:
ข้อผิดพลาด: 2006 ( CR_SERVER_GONE_ERROR) - เซิร์ฟเวอร์ MySQL หายไปแล้ว
หมายความว่าลูกค้าไม่สามารถส่งคำถามไปยังเซิร์ฟเวอร์
mysql นำเข้า
ในกรณีเฉพาะของคุณในขณะที่นำเข้าไฟล์ฐานข้อมูลผ่านmysqlหมายความว่าคำสั่งบางคำในไฟล์ SQL นั้นมีขนาดใหญ่เกินไปที่จะนำเข้าและไม่สามารถเรียกใช้งานบนเซิร์ฟเวอร์ดังนั้นไคลเอ็นต์จึงล้มเหลวในข้อผิดพลาดที่เกิดขึ้นครั้งแรก
ดังนั้นคุณมีความเป็นไปได้ดังต่อไปนี้:
เพิ่มตัวเลือกบังคับ ( -f) mysqlเพื่อดำเนินการต่อและเรียกใช้แบบสอบถามที่เหลือ
สิ่งนี้มีประโยชน์หากฐานข้อมูลมีคิวรีขนาดใหญ่ที่เกี่ยวข้องกับแคชซึ่งไม่เกี่ยวข้องกัน
เพิ่มmax_allowed_packetและwait_timeoutในการกำหนดค่าเซิร์ฟเวอร์ของคุณ (เช่น~/.my.cnf)
ดัมพ์ฐานข้อมูลโดยใช้--skip-extended-insertอ็อพชันเพื่อแยกเคียวรีขนาดใหญ่ จากนั้นนำเข้าอีกครั้ง
ลองใช้ตัวเลือกสำหรับการ--max-allowed-packetmysql
สาเหตุทั่วไป
โดยทั่วไปข้อผิดพลาดนี้อาจหมายถึงหลายสิ่งเช่น:
แบบสอบถามไปยังเซิร์ฟเวอร์ไม่ถูกต้องหรือใหญ่เกินไป
การแก้ไข: เพิ่มmax_allowed_packetตัวแปร
ตรวจสอบให้แน่ใจตัวแปรที่อยู่ภายใต้ส่วนไม่ได้[mysqld][mysql]
อย่ากลัวที่จะใช้จำนวนมากในการทดสอบ (เช่น1G)
อย่าลืมรีสตาร์ทเซิร์ฟเวอร์ MySQL / MariaDB
ตรวจสอบอีกครั้งว่าการตั้งค่าถูกต้องโดย:
mysql -sve "SELECT @@max_allowed_packet" # or:
mysql -sve "SHOW VARIABLES LIKE 'max_allowed_packet'"
คุณหมดเวลาจากการเชื่อมต่อ TCP / IP ทางฝั่งไคลเอ็นต์
การแก้ไข: เพิ่มwait_timeoutตัวแปร
คุณพยายามเรียกใช้คิวรีหลังจากการเชื่อมต่อกับเซิร์ฟเวอร์ถูกปิด
การแก้ไข: ข้อผิดพลาดเชิงตรรกะในแอปพลิเคชันควรได้รับการแก้ไข
การค้นหาชื่อโฮสต์ล้มเหลว (เช่นปัญหาเซิร์ฟเวอร์ DNS) หรือเซิร์ฟเวอร์เริ่มต้นด้วย--skip-networkingตัวเลือก
ความเป็นไปได้อีกอย่างหนึ่งคือไฟร์วอลล์ของคุณบล็อกพอร์ต MySQL (เช่น 3306 โดยค่าเริ่มต้น)
เธรดที่กำลังทำงานถูกฆ่าตายแล้วลองอีกครั้ง
คุณพบข้อผิดพลาดที่เซิร์ฟเวอร์เสียชีวิตขณะดำเนินการค้นหา
ไคลเอนต์ที่ทำงานบนโฮสต์ที่แตกต่างกันไม่มีสิทธิ์ที่จำเป็นในการเชื่อมต่อ
และอีกมากมายเรียนรู้เพิ่มเติมที่: B.5.2.9 เซิร์ฟเวอร์ MySQL หายไปแล้ว
แก้จุดบกพร่อง
ต่อไปนี้เป็นแนวคิดการดีบักระดับผู้เชี่ยวชาญเล็กน้อย:
ตรวจสอบบันทึกเช่น
sudo tail -f $(mysql -Nse "SELECT @@GLOBAL.log_error")
ทดสอบการเชื่อมต่อของคุณผ่านทางmysql, telnetหรือฟังก์ชั่นปิง (เช่นmysql_pingใน PHP)
ใช้tcpdumpเพื่อดมกลิ่นการสื่อสาร MySQL (จะไม่ทำงานสำหรับการเชื่อมต่อซ็อกเก็ต) เช่น:
sudo tcpdump -i lo0 -s 1500 -nl -w- port mysql | strings
บน Linux straceใช้งาน สำหรับ BSD / Mac ให้ใช้dtrace/ dtrussเช่น
sudo dtruss -a -fn mysqld 2>&1
ดู: การเริ่มต้นกับ DTracing MySQL
เรียนรู้เพิ่มเติมเกี่ยวกับวิธีการแก้ปัญหา MySQL เซิร์ฟเวอร์หรือลูกค้าที่: 26.5 แก้จุดบกพร่องและ Porting MySQL
สำหรับการอ้างอิงตรวจสอบซอร์สโค้ดในsql-common/client.cไฟล์ที่รับผิดชอบในการโยนCR_SERVER_GONE_ERRORข้อผิดพลาดสำหรับคำสั่งไคลเอ็นต์
MYSQL_TRACE(SEND_COMMAND, mysql, (command, header_length, arg_length, header, arg));
if (net_write_command(net,(uchar) command, header, header_length,
arg, arg_length))
{
set_mysql_error(mysql, CR_SERVER_GONE_ERROR, unknown_sqlstate);
goto end;
}