Trước tiên bạn cần làm là chạy truy vấn này:
SELECT user,host FROM mysql.user
WHERE super_priv='Y' AND
CONCAT(user,'@',host) <> 'root@localhost';
Điều này sẽ liệt kê tất cả người dùng có đặc quyền SUPER . Hầu hết người dùng thực hiện xử lý DB liên quan đến ứng dụng không yêu cầu đặc quyền này. Theo Tài liệu MySQL , những người có đặc quyền SUPER có thể làm như sau:
- Chạy CHANGE MASTER TO để kiểm soát tọa độ sao chép
- Giết hoặc
mysqladmin kill
giết chủ đề thuộc các tài khoản khác
- Nhật ký BINary PURGE để xóa hệ thống nhật ký nhị phân
- Thực hiện thay đổi cấu hình bằng cách sử dụng SET GLOBAL để sửa đổi các biến hệ thống toàn cầu
- lệnh gỡ lỗi mysqladmin
- cho phép hoặc vô hiệu hóa đăng nhập
- thực hiện cập nhật ngay cả khi biến hệ thống * read_only * được bật
- bắt đầu và dừng sao chép trên các máy chủ nô lệ
- đặc điểm kỹ thuật của bất kỳ tài khoản nào trong thuộc tính DEFINER của các chương trình và chế độ xem được lưu trữ
- ĐÂY LÀ MỘT ĐIỀU QUAN TRỌNG NHẤT CHO VẤN ĐỀ CỦA BẠN :: Cho phép bạn kết nối (một lần) ngay cả khi đạt đến giới hạn kết nối được điều khiển bởi biến hệ thống max_connections .
Bạn sẽ cần phải đăng nhập với quyền root @ localhost và thu hồi đặc quyền SUPER như sau:
UPDATE mysql.user SET super_priv='N'
WHERE super_priv='Y' AND
CONCAT(user,'@',host) <> 'root@localhost';
FLUSH PRIVILEGES;
Khi bạn thực hiện việc này, bất cứ khi nào tất cả người dùng tràn ngập kết nối mysql, chỉ root@localhost
có thể đăng nhập. Rốt cuộc, nếu tất cả mọi người và bà của anh ta có đặc quyền SIÊU, điều này sẽ root@localhost
không bao giờ kết nối trước những người khác. Nếu max_connections ở mức 200 và bạn cần nâng nó lên 300 mà không phải khởi động lại mysqld, bạn có thể tự động tăng max_connections bằng lệnh này:
mysql> SET GLOBAL max_connections = 300;
Điều đó sẽ cho phép nhiều kết nối có hiệu lực ngay lập tức, nhưng đừng tự ý tăng số lượng theo ý thích. Bạn phải chắc chắn rằng mysql có đủ RAM để phù hợp với sự gia tăng.
CAVEAT: Nếu bạn thay đổi max_connections thành 300, vui lòng đặt nó vào /etc/my.cnf
[mysqld]
max_connections=300
Bạn có thể chạy mysqltuner.pl trên MySQL DB Server của bạn. Nếu bạn không có nó, thì hãy chạy như sau:
cd
wget mysqltuner.pl
perl mysqltuner.pl
Dòng thứ 3 trong mục Đo lường hiệu suất có điều này
-------- 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)
Xem 5,4M mỗi luồng? Điều đó được nhân với max_connections. Trong ví dụ này, đó sẽ là tối đa khoảng 10,8G RAM. Do đó, mỗi lần bạn nâng cấp max_connections, bạn nên chạy mysqltuner.pl và kiểm tra xem bạn có đang nhấn HĐH quá nhiều bộ nhớ không.
Trong mọi trường hợp, việc giới hạn những người có đặc quyền SUPER cho người dùng như vậy cơ hội để giảm thiểu lũ lụt mysqld với Kết nối DB.