Việc tối ưu MySQL giúp cải thiện hiệu suất xử lý truy vấn, giảm độ trễ và tận dụng tối đa tài nguyên phần cứng. Dưới đây là cấu hình mẫu cho VPS 6 CPU Core, 12GB RAM chạy MySQL 8.0.

📂 Vị trí file cấu hình

Tạo một file tối ưu riêng để dễ quản lý:

sudo nano /etc/mysql/conf.d/99-optimization.cnf

⚙️ Nội dung cấu hình

[mysqld]
########################################
# 🔗 Kết nối
########################################
max_connections         = 500
connect_timeout         = 10
wait_timeout            = 300
interactive_timeout     = 300

########################################
# 📂 Cache & Bảng
########################################
table_open_cache        = 8000
table_definition_cache  = 4000
open_files_limit        = 65535

########################################
# 🗄️ InnoDB Engine
########################################
innodb_buffer_pool_size = 6G
innodb_buffer_pool_instances = 6
innodb_redo_log_capacity = 1G
innodb_log_buffer_size  = 256M
innodb_flush_log_at_trx_commit = 2
innodb_file_per_table   = 1
innodb_flush_method     = O_DIRECT

########################################
# 📝 Bộ nhớ tạm & Buffers
########################################
tmp_table_size          = 256M
max_heap_table_size     = 256M
sort_buffer_size        = 4M
join_buffer_size        = 4M
read_buffer_size        = 2M
read_rnd_buffer_size    = 4M

########################################
# 👥 Threads
########################################
thread_cache_size       = 64

########################################
# 📊 Logs
########################################
log_error               = /var/log/mysql/error.log
slow_query_log          = 1
slow_query_log_file     = /var/log/mysql/slow.log
long_query_time         = 1

########################################
# 📦 Binary Log (Replication – tùy chọn)
########################################
server-id               = 1
log_bin                 = /var/log/mysql/mysql-bin.log
binlog_format           = ROW
expire_logs_days        = 7

📌 Giải thích nhanh các thông số chính

  • max_connections = 500 → giới hạn số kết nối đồng thời.
  • innodb_buffer_pool_size = 6G → chiếm ~50% RAM để cache dữ liệu InnoDB.
  • innodb_flush_log_at_trx_commit = 2 → tăng tốc ghi log, chấp nhận mất dữ liệu nếu server crash.
  • tmp_table_size / max_heap_table_size = 256M → tăng khả năng xử lý truy vấn cần bảng tạm.
  • slow_query_log = 1 → bật log truy vấn chậm để dễ tối ưu SQL.
  • binlog_format = ROW → chuẩn cho replication, bạn có thể bỏ nếu không dùng.

🚀 Restart MySQL để áp dụng

Sau khi lưu file, chạy lệnh:

sudo systemctl restart mysql

Kiểm tra lại MySQL hoạt động:

systemctl status mysql

✅ Với cấu hình trên, MySQL 8.0 sẽ hoạt động ổn định, tận dụng tốt 6 core CPU và 12GB RAM.
⚠️ Nếu server còn chạy Nginx, PHP-FPM cùng lúc thì nên để lại khoảng 4–5GB RAM cho hệ thống và PHP.