Skip to content
VDS · Cơ sở dữ liệu

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ứngNguyên nhânCách xử lý
Access denied for userSai mật khẩu hoặc mục người dùng gắn với host khácKiểm tra SELECT user, host FROM mysql.user;
Can't connect through socketDịch vụ không chạysystemctl status mariadb, xem journalctl -u mariadb
Too many connectionsỨng dụng không đóng kết nốiDùng pool ở phía ứng dụng, rồi chỉnh max_connections
Chữ bị lỗiBả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 rebootDịch vụ chưa được đặt khởi động cùng hệ thốngsystemctl 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 ổ.