Cách Cài Đặt MariaDB trên Ubuntu (20.04 / 22.04 / 24.04) – Hướng Dẫn Đầy Đủ Về Cấu Hình & Bảo Mật

目次

Cách Nhanh Nhất Để Cài Đặt MariaDB Trên Ubuntu (Hỗ Trợ 20.04 / 22.04 / 24.04)

Nếu bạn muốn bắt đầu sử dụng MariaDB trên Ubuntu ngay lập tức, chỉ cần làm theo các bước dưới đây để hoàn tất việc cài đặt và xác minh khởi động. Trừ khi bạn có lý do đặc biệt, việc cài đặt từ kho lưu trữ mặc định của Ubuntu là lựa chọn an toàn và ổn định nhất.

① Cập Nhật Thông Tin Gói

sudo apt update
sudo apt upgrade -y

② Cài Đặt MariaDB

sudo apt install -y mariadb-server mariadb-client

Không cần cấu hình đặc biệt nào trong quá trình cài đặt. Sau khi hoàn tất, dịch vụ MariaDB sẽ tự động khởi động.

③ Xác Minh MariaDB Đang Chạy

sudo systemctl status mariadb

Nếu hiển thị active (running), MariaDB đang chạy bình thường.

④ Bật Tự Động Khởi Động (Thường Không Cần Thiết Nhưng Được Khuyến Khích Kiểm Tra)

sudo systemctl enable mariadb

⑤ Kết Nối tới MariaDB và Kiểm Tra Hoạt Động

sudo mysql

Nếu bạn thấy dấu nhắc sau, việc cài đặt đã thành công:

MariaDB [(none)]>

Để thoát, gõ exit;.

Khởi Tạo Bảo Mật Bắt Buộc Sau Khi Cài Đặt

Ngay sau khi cài đặt, MariaDB chỉ có các thiết lập bảo mật tối thiểu. Hãy chắc chắn chạy lệnh sau:

sudo mysql_secure_installation

Thông thường, các câu trả lời sau được khuyến nghị:

  • Xóa người dùng ẩn danh → Y
  • Không cho phép đăng nhập root từ xa → Y
  • Xóa cơ sở dữ liệu test → Y
  • Tải lại bảng đặc quyền → Y

Điều này hoàn tất việc thiết lập môi trường MariaDB an toàn trên Ubuntu.

Phiên Bản MariaDB Được Cài Đặt Theo Phiên Bản Ubuntu

  • Ubuntu 20.04 → MariaDB series 10.3
  • Ubuntu 22.04 → MariaDB series 10.6
  • Ubuntu 24.04 → MariaDB series 10.11 (LTS)

Đối với hầu hết người dùng, phiên bản mặc định của Ubuntu là đủ. Chỉ cân nhắc kho lưu trữ chính thức nếu bạn cần các tính năng mới nhất.

Kiểm Tra Nhanh Khi Cài Đặt Thất Bại Hoặc Dịch Vụ Không Khởi Động

  • Kiểm tra lỗi với sudo systemctl status mariadb
  • Kiểm tra log chi tiết với sudo journalctl -xe
  • Kiểm tra dung lượng đĩa với df -h

Trong hầu hết các trường hợp, vấn đề là do không đủ dung lượng đĩa hoặc lỗi đánh máy trong file cấu hình.

Lựa Chọn Phiên Bản MariaDB Phù Hợp Với Phiên Bản Ubuntu Của Bạn

Khi sử dụng MariaDB trên Ubuntu, lựa chọn an toàn nhất trong đa số trường hợp là phiên bản từ kho lưu trữ mặc định. Các bản cập nhật bảo mật và tính tương thích phụ thuộc được duy trì tự động, rất phù hợp cho người mới bắt đầu và người dùng trung cấp.

Phiên Bản Kho Lưu Trữ Mặc Định của Ubuntu (Được Khuyến Nghị)

  • Ubuntu 20.04 → MariaDB series 10.3
  • Ubuntu 22.04 → MariaDB series 10.6
  • Ubuntu 24.04 → MariaDB series 10.11 (LTS)

Trừ khi bạn có yêu cầu đặc biệt, các phiên bản này hoàn toàn đủ dùng cho môi trường sản xuất.

Nếu Bạn Cần Phiên Bản Mới Nhất (Thêm Kho Lưu Trữ Chính Thức của MariaDB)

Nếu bạn muốn các tính năng mới nhất, có thể thêm kho lưu trữ chính thức của MariaDB. Vì apt-key đã bị loại bỏ, cách này sử dụng phương pháp signed‑by.

