Tại sao phải tối ưu MySQL?
MySQL là một trong những hệ quản trị cơ sở dữ liệu phổ biến nhất, được sử dụng rộng rãi trong các ứng dụng web như WordPress, Laravel, và Magento. Tuy nhiên, nếu không được tối ưu, MySQL có thể trở thành “nút thắt cổ chai”, gây giảm hiệu suất toàn bộ hệ thống. Việc tối ưu giúp:
- Tăng tốc độ xử lý truy vấn.
- Giảm tải cho CPU và RAM.
- Tăng khả năng chịu tải cho website hoặc ứng dụng.
Thiết lập tối ưu MySQL trên Linux VPS
Mình sẽ chia sẻ kinh nghiệm thực tế từ cấu hình mẫu MySQL có sẵn tại ở đây. Bạn cần kiểm tra và theo dõi hiệu suất thường xuyên bằng dữ liệu thực tế từ máy chủ của mình để thiết lập một cấu hình MySQL tối ưu và phù hợp với nhu cầu sử dụng.
1. Cấu hình VPS mẫu
- CPU: 2 core.
- RAM: 4GB.
- Ổ cứng: SSD NVMe.
- Sử dụng MariaDB hoặc MySQL: Bài viết này sẽ đề cập đến việc sử dụng MariaDB, nhưng bạn có thể áp dụng tương tự cho MySQL.
2. Cấu hình MySQL mẫu
Đầu tiên, để xác định tệp nào đang định cấu hình cho MYSQL, hãy chạy lệnh sau.
mysqld --help --verbose | head -n13

Như bạn có thể thấy trong ảnh chụp màn hình, tệp cấu hình được thiết lập theo thứ tự /etc/my.cnf /etc/mysql/my.cnf ~/.my.cnf, bạn có thể sửa đổi cấu hình trong bất kỳ tệp nào.
Ở đây mình đã sao chép toàn bộ cấu hình MySQL mẫu vào /etc/mysql/conf.d/mysql.cnf
.
Khởi động lại MySQL để áp dụng các thay đổi:
sudo service mysql restart
Giải thích thông số:
innodb_buffer_pool_size
: Lượng RAM dành riêng cho cơ sở dữ liệu InnoDB, chiếm khoảng 50-70% RAM vật lý.tmp_table_size
&max_heap_table_size
: Giới hạn kích thước bảng tạm, giúp giảm việc ghi xuống ổ đĩa.query_cache_size
&query_cache_type
: Tắt bộ nhớ đệm truy vấn để tránh tình trạng khóa trên hệ thống hiện đại.
Cài Đặt và Sử Dụng MySQLTuner
MySQLTuner là công cụ kiểm tra và phân tích cấu hình MySQL. Nó cung cấp các khuyến nghị cụ thể dựa trên tình trạng thực tế của cơ sở dữ liệu, giúp bạn tinh chỉnh để đạt hiệu suất tối đa.
Nguồn: https://github.com/major/MySQLTuner-perl
1. Tải và cài đặt MySQLTuner
Sử dụng các lệnh sau để tải và cài đặt MySQLTuner:
wget https://raw.githubusercontent.com/major/MySQLTuner-perl/master/mysqltuner.pl chmod +x mysqltuner.pl
2. Chạy MySQLTuner
Sau khi cài đặt, chạy MySQLTuner bằng lệnh:
./mysqltuner.pl
Ảnh chụp màn hình ví dụ đầu ra:

Điều chỉnh cấu hình dựa trên khuyến nghị của MySQLTuner
1. Phân tích và áp dụng gợi ý
Dựa vào báo cáo của MySQLTuner, tôi đã thực hiện các điều chỉnh sau:
- Tăng bộ nhớ đệm ghi nhật ký InnoDB:
innodb_log_buffer_size = 32M
- Tăng kích thước bảng tạm (giảm bảng ghi đĩa):
tmp_table_size = 128M max_heap_table_size = 128M
Lưu ý: Hãy căn cứ vào gợi ý hiển thị MySQLTuner trên terminal của bạn để điều chỉnh cấu hình nhé,
2. Khởi động lại MySQL
Sau khi chỉnh sửa, khởi động lại dịch vụ MySQL:
sudo service mysql restart
Kiểm tra hiệu quả sau tối ưu
Chạy lại MySQLTuner để kiểm tra các thay đổi đã được áp dụng:
./mysqltuner.pl
So sánh các chỉ số như:
- Tỷ lệ Temporary tables on disk giảm.
- Tăng hiệu suất InnoDB Read/Write.
Lời khuyên:
- Chạy MySQLTuner định kỳ (24-48h tuỳ theo lượng traffic đổ về website). Chú ý đến kết quả phân tích của MySQLTuner mỗi khi test để đánh giá hiệu suất thực tế.
- Không áp dụng mọi khuyến nghị máy móc, hãy hiểu rõ ý nghĩa từng thông số trước khi thay đổi.
- Theo dõi log để phát hiện vấn đề và xử lý kịp thời.
Tối ưu hóa MySQL không chỉ dừng lại ở việc thay đổi cấu hình mà còn là quá trình kiểm tra và điều chỉnh liên tục. Sử dụng MySQLTuner như một công cụ hỗ trợ đắc lực để phân tích và áp dụng các cải tiến phù hợp. Bạn có thể tham khảo tài liệu chính thức của MySQL/MariaDB để hiểu rõ hơn về các thông số. Nếu bạn có bất kỳ câu hỏi nào hoặc muốn chia sẻ kinh nghiệm của mình, đừng ngần ngại để lại bình luận bên dưới!
Tài liệu: https://mariadb.com/kb/en/innodb-system-variables/#innodb_log_buffer_size