Gần đây tôi phải giải quyết bài toán 1 thời điểm chạy chiến dịch của 1 shop thương mại điện tử lớn, có hàng triệu request truy cập, dẫn đến tình trạng Mysql quá tải , 502 bad gateway
1. Tại sao cần ProxySQL?
Khi chạy website với WordPress hoặc Laravel, thường sẽ gặp tình trạng:
-
Quá nhiều kết nối MySQL/MariaDB ở trạng thái
Sleep. -
Gây lỗi “Too many connections” hoặc 502 Bad Gateway khi tải cao.
-
Ứng dụng mở/đóng kết nối liên tục (do PHP-FPM xử lý request ngắn hạn, không tái sử dụng connection).
👉 Giải pháp: dùng ProxySQL làm Connection Pooler (bộ gom kết nối) để tái sử dụng connection, giảm tải cho database server.
2. Kiến trúc tổng quan
|
1 2 3 4 5 6 7 |
Client (WordPress/Laravel/PHP-FPM) | v ProxySQL (port 6033) | v MySQL/MariaDB backend |
-
Ứng dụng PHP kết nối tới ProxySQL thay vì kết nối trực tiếp MySQL.
-
ProxySQL giữ pool connection mở tới database, xử lý routing, caching query, load balancing
3. Cài đặt ProxySQL
3.1 Cài đặt trên Ubuntu/Debian
|
1 2 3 4 |
apt update apt install proxysql -y systemctl enable proxysql systemctl start proxysql |
3.2 Cài đặt trên CentOS/RockyLinux
|
1 2 3 4 |
wget <a class="text-blue-600 overflow-wrap-anywhere" href="https://github.com/sysown/proxysql/releases/download/v2.7.1/proxysql-2.7.1-1-centos7.x86_64.rpm" target="_blank" rel="noopener noreferrer">https://github.com/sysown/proxysql/releases/download/v2.7.1/proxysql-2.7.1-1-centos7.x86_64.rpm</a> sudo yum install -y proxysql-2.6.2-1-centos7.x86_64.rpm sudo systemctl start proxysql sudo systemctl enable proxysql |
Mặc định:
-
MySQL client port: 6033
-
Admin interface port: 6032
4. Cấu hình ProxySQL
4.1 Truy cập admin console
|
1 |
mysql -u admin -p -h 127.0.0.1 -P6032 |
(Mặc định password: admin)