① Lưu Khóa GPG

sudo mkdir -p /etc/apt/keyrings
sudo curl -fsSL https://mariadb.org/mariadb_release_signing_key.asc \
  | sudo gpg --dearmor -o /etc/apt/keyrings/mariadb.gpg

② Kiểm Tra Tên Mã Ubuntu Của Bạn

lsb_release -cs

Ví dụ:

  • 20.04 → focal
  • 22.04 → jammy
  • 24.04 → noble

③ Thêm Kho Lưu Trữ Chính Thức (Ví Dụ: Series 10.11)

echo "deb [signed-by=/etc/apt/keyrings/mariadb.gpg] \
https://mirror.mariadb.org/repo/10.11/ubuntu \
$(lsb_release -cs) main" \
| sudo tee /etc/apt/sources.list.d/mariadb.list

④ Cập Nhật Gói và Cài Đặt

sudo apt update
sudo apt install mariadb-server mariadb-client

Lưu Ý Khi Sử Dụng Kho Lưu Trữ Chính Thức

  • Bạn có thể sử dụng các tính năng mới hơn so với phiên bản mặc định của Ubuntu
  • Có nguy cơ xung đột phụ thuộc trong tương lai
  • Cần kiểm tra kỹ lưỡng trước khi đưa vào môi trường sản xuất

Đối với môi trường sản xuất, hãy quyết định rõ ràng bạn ưu tiên sự ổn định hay các tính năng mới nhất.

Cách Kiểm Tra Phiên Bản MariaDB Đã Cài Đặt Hiện Tại

mysql --version

Ví dụ:

mysql  Ver 15.1 Distrib 10.6.16-MariaDB

Bằng cách xác nhận rõ ràng phiên bản, việc khắc phục sự cố và di chuyển sẽ trở nên dễ dàng hơn rất nhiều.

Hướng Dẫn Đầy Đủ Thiết Lập Bảo Mật Ban Đầu cho MariaDB (mysql_secure_installation)

Ngay sau khi cài đặt MariaDB, chỉ có các cài đặt bảo mật tối thiểu được áp dụng. Để vận hành an toàn, hãy chắc chắn chạy lệnh sau:

sudo mysql_secure_installation

Khi thực thi, sẽ xuất hiện một số lời nhắc. Trong hầu hết các trường hợp, các câu trả lời sau được khuyến nghị.

Các Câu Trả Lời Được Đề Xuất

  • Enter current password for root: → Nhấn Enter (không được đặt trong lần chạy đầu tiên)
  • Switch to unix_socket authentication? → Y (Được khuyến nghị trên Ubuntu)
  • Change the root password? → N (Nếu sử dụng xác thực unix_socket)
  • Remove anonymous users? → Y
  • Disallow root login remotely? → Y
  • Remove test database and access to it? → Y
  • Reload privilege tables now? → Y

Điều này hoàn thành cấu hình bảo mật cơ bản.

Tại Sao Bạn Không Thể Đăng Nhập với root (Lỗi Access Denied Error)

Trên Ubuntu, người dùng root sử dụng unix_socket authentication theo mặc định. Do đó, việc đăng nhập bằng mật khẩu thông thường sẽ không hoạt động.

Triệu Chứng Ví Dụ

mysql -u root -p

Access denied for user 'root'@'localhost'

Phương Thức Đăng Nhập Đúng (Mặc Định Ubuntu)

sudo mysql

Đây là phương pháp an toàn nhất và được khuyến nghị.

Cách Thay Đổi root sang Xác Thực Bằng Mật Khẩu (Chỉ Khi Cần Thiết)

Chỉ thay đổi phương thức xác thực nếu bạn phải kết nối với root từ các công cụ hoặc ứng dụng bên ngoài.

① Kết Nối tới MariaDB

sudo mysql

② Thay Đổi Plugin Xác Thực

ALTER USER 'root'@'localhost'
IDENTIFIED WITH mysql_native_password
BY 'StrongPasswordHere';

FLUSH PRIVILEGES;

③ Xác Nhận Thay Đổi

SELECT user, host, plugin FROM mysql.user;

Nếu hiển thị mysql_native_password, việc thay đổi đã thành công.

Cách Kiểm Tra Phương Thức Xác Thực Hiện Tại

sudo mysql -e "SELECT user, host, plugin FROM mysql.user;"

Các phương thức xác thực chính:

  • unix_socket → Mặc định Ubuntu, bảo mật
  • mysql_native_password → Xác thực dựa trên mật khẩu

