บทนำสู่ข้อผิดพลาด MySQL: การเชื่อมต่อมากเกินไป
เมื่อคุณมีเว็บแอปพลิเคชัน (เว็บไซต์ บล็อก ฟอรัม ฯลฯ) ที่มีการใช้งานสูง หมายความว่ามีผู้ใช้จำนวนมากเข้าชม นั่นหมายถึงการใช้ทรัพยากรเซิร์ฟเวอร์เพิ่มขึ้น หากเว็บแอปพลิเคชันนี้ใช้ฐานข้อมูล MySQL และมีการเรียกใช้คำสั่ง SQL จำนวนมาก ( เนื่องจากการเขียนโปรแกรมเว็บไซต์ที่ไม่ดีหรือปริมาณผู้ใช้สูง ) MySQL อาจแสดงข้อผิดพลาดนี้:
mysqli_connect(): (HY000/1040): Too many connections
MySQL: ข้อผิดพลาดการเชื่อมต่อมากเกินไปหมายความว่าอย่างไร
หมายความว่ามีคำขอเข้ามาที่ MySQL มากเกินไปเกินกว่าที่จะรับได้เกินกว่าที่จะเข้าคิวหรือรอได้
ต้องแก้ยังไง?
ง่ายๆเราต้องเพิ่มขีด จำกัด สูงสุดของคำขอ (การเชื่อมต่อ) ที่ MySQL รองรับ
ฉันจะให้คุณสองทางเลือกในการแก้ไขปัญหานี้:
1.เราแก้ไขไฟล์ /etc/mysql/my.cfg:
nano /etc/mysql/my.cfg
ในนั้นเราใส่สิ่งต่อไปนี้ไว้ใต้ที่ระบุว่า [mysql]:
max_connections = 500 max_user_connections = 500
สิ่งนี้จะเพิ่มจำนวนการเชื่อมต่อสูงสุดจาก 100 (ซึ่งเป็นค่าเริ่มต้น) เป็น 500
เราบันทึกและออกจากนั้นเราเริ่มบริการ MySQL ใหม่และนั่นแหล่ะ การเปลี่ยนแปลงนี้มีผลถาวร
2.อีกวิธีหนึ่งในการแก้ปัญหานี้คือการเปลี่ยนค่าขีดจำกัดสูงสุด แต่ใช้วิธีการสืบค้นข้อมูลใน MySQL
ก่อนอื่นให้แสดงขีด จำกัด ปัจจุบัน:
mysql --user="root" --password="PASSWORD" --execute='SHOW VARIABLES LIKE "max_connections";'
สิ่งนี้จะแสดงให้เราเห็นสิ่งนี้:
+ ----------------- + ------- + | Variable_name | มูลค่า | + ----------------- + ------- + | max_connections | 151 | + ----------------- + ------- +
กล่าวอีกนัยหนึ่งขีด จำกัด ปัจจุบันคือ 151 การเชื่อมต่อทีนี้ลองเพิ่มเป็น 500 โดยใช้แบบสอบถาม:
mysql --user="root" --password="PASSWORD" --execute='SET GLOBAL max_connections = 500;'
พร้อม!
ปัญหาในลักษณะนี้คือเมื่อเริ่มบริการใหม่การกำหนดค่านี้จะหายไป
เพื่อชดเชยรายละเอียดนี้ คุณสามารถสร้างสคริปต์ทุบตีที่จะตรวจสอบทุกๆ X ระยะเวลา หรือแม้แต่เพิ่มบรรทัดที่บล็อกเริ่มต้นหรือรีสตาร์ทของ daemon
แต่แล้วทำไมฉันถึงอยากรู้ตัวเลือกที่ 2 นี้ล่ะ? …ก็นั่นคือสิ่งที่ฉันพูด แต่เมื่อเดือนที่แล้วเซิร์ฟเวอร์ Ubuntu เพิกเฉยต่อวิธีที่ 1 ดังนั้น... ในกรณีที่ร้ายแรงของระบบปฏิบัติการที่โง่เขลา เรามีตัวเลือกที่ 2 ซึ่งใช้ได้ผลเช่นกัน