MySQL và MariaDB: cài đặt và cơ sở dữ liệu đầu tiên của bạn
Cài đặt máy chủ cơ sở dữ liệu trên VDS, thiết lập ban đầu an toàn, tạo cơ sở dữ liệu và người dùng, kiểm tra kết nối, và các lỗi thường gặp lần đầu.
Cập nhật 23 tháng 8, 2026
MySQL và nhánh tương thích MariaDB là nền tảng chạy hầu hết các trang PHP. Lệnh và client của chúng giống nhau; khác biệt bắt đầu từ khâu tinh chỉnh.
Cài đặt
apt update && apt install -y mariadb-server # Debian, Ubuntu
dnf install -y mariadb-server # AlmaLinux, CentOS Stream
systemctl enable --now mariadb
Nếu bạn thực sự cần MySQL của Oracle, hãy cài mysql-server từ kho chính thức của hãng. Dịch vụ sẽ có tên mysql.
Bịt ngay những lỗ hổng cơ bản:
mariadb-secure-installation
Script sẽ hỏi bạn đặt mật khẩu root, xóa người dùng ẩn danh, cấm đăng nhập root từ xa và xóa cơ sở dữ liệu test. Hãy trả lời “yes” cho tất cả.
Cơ sở dữ liệu và người dùng
Đừng chạy ứng dụng bằng root — hãy tạo một người dùng riêng cho mỗi dự án:
CREATE DATABASE shop CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE USER 'shop'@'localhost' IDENTIFIED BY 'long-random-password';
GRANT ALL PRIVILEGES ON shop.* TO 'shop'@'localhost';
FLUSH PRIVILEGES;
Bảng mã utf8mb4 là bắt buộc: utf8 cũ trong MySQL chỉ lưu ba byte cho mỗi ký tự và sẽ lỗi với emoji cùng một số ký tự khác.
Kiểm tra:
mariadb -u shop -p shop -e "SELECT 1;"
Để biết thêm về phân quyền, xem người dùng và quyền.
Cấu hình ban đầu
Các thiết lập nằm trong /etc/mysql/mariadb.conf.d/50-server.cnf hoặc /etc/my.cnf.d/. Dưới đây là những mục tối thiểu bạn nên sửa ngay:
[mysqld]
bind-address = 127.0.0.1
innodb_buffer_pool_size = 1G
max_connections = 100
bind-address = 127.0.0.1 giữ cho cơ sở dữ liệu chỉ truy cập được từ local. Nếu ứng dụng của bạn nằm cùng máy, đây chính là cách nên dùng. Nếu bạn cần truy cập cơ sở dữ liệu từ bên ngoài, hãy đọc truy cập từ xa trước khi thay đổi bất cứ điều gì.
Kích thước buffer pool được chọn theo tier — xem tinh chỉnh bộ nhớ.
Sau khi sửa: systemctl restart mariadb.
Lỗi thường gặp
| Triệu chứng | Nguyên nhân | Cách xử lý |
|---|---|---|
Access denied for user | Sai mật khẩu hoặc mục người dùng gắn với host khác | Kiểm tra SELECT user, host FROM mysql.user; |
Can't connect through socket | Dịch vụ không chạy | systemctl status mariadb, xem journalctl -u mariadb |
Too many connections | Ứng dụng không đóng kết nối | Dùng pool ở phía ứng dụng, rồi chỉnh max_connections |
| Chữ bị lỗi | Bảng mã của cơ sở dữ liệu và kết nối khác nhau | Đưa tất cả về utf8mb4 |
| Cơ sở dữ liệu không khởi động sau khi reboot | Dịch vụ chưa được đặt khởi động cùng hệ thống | systemctl enable mariadb |
Máy không có sao lưu tự động. Hãy thiết lập dump ngay sau khi có bảng hoạt động đầu tiên — sao lưu cơ sở dữ liệu. Ổ NVMe nhanh, nhưng chỉ có một ổ.