# Cơ sở dữ liệu

> Tạo database MariaDB, PostgreSQL, MongoDB và Redis cho từng tài khoản, cho phép truy cập từ xa theo IP, sao lưu và khôi phục theo lịch, mở Adminer và dùng database server ngoài.

Source: https://zopanel.net/vi/docs/databases  
Updated: 2026-10-07

Trang **Cơ sở dữ liệu** liệt kê mọi database của tài khoản, bất kể engine. Mỗi database có một user riêng với toàn quyền trên đúng database đó, còn database Redis có namespace key tách biệt.

## Engine database (quản trị viên)

MariaDB là engine mặc định. Quản trị viên cài các engine khác ở thẻ **Máy chủ cơ sở dữ liệu** trong trang **Cơ sở dữ liệu**, hoặc từ **Thành phần**:

| Engine | Cổng (nội bộ) | Ghi chú |
| --- | --- | --- |
| MariaDB | 3306 | Tương thích MySQL. Dùng cho WordPress, Laravel và hầu hết ứng dụng PHP. |
| PostgreSQL | 5432 | |
| MongoDB | 27017 | Cần CPU hỗ trợ AVX; trên Debian chỉ có gói cho amd64. Thẻ sẽ giải thích nếu máy chủ không chạy được. |
| Redis | 6379 | Namespace riêng cho từng tài khoản, có mật khẩu riêng. Cũng được dùng cho object cache WordPress và deploy Laravel. |

Mỗi engine đều tốn RAM, nên chỉ cài những gì khách hàng thật sự dùng.

## Tạo database

1. Bấm **Tạo database**.
2. Nếu đã cấu hình server ngoài, chọn nơi **Tạo trên**: **Máy chủ này** hoặc một server ngoài.
3. Chọn engine.
4. Nhập **Tên database**. Tên luôn có tiền tố là tên tài khoản (`alice_` + `shop` = `alice_shop`): chữ thường, số và dấu gạch dưới, tổng cộng tối đa 32 ký tự. User database trùng tên với database.
5. Nhập hoặc tạo **Mật khẩu** (8 đến 128 ký tự). Với Redis, mật khẩu mạnh được tạo tự động.
6. Tuỳ chọn **Liên kết với website** để database hiện trong tab **Tổng quan** của website đó và có thể xoá cùng website.
7. Bấm **Tạo** và lưu mật khẩu lại: mật khẩu không hiển thị lần nữa.

Hộp thoại **Thông tin kết nối database** hiển thị máy chủ (`127.0.0.1`), tên, user và chuỗi kết nối:

```text
mysql://alice_shop:<password>@127.0.0.1:3306/alice_shop
postgresql://alice_app:<password>@127.0.0.1:5432/alice_app
mongodb://alice_data:<password>@127.0.0.1:27017/alice_data
redis://alice_cache:<password>@127.0.0.1:6379   (key prefix "alice_cache:")
```

Với Redis, key của bạn phải bắt đầu bằng tiền tố namespace (`alice_cache:`); key khác và lệnh quản trị đều bị chặn.

Số database tối đa do gói hosting quy định. Với license Free, toàn máy chủ có tối đa 10 database.

Dùng **Đặt lại mật khẩu** để đặt mật khẩu mới (ứng dụng dùng mật khẩu cũ sẽ ngừng hoạt động cho tới khi cập nhật) và **Xoá** để xoá database cùng toàn bộ dữ liệu.

## Truy cập từ xa

Mặc định database chỉ nhận kết nối từ chính máy chủ. Để kết nối từ văn phòng hoặc máy chủ khác (MariaDB và PostgreSQL):

1. Trong menu của database, mở **Truy cập từ xa**.
2. Nhập **Địa chỉ IP / dải mạng được phép**, mỗi dòng một địa chỉ, ví dụ `198.51.100.7` hoặc `198.51.100.0/24`.
3. Bấm **Lưu** và dùng **Chuỗi kết nối từ xa** hiển thị trong hộp thoại.

Tường lửa chỉ mở cho các địa chỉ này. Mỗi database có tối đa 20 mục, dải mạng không được rộng hơn /16 (IPv4) hoặc /48 (IPv6); không thể "cho phép mọi nơi". Để trống danh sách để quay về chỉ kết nối nội bộ.

## Export, import và sao lưu

- **Export (sao lưu)** ghi file dump vào `~/backups/db` của tài khoản.
- **Import / khôi phục** nạp file dump trong `~/backups/db` hoặc file bạn tải lên (`.sql` hoặc `.sql.gz`; MongoDB dùng `.archive.gz`). Bảng hoặc collection trùng tên sẽ bị thay thế.
- Dữ liệu Redis không được export hay sao lưu.

### Sao lưu theo lịch và khôi phục một chạm

Mở **Sao lưu** trong menu của database:

1. Chọn lịch **Sao lưu tự động**: **Tắt**, **Mỗi giờ**, **Mỗi 6 giờ** hoặc **Mỗi ngày**.
2. Đặt số bản **Giữ lại** (1 đến 168).
3. Bấm **Lưu**, hoặc **Sao lưu ngay** để tạo bản sao tức thì.

Mỗi bản sao lưu hiển thị thời gian, loại (**thủ công**, **tự động** hoặc **trước khôi phục**) và dung lượng. **Khôi phục** thay database bằng bản đã chọn; dữ liệu hiện tại được sao lưu trước nên có thể hoàn tác. Khi quản trị viên đã cấu hình sao lưu từ xa lên S3, bản sao cũng được gửi lên S3.

Database cũng nằm trong bản sao lưu toàn bộ của tài khoản (**Sao lưu**).

## Adminer

Adminer là giao diện web quản lý database MariaDB và PostgreSQL. Quản trị viên cài từ thẻ **Máy chủ cơ sở dữ liệu** hoặc **Thành phần**; Adminer chạy ở cổng 8889.

Sau khi cài, mỗi database MariaDB và PostgreSQL có nút **Adminer** mở Adminer với sẵn máy chủ, user và tên database: chỉ cần nhập mật khẩu database. Chỉ trình duyệt đang có phiên đăng nhập panel hợp lệ mới vào được Adminer, và PHP của Adminer chạy dưới một user riêng, không truy cập được file hosting.

## Database server ngoài (quản trị viên)

Kết nối một server MySQL/MariaDB hoặc PostgreSQL chạy ở nơi khác, ví dụ database cloud, để tạo database trên đó:

1. Ở trang **Cơ sở dữ liệu**, trong thẻ **Database server ngoài**, bấm **Thêm server**.
2. Nhập tên, engine, host, cổng và **Tài khoản quản trị** có quyền tạo database và user.
3. Chọn kiểu mã hoá: **Bắt buộc TLS**, **TLS + kiểm tra chứng chỉ** hoặc **Không mã hoá**.
4. Chọn **Cho khách dùng** để khách hàng sử dụng được; nếu không, server ở chế độ **chỉ admin**.
5. Với MySQL/MariaDB, **Cho phép kết nối từ mọi địa chỉ** quyết định host của user database. Khi tắt, user chỉ nhận kết nối từ máy chủ này, nên lộ mật khẩu cũng không dùng được ở nơi khác.
6. Bấm **Kết nối & thêm**. Panel kết nối thử trước khi lưu, và mật khẩu quản trị không bao giờ hiển thị lại.

Khi tạo database trên server ngoài, mật khẩu được tạo tự động và hiển thị một lần. Export/import, truy cập từ xa và sao lưu tự động không áp dụng cho database ở server ngoài: hãy dùng tính năng sao lưu của nhà cung cấp database.