Trừ khi có lý do cụ thể, việc giữ root sử dụng xác thực unix_socket là an toàn nhất.

Các Lỗi Thường Gặp và Giải Pháp

LỖI 1698 (28000): Access denied for user ‘root’@’localhost’

  • Nguyên nhân: Cố gắng đăng nhập bằng mật khẩu
  • Giải pháp: Đăng nhập bằng sudo mysql

mysql_secure_installation Không Tìm Thấy

  • Kiểm tra bằng which mysql_secure_installation
  • Nếu chưa cài đặt, chạy sudo apt install mariadb-server

Đặt Mã Hóa Ký Tự thành utf8mb4 (Ngăn Ngừa Văn Bản Bị Mờ)

Để xử lý an toàn văn bản đa ngôn ngữ và emoji trong MariaDB, nên sử dụng utf8mb4. Nếu không có cài đặt này, bạn có thể gặp vấn đề mã hóa hoặc mất dữ liệu.

① Chỉnh Sửa Tệp Cấu Hình

sudo nano /etc/mysql/mariadb.conf.d/50-server.cnf

Thêm hoặc sửa đổi các dòng sau trong phần [mysqld]:

[mysqld]
character-set-server = utf8mb4
collation-server     = utf8mb4_general_ci

② Khởi Động Lại MariaDB

sudo systemctl restart mariadb

③ Xác Minh Cài Đặt

sudo mysql -e "SHOW VARIABLES LIKE 'character_set%';"

Nếu hiển thị utf8mb4, cấu hình đã thành công.

Chỉ Định utf8mb4 Khi Tạo Cơ Sở Dữ Liệu (Được Đề Xuất)

Nếu bạn muốn xác định rõ bộ ký tự bất kể cài đặt toàn cục, hãy chỉ định nó khi tạo cơ sở dữ liệu.

CREATE DATABASE sample_db
CHARACTER SET utf8mb4
COLLATE utf8mb4_general_ci;

Tất cả các bảng được tạo trong cơ sở dữ liệu này sẽ kế thừa utf8mb4.

Tạo Người Dùng Ứng Dụng và Cấp Quyền

Trong môi trường sản xuất, không bao giờ sử dụng người dùng root cho kết nối ứng dụng. Tạo một người dùng riêng và chỉ cấp các quyền tối thiểu cần thiết.

① Đăng nhập vào MariaDB

sudo mysql

② Tạo người dùng (Kết nối cục bộ)

CREATE USER 'app_user'@'localhost'
IDENTIFIED BY 'StrongPasswordHere';

③ Cấp quyền cho cơ sở dữ liệu

GRANT ALL PRIVILEGES
ON sample_db.*
TO 'app_user'@'localhost';

FLUSH PRIVILEGES;

Tạo người dùng truy cập từ xa (Chỉ khi cần thiết)

Chỉ cấu hình điều này nếu bạn cần kết nối từ máy chủ bên ngoài hoặc môi trường đám mây.

CREATE USER 'app_user'@'%'
IDENTIFIED BY 'StrongPasswordHere';

GRANT ALL PRIVILEGES
ON sample_db.*
TO 'app_user'@'%';

FLUSH PRIVILEGES;

Lưu ý: Ký tự đại diện “%” cho phép kết nối từ bất kỳ máy chủ nào. Trong môi trường sản xuất, chỉ định địa chỉ IP cụ thể sẽ an toàn hơn.

Cách kiểm tra người dùng và quyền hiện tại

SELECT user, host FROM mysql.user;

SHOW GRANTS FOR 'app_user'@'localhost';

Các lỗi quyền thường gặp và giải pháp

Từ chối truy cập cho người dùng ‘app_user’

  • Đặc tả host không đúng (sự khác nhau giữa localhost và %)
  • Chưa thực hiện lệnh FLUSH PRIVILEGES
  • Tên cơ sở dữ liệu không đúng khi kết nối

Cơ sở dữ liệu không tồn tại

  • Lỗi chính tả tên cơ sở dữ liệu
  • Không có quyền được cấp cho cơ sở dữ liệu mục tiêu

Cách cho phép kết nối từ xa trong MariaDB (Sửa khi truy cập bên ngoài thất bại)

Mặc định, MariaDB chỉ cho phép kết nối cục bộ. Nếu bạn cần kết nối từ máy chủ bên ngoài hoặc môi trường đám mây, hãy cấu hình các thiết lập sau.

① Thay đổi bind-address

Chỉnh sửa tệp cấu hình:

sudo nano /etc/mysql/mariadb.conf.d/50-server.cnf

Tìm dòng sau:

bind-address = 127.0.0.1

Để cho phép kết nối bên ngoài, thay đổi nó thành:

bind-address = 0.0.0.0

Sau khi lưu, khởi động lại MariaDB:

sudo systemctl restart mariadb

② Mở cổng 3306 trong tường lửa

Nếu bạn đang sử dụng UFW trên Ubuntu:

sudo ufw allow 3306
sudo ufw reload

Để tăng cường bảo mật, chỉ định địa chỉ IP nguồn:

sudo ufw allow from 192.168.1.10 to any port 3306

③ Tạo người dùng truy cập từ xa

CREATE USER 'app_user'@'%'
IDENTIFIED BY 'StrongPasswordHere';

GRANT ALL PRIVILEGES
ON sample_db.*
TO 'app_user'@'%';

FLUSH PRIVILEGES;

Để bảo mật tốt hơn:

CREATE USER 'app_user'@'192.168.1.10'
IDENTIFIED BY 'StrongPasswordHere';

Danh sách kiểm tra nếu bạn không thể kết nối từ xa

1. MariaDB có đang chạy không?

sudo systemctl status mariadb

2. Cổng 3306 có đang lắng nghe không?

sudo ss -tulnp | grep 3306

Nếu nó hiển thị 0.0.0.0:3306, nghĩa là đang lắng nghe đúng trên tất cả các giao diện.

3. Nếu đang sử dụng môi trường đám mây (AWS / GCP / VPS)

  • Đảm bảo cổng 3306 được mở trong nhóm bảo mật
  • Xác nhận không có tường lửa bên ngoài chặn kết nối

4. Nguyên nhân dựa trên thông báo lỗi

Không thể kết nối tới máy chủ MySQL

  • Cổng bị đóng
  • bind-address chưa được thay đổi
  • Tường lửa chặn kết nối

Từ chối truy cập cho người dùng

  • Đặc tả host của người dùng không đúng
  • Mật khẩu không đúng
  • Quyền chưa được cấp

Kết nối bị hết thời gian

  • Cài đặt bảo mật phía đám mây
  • Vấn đề định tuyến mạng

Lưu ý bảo mật quan trọng

  • Tránh sử dụng “%” trong môi trường sản xuất
  • Sử dụng truy cập VPN khi có thể
  • Xem xét bật kết nối SSL/TLS
  • Không bao giờ cho phép đăng nhập root từ xa

Khắc phục khi MariaDB không khởi động (lỗi thất bại)

① Kiểm tra trạng thái dịch vụ

sudo systemctl status mariadb

② Kiểm tra log chi tiết

sudo journalctl -xe
sudo cat /var/log/mysql/error.log

③ Nguyên nhân thường gặp

  • Lỗi cú pháp trong tệp cấu hình
  • Không đủ dung lượng đĩa
  • Xung đột cổng (MySQL đã chạy)

④ Kiểm tra dung lượng đĩa

df -h

Tóm tắt các nguyên nhân lỗi từ chối truy cập

  • Mật khẩu không đúng
  • Đặc tả host không đúng (sự khác nhau giữa localhost và %)
  • Chưa thực hiện FLUSH PRIVILEGES
  • Cố gắng đăng nhập root theo cách thông thường (cần sudo mysql )

Cải thiện hiệu năng cơ bản (Dành cho người mới bắt đầu)

Advanced tuning is not required, but at minimum, confirm the following settings.

① Enable Slow Query Log

Add the following to 50-server.cnf:

slow_query_log = 1
slow_query_log_file = /var/log/mysql/slow.log
long_query_time = 2

Restart MariaDB:

sudo systemctl restart mariadb

② Check Index Usage

Slow queries may be missing proper indexes.

EXPLAIN SELECT * FROM sample_table WHERE column_name = 'value';

③ Check Server Resources

top
htop

If memory is insufficient, consider upgrading your server plan.

Frequently Asked Questions (FAQ)

How can I lock the MariaDB version on Ubuntu 22.04?

Use apt-mark hold mariadb-server.

How do I reset the root password if I forgot it?

You can reset it by starting in safe mode and reconfiguring the password. See our dedicated guide for detailed steps.

How do I change the MariaDB port number?

Modify 50-server.cnf to something like port = 3307, then restart the service.

Conclusion: Using MariaDB Safely on Ubuntu

  • Using the default repository version is the safest option
  • Always run mysql_secure_installation
  • Never use root for application connections
  • Enable remote access only when necessary
  • When troubleshooting, checking logs is the top priority

By following these steps, you can build a secure and production-ready MariaDB environment on Ubuntu.