Cài đặt và tối ưu MariaDB trên VPS Ubuntu 24.04

Bạn vừa thuê một VPS chạy Ubuntu 24.04, và có kế hoạch chạy ứng dụng web cần database. Việc đầu tiên cần làm là cài đặt MariaDB, một nhánh thay thế mạnh mẽ cho MySQL, với hiệu năng cao và bảo trì tích cực từ cộng đồng. Nhưng cài xong chưa đủ, bạn cần tinh chỉnh các thông số để tận dụng tối đa RAM và NVMe SSD. Bài viết này sẽ hướng dẫn bạn toàn bộ quy trình: từ cài đặt, bảo mật, đến tối ưu cấu hình cho VPS Linux chạy Ubuntu 24.04.
Yêu cầu trước khi bắt đầu
- Một VPS chạy Ubuntu 24.04 (khuyến nghị tối thiểu 1 vCPU, 2GB RAM). Bạn có thể tham khảo các gói VPS giá rẻ với ổ NVMe để có hiệu năng I/O hàng đầu.
- User sudo (không dùng root) để thực hiện các lệnh cài đặt.
- Đã nâng cấp hệ thống:
sudo apt update && sudo apt upgrade -y.
Bước 1, Cài đặt MariaDB từ kho lưu trữ chính thức
Ubuntu 24.04 đi kèm MariaDB trong kho mặc định, nhưng phiên bản thường không phải mới nhất. Để có bản ổn định nhất (MariaDB 11.4 tại thời điểm viết bài), bạn nên thêm kho lưu trữ của MariaDB Foundation.
Trước hết, cài đặt gói software-properties-common để quản lý kho:
sudo apt install -y software-properties-common
Thêm GPG key và kho lưu trữ chính thức:
sudo apt-key adv --fetch-keys 'https://mariadb.org/mariadb_release_signing_key.asc'
sudo add-apt-repository 'deb [arch=amd64] https://ftp.osuosl.org/pub/mariadb/repo/11.4/ubuntu noble main'
Lưu ý: lệnh apt-key đã legacy, nhưng MariaDB chưa chuyển hết. Nếu bạn muốn cách hiện đại, có thể tải .asc về và đặt vào /etc/apt/trusted.gpg.d/. Cách trên vẫn hoạt động tốt.
Cập nhật danh sách gói và cài đặt MariaDB server:
sudo apt update
sudo apt install -y mariadb-server
Verify: Kiểm tra dịch vụ đã chạy:
sudo systemctl status mariadb
Bạn sẽ thấy output dạng Active: active (running). Nếu chưa chạy, khởi động:
sudo systemctl start mariadb
sudo systemctl enable mariadb
Bước 2, Bảo mật cài đặt với mysql_secure_installation
Sau khi cài, MariaDB có cấu hình mặc định yếu: user root không mật khẩu, database test tồn tại, và cho phép đăng nhập từ xa. Script mysql_secure_installation giúp vá tất cả lỗ hổng này.
sudo mysql_secure_installation
Script sẽ hỏi lần lượt:
- Enter current password for root: Nhấn Enter (chưa có mật khẩu).
- Switch to unix_socket authentication? Nhập Y (khuyến nghị), cho phép đăng nhập root bằng user hệ thống.
- Change the root password? Nhập N (nếu dùng unix_socket, không cần mật khẩu riêng).
- Remove anonymous users? Y.
- Disallow root login remotely? Y (bảo mật cao).
- Remove test database and access to it? Y.
- Reload privilege tables now? Y.
Sau khi hoàn tất, test đăng nhập:
sudo mysql -u root
Nếu vào được prompt MariaDB, mọi thứ đã ổn. Thoát bằng EXIT;
Bước 3, Tinh chỉnh tệp cấu hình my.cnf cho VPS NVMe
Tệp cấu hình chính của MariaDB nằm ở /etc/mysql/mariadb.conf.d/50-server.cnf. Bạn cần chỉnh sửa các thông số sau để tối ưu cho workload web và phần cứng VPS hiện đại.
Các thông số cốt lõi
| Thông số | Gợi ý giá trị | Giải thích |
|---|---|---|
innodb_buffer_pool_size | 70-80% RAM | Vùng đệm chính cho dữ liệu InnoDB. VPS 2GB RAM => 1.5GB. VPS 4GB => 3GB. |
innodb_log_file_size | 512M | Kích thước redo log. Giá trị lớn giúp insert/update nhanh, phục hồi nhanh sau crash. |
query_cache_size | 0 | Vô hiệu hóa query cache (không còn hiệu quả với InnoDB và gây contention). |
max_connections | 150-200 | Số kết nối đồng thời tối đa. Tăng nếu app có nhiều request. |
innodb_flush_method | O_DIRECT | Tránh double buffering, phù hợp với NVMe SSD. |
Mở tệp cấu hình:
sudo nano /etc/mysql/mariadb.conf.d/50-server.cnf
Ví dụ một số dòng bạn cần thay đổi trong section [mysqld]:
innodb_buffer_pool_size = 1G
innodb_log_file_size = 512M
innodb_flush_method = O_DIRECT
query_cache_size = 0
query_cache_type = 0
max_connections = 150
Lưu ý: Nếu VPS của bạn có RAM nhỏ hơn 2GB, giảm innodb_buffer_pool_size xuống 512M để tránh swap. Nếu dùng VPS NVMe, O_DIRECT giúp tận dụng tối đa tốc độ SSD.
Sau khi sửa, khởi động lại MariaDB:
sudo systemctl restart mariadb
Verify: Kiểm tra các thông số đã áp dụng:
sudo mysql -e "SHOW VARIABLES LIKE 'innodb_buffer_pool_size';"
sudo mysql -e "SHOW VARIABLES LIKE 'innodb_log_file_size';"
Bước 4, Tạo database và user cho ứng dụng
hiếm khi dùng user root cho ứng dụng. Hãy tạo một database và user riêng:
sudo mysql -u root
Tại prompt MariaDB:
CREATE DATABASE myapp CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE USER 'myapp_user'@'localhost' IDENTIFIED BY 'matkhau_manh';
GRANT ALL PRIVILEGES ON myapp.* TO 'myapp_user'@'localhost';
FLUSH PRIVILEGES;
EXIT;
Kiểm tra kết nối bằng client:
mysql -u myapp_user -p myapp
Nếu vào được, bạn đã sẵn sàng kết nối database cho WordPress, Laravel, hoặc bất kỳ ứng dụng nào.
Bước 5, Thiết lập sao lưu tự động với mysqldump
Dữ liệu là tài sản quan trọng. Thiết lập cronjob để sao lưu hàng ngày:
sudo mkdir -p /var/backups/mariadb
sudo crontab -e
Thêm dòng sau (chạy lúc 3h sáng):
0 3 * * * mysqldump -u root --all-databases | gzip > /var/backups/mariadb/all-dbs-$(date +\%Y\%m\%d).sql.gz
Lưu ý: Vì bạn đang dùng unix_socket với user root, mysqldump sẽ chạy dưới quyền root. Nếu muốn dùng user khác, cần cấp quyền SELECT và LOCK TABLES.
Xử lý lỗi thường gặp
Lỗi "Can't connect to local MySQL server through socket"
Dịch vụ chưa chạy hoặc socket bị hỏng. Kiểm tra trạng thái và xem log:
sudo systemctl status mariadb
sudo journalctl -u mariadb -n 20
Khởi động lại nếu cần:
sudo systemctl restart mariadb
Lỗi "Failed to restart mariadb.service: Unit mariadb.service not found"
Trên Ubuntu 24.04, tên service có thể là mariadb hoặc mysql. Thử:
sudo systemctl restart mysql
Lỗi innodb_buffer_pool_size quá lớn
Nếu bạn đặt innodb_buffer_pool_size lớn hơn RAM khả dụng, MariaDB có thể bị kill bởi OOM. Giảm giá trị xuống và kiểm tra RAM trống:
free -h
Câu hỏi thường gặp
Tôi nên dùng MariaDB hay MySQL cho VPS?
MariaDB tương thích ngược với MySQL, có hiệu năng cao hơn ở nhiều benchmark và được cộng đồng phát triển tích cực. Với VPS Ubuntu 24.04, MariaDB là lựa chọn được khuyến nghị.
Làm sao để biết MariaDB đang dùng bao nhiêu RAM?
Dùng lệnh sudo mysql -e "SHOW VARIABLES LIKE 'innodb_buffer_pool_size';" và kiểm tra tiến trình với ps aux | grep mariadb. Bạn cũng có thể dùng htop để xem tổng thể.
Tôi cần mở port nào trên firewall cho MariaDB?
MariaDB chạy mặc định trên port 3306. Chỉ nên mở port này nếu bạn cần kết nối từ xa. Trên VPS, dùng sudo ufw allow 3306/tcp. Tuy nhiên, vì lý do bảo mật, khuyến nghị chỉ cho phép kết nối từ localhost hoặc qua SSH tunnel.
Tại sao tôi không thể đăng nhập root bằng password sau khi chạy mysql_secure_installation?
Bạn đã chọn unix_socket authentication, nghĩa là chỉ có user hệ thống root mới đăng nhập được. Dùng sudo mysql -u root thay vì mysql -u root -p.
Bài viết liên quan
- Hướng dẫn cài PostgreSQL trên VPS Ubuntu 24.04
- Cách cài Docker trên VPS Ubuntu từ A đến Z
- Tối ưu PHP-FPM cho WordPress trên VPS


