ก่อนอื่นคุณต้องทำคือเรียกใช้แบบสอบถามนี้:
SELECT user,host FROM mysql.user
WHERE super_priv='Y' AND
CONCAT(user,'@',host) <> 'root@localhost';
นี้จะแสดงรายการผู้ใช้ทั้งหมดที่มีSUPER สิทธิ์ ผู้ใช้ส่วนใหญ่ที่ทำการประมวลผลฐานข้อมูลที่เกี่ยวข้องกับแอปพลิเคชันไม่ต้องการสิทธิ์นี้ ตามเอกสาร MySQLผู้ที่มีสิทธิ์พิเศษสามารถทำสิ่งต่อไปนี้:
- เรียกใช้ CHANGE MASTER TO เพื่อควบคุมพิกัดการจำลองแบบ
- ฆ่าหรือ
mysqladmin kill
ฆ่าเธรดที่เป็นของบัญชีอื่น
- ทำความสะอาดบันทึกไบนารีเพื่อลบบันทึกไบนารีอย่างเป็นระบบ
- ทำการเปลี่ยนแปลงการกำหนดค่าโดยใช้ SET GLOBAL เพื่อปรับเปลี่ยนตัวแปรระบบทั่วโลก
- คำสั่ง debug mysqladmin
- เปิดใช้งานหรือปิดใช้งานการบันทึก
- ดำเนินการอัปเดตแม้ว่าจะเปิดใช้งานตัวแปรระบบ* read_only *
- การเริ่มและหยุดการเรพลิเคทบนเซิร์ฟเวอร์ทาส
- ข้อมูลจำเพาะของบัญชีใด ๆ ในแอตทริบิวต์ DEFINER ของโปรแกรมและมุมมองที่เก็บไว้
- นี่คือสิ่งสำคัญที่สุดสำหรับปัญหาของคุณ : ช่วยให้คุณสามารถเชื่อมต่อ (หนึ่งครั้ง) แม้ว่าจะถึงขีด จำกัด การเชื่อมต่อที่ควบคุมโดยตัวแปรระบบmax_connections
คุณจะต้องเข้าสู่ระบบในฐานะ root @ localhost และเพิกถอนสิทธิ์พิเศษดังนี้:
UPDATE mysql.user SET super_priv='N'
WHERE super_priv='Y' AND
CONCAT(user,'@',host) <> 'root@localhost';
FLUSH PRIVILEGES;
เมื่อคุณทำเช่นนี้เมื่อใดก็ตามที่ผู้ใช้ทุกคนเชื่อมต่อกับ mysql จะroot@localhost
สามารถเข้าสู่ระบบได้เท่านั้น root@localhost
ท้ายที่สุดถ้าทุกคนและยายของเขามีสิทธิพิเศษเป็นอย่างยิ่งสิ่งนี้จะขัดขวางไม่ให้คนอื่น ๆ หาก max_connections อยู่ที่ 200 และคุณต้องเพิ่มเป็น 300 โดยไม่ต้องรีสตาร์ท mysqld คุณสามารถเพิ่มmax_connectionsแบบไดนามิกได้ด้วยคำสั่งนี้:
mysql> SET GLOBAL max_connections = 300;
ที่จะช่วยให้การเชื่อมต่อมีประสิทธิภาพมากขึ้นในทันที แต่อย่าเพิ่งเพิ่มจำนวนโดยไม่ตั้งใจ คุณต้องแน่ใจว่า mysql มี RAM เพียงพอที่จะรองรับการเพิ่มขึ้น
ถ้ำ: หากคุณเปลี่ยน max_connections เป็น 300 แบบไดนามิกโปรดใส่ไว้ใน /etc/my.cnf
[mysqld]
max_connections=300
คุณสามารถเรียกใช้ mysqltuner.pl บน MySQL DB Server ของคุณ หากคุณยังไม่มีให้เรียกใช้สิ่งต่อไปนี้:
cd
wget mysqltuner.pl
perl mysqltuner.pl
บรรทัดที่ 3 ภายใต้ตัวชี้วัดประสิทธิภาพมีสิ่งนี้
-------- Performance Metrics -------------------------------------------------
[--] Up for: 8d 20h 46m 22s (8M q [10.711 qps], 129K conn, TX: 90B, RX: 19B)
[--] Reads / Writes: 4% / 96%
[--] Total buffers: 2.1G global + 5.4M per thread (2000 max threads)
[OK] Maximum possible memory usage: 12.6G (80% of installed RAM)
ดู 5.4M ต่อเธรด นั่นคือคูณด้วย max_connections ในตัวอย่างนี้นั่นจะเป็น RAM สูงสุดประมาณ 10.8G ดังนั้นทุกครั้งที่คุณชน max_connections คุณควรรัน mysqltuner.pl และตรวจสอบว่าคุณกด OS สำหรับหน่วยความจำมากเกินไปหรือไม่
ไม่ว่าในกรณีใดการ จำกัด ผู้ที่มีสิทธิ์แบบ Super จะให้โอกาสผู้ใช้ในการบรรเทา mysqld ด้วย DB Connections