1. Vì sao cơ sở dữ liệu là thành phần “nhạy cảm” nhất?
Trong kiến trúc Web Server, Database là lớp:
Lưu trữ dữ liệu nghiệp vụ
Phục vụ mọi request động
Khó mở rộng nhanh nếu cấu hình sai
Rất dễ trở thành điểm nghẽn hoặc điểm sập
Khác với Nginx hay PHP:
Database không nên restart thường xuyên
Lỗi database thường gây ảnh hưởng diện rộng
Khôi phục dữ liệu tốn thời gian và rủi ro
Vì vậy:
Cài đặt Database cho production không được làm theo kiểu “mặc định cho chạy”.
2. Chọn MySQL hay MariaDB?
2.1. MariaDB – lựa chọn khuyến nghị
Trong đa số hệ thống web hiện nay, MariaDB là lựa chọn phù hợp vì:
Tương thích MySQL
Hiệu năng tốt
Cộng đồng mạnh
Được Ubuntu hỗ trợ tốt
Khuyến nghị:
Dùng MariaDB cho hệ thống mới, trừ khi có yêu cầu bắt buộc MySQL.
2.2. Khi nào cần MySQL chính thống?
Chỉ nên dùng MySQL khi:
Ứng dụng yêu cầu version MySQL cụ thể
Có ràng buộc license / vendor
Môi trường đồng bộ với hệ thống khác
3. Nguyên tắc cài đặt Database cho production
Trong loạt bài này, database được triển khai theo các nguyên tắc:
Cài bản ổn định từ repository chính thống
Không expose database ra Internet
Không dùng user root cho ứng dụng
Mỗi website có database và user riêng
Cấu hình bảo mật ngay từ đầu
Nguyên tắc:
Database phải “im lặng” với Internet và chỉ nói chuyện với backend.
4. Cài đặt MariaDB trên Ubuntu Server
4.1. Cài đặt package
Sau khi cài:
MariaDB service sẽ tự khởi động
Kiểm tra trạng thái:
Trạng thái mong đợi:
active (running)

5. Bảo mật MariaDB ngay sau khi cài (bắt buộc)
5.1. Chạy script bảo mật
Các lựa chọn khuyến nghị:
Set root password → Yes
Remove anonymous users → Yes
Disallow root login remotely → Yes
Remove test database → Yes
Reload privilege tables → Yes
Nguyên tắc:
Không để database ở trạng thái mặc định trên production.
6. Kiểm tra kết nối database nội bộ
Đăng nhập MariaDB:
Hoặc:
Thoát:
Nếu đăng nhập được:
Database đã sẵn sàng ở mức cơ bản
7. Không expose database ra Internet
7.1. Kiểm tra bind-address
Mở file cấu hình:
Đảm bảo có dòng:
Điều này đảm bảo:
Database chỉ lắng nghe local
Không thể truy cập từ bên ngoài
7.2. Firewall không mở port database
Không mở:
3306 ra Internet
Database chỉ nên được truy cập:
từ chính server hoặc mạng nội bộ tin cậy.
8. Tạo database và user cho website (chuẩn production)
8.1. Tạo database riêng
Ví dụ website site1:
8.2. Tạo user riêng cho website
8.3. Cấp quyền tối thiểu
Nguyên tắc:
Không dùng user root cho ứng dụng web.
9. Kiểm tra kết nối bằng user ứng dụng
Nếu kết nối thành công:
User và database đã sẵn sàng cho backend
10. Charset và collation – đừng bỏ qua
Khuyến nghị:
utf8mb4utf8mb4_unicode_ci
Lý do:
Hỗ trợ đầy đủ Unicode
Tránh lỗi tiếng Việt, emoji
Phù hợp cho CMS hiện đại
Không dùng:
utf8(phiên bản rút gọn, không đầy đủ)
11. Những sai lầm phổ biến khi cài database
Dùng user root cho website
Mở port 3306 ra Internet
Không chạy mysql_secure_installation
Dùng charset mặc định không kiểm soát
Dùng chung database cho nhiều website
Những sai lầm này:
Không gây lỗi ngay, nhưng tạo rủi ro rất lớn.
12. Checklist Database cho production
Database service chạy ổn định
Đã chạy mysql_secure_installation
bind-address = 127.0.0.1
Mỗi website có DB & user riêng
Charset utf8mb4
Không mở port DB ra Internet
13. Bài tiếp theo
Trong Bài 32, chúng ta sẽ đi sâu vào kết nối backend:
Quản lý user, quyền và kết nối Database cho ứng dụng
Bài này sẽ giúp:
Kết nối PHP ↔ Database an toàn
Tránh lộ thông tin DB
Chuẩn hóa cấu hình backend cho production
- Đăng nhập để gửi ý kiến