โดยทั่วไปแล้วข้อผิดพลาด:
ข้อผิดพลาด: 2006 ( CR_SERVER_GONE_ERROR
) - เซิร์ฟเวอร์ MySQL หายไปแล้ว
หมายความว่าลูกค้าไม่สามารถส่งคำถามไปยังเซิร์ฟเวอร์
mysql
นำเข้า
ในกรณีเฉพาะของคุณในขณะที่นำเข้าไฟล์ฐานข้อมูลผ่านmysql
หมายความว่าคำสั่งบางคำในไฟล์ SQL นั้นมีขนาดใหญ่เกินไปที่จะนำเข้าและไม่สามารถเรียกใช้งานบนเซิร์ฟเวอร์ดังนั้นไคลเอ็นต์จึงล้มเหลวในข้อผิดพลาดที่เกิดขึ้นครั้งแรก
ดังนั้นคุณมีความเป็นไปได้ดังต่อไปนี้:
เพิ่มตัวเลือกบังคับ ( -f
) mysql
เพื่อดำเนินการต่อและเรียกใช้แบบสอบถามที่เหลือ
สิ่งนี้มีประโยชน์หากฐานข้อมูลมีคิวรีขนาดใหญ่ที่เกี่ยวข้องกับแคชซึ่งไม่เกี่ยวข้องกัน
เพิ่มmax_allowed_packet
และwait_timeout
ในการกำหนดค่าเซิร์ฟเวอร์ของคุณ (เช่น~/.my.cnf
)
ดัมพ์ฐานข้อมูลโดยใช้--skip-extended-insert
อ็อพชันเพื่อแยกเคียวรีขนาดใหญ่ จากนั้นนำเข้าอีกครั้ง
ลองใช้ตัวเลือกสำหรับการ--max-allowed-packet
mysql
สาเหตุทั่วไป
โดยทั่วไปข้อผิดพลาดนี้อาจหมายถึงหลายสิ่งเช่น:
แบบสอบถามไปยังเซิร์ฟเวอร์ไม่ถูกต้องหรือใหญ่เกินไป
การแก้ไข: เพิ่ม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;
}