Databasement là một ứng dụng self-hosted, mã nguồn mở MIT, quản lý backup database từ giao diện web. Thay vì mỗi server một cron script riêng, bạn cài một container để Databasement tự động backup database theo lịch, nén hoặc mã hóa rồi đẩy file về S3, SFTP, Samba hoặc ổ local. README công bố hỗ trợ MySQL, MariaDB, PostgreSQL, Microsoft SQL Server, MongoDB, SQLite, Firebird và Redis/Valkey. Điểm đáng chú ý nhất không phải số lượng engine, mà là tư duy kiến trúc: remote agent dành cho database nằm trong mạng không mở cổng vào. Trước khi cài, hãy biết một giới hạn: Redis và Valkey backup được nhưng không restore được.
Thank you for reading this post, don't forget to subscribe!8 loại database, một giao diện: vấn đề mà Databasement giải quyết

Giả sử hệ thống hiện tại của bạn chạy PostgreSQL cho dịch vụ chính, một MySQL cho module cũ, MongoDB cho nội dung và SQLite trên một VPS nhỏ. Nhóm vận hành phải dựng bốn cron riêng, mỗi cron một câu lệnh dump khác nhau, ghi vào các thư mục khác nhau, và gần như không ai kiểm tra file backup có mở lại được hay không.
README của Databasement liệt kê việc cụ thể thay vì bán khái niệm: kết nối nhiều database server từ một web UI, tạo lịch daily hoặc weekly, giữ file theo retention dạng số ngày hoặc GFS. Dữ liệu có thể nén bằng gzip hoặc zstd, README ghi zstd cho tỉ lệ nén tốt hơn 20-40%, và mã hóa AES-256 nếu cần. Khi muốn dựng môi trường mới, restore chéo server cho phép đưa bản backup từ production về staging. Nếu đội có nhiều người, repo có multi-tenant workspace, phân quyền RBAC, đăng nhập OAuth/SSO qua Google, GitHub, GitLab hay OpenID Connect, kèm tùy chọn xác thực hai lớp.
Không phải ai cũng cần toàn bộ các tính năng đó. Nếu bạn chỉ có một database và một script bash đã chạy ổn định ba năm, đừng vội chuyển sang Databasement. Công cụ này thực sự có giá trị khi vấn đề nằm ở số lượng: nhiều engine, nhiều môi trường, nhiều người cùng phải xem trạng thái backup.
Vì sao Redis và Valkey chỉ backup chứ không restore được?

Theo bảng Supported Database Versions, Redis 2.8+ và Valkey 7.2+ dùng redis-cli –rdb để tạo file RDB, nhưng cột Restore để giá trị No. README không giải thích lý do, chỉ xác nhận luồng backup một chiều. Các engine còn lại trong bảng đều có cột Restore ghi Có, nên đây không phải lỗi cấu hình mà là giới hạn thiết kế.
| Engine | Phiên bản hỗ trợ | CLI tool | Hỗ trợ restore |
|---|---|---|---|
| MySQL | 5.6, 5.7, 8.x, 9.x | mariadb-dump |
Có |
| MariaDB | 10.x, 11.x, 12.x | mariadb-dump |
Có |
| PostgreSQL | 12, 13, 14, 15, 16, 17, 18 | pg_dump v16 / v18 |
Có |
| SQL Server | 2017, 2019, 2022, Azure SQL | sqlpackage (.dacpac) |
Có |
| MongoDB | 4.2, 4.4, 5.0, 6.0, 7.0, 8.0 | mongodump / mongorestore |
Có |
| SQLite | 3.x | sqlite3 .backup |
Có |
| Firebird | 3.x, 4.x, 5.x | gbak v5 |
Có |
| Redis | 2.8+ | redis-cli --rdb |
Không |
| Valkey | 7.2+ | redis-cli --rdb |
Không |
Nếu bạn đang dùng Redis để lưu session hoặc dữ liệu cần phục hồi sau sự cố, hãy có thêm một lớp snapshot ở tầng hạ tầng. README không mô tả cách restore file RDB qua giao diện Databasement, nên đừng coi đây là công cụ để khôi phục Redis hoàn chỉnh.
Databasement dùng remote agent cho mạng không mở cổng ra sao?

Với database nằm sau firewall, đằng sau NAT và không có địa chỉ public, cách quen thuộc là mở port hoặc dựng VPN. Databasement chọn mô hình control plane: bản thân ứng dụng ở trung tâm giữ lịch và storage, còn một agent nhẹ chạy trong mạng riêng, chủ động kết nối ra ngoài.
Theo README, agent kết nối ra bằng HTTPS nên không cần mở port inbound. Khi tới lượt, agent dump dữ liệu ngay tại chỗ rồi upload tới storage bạn cấu hình trong job, có thể là S3, Azure Blob, Samba hoặc SFTP/FTP. Với database truy cập trực tiếp được, Databasement vẫn hỗ trợ SSH tunnel qua bastion hoặc jump server bằng mật khẩu hoặc SSH key.
README không mô tả sâu giao thức giữa agent và control plane, ví dụ cơ chế nhận lệnh hoặc hành vi khi mất kết nối. Góc nhìn thực tế: agent phù hợp khi bạn có nhiều mạng con hoặc chi nhánh, không muốn lộ database ra Internet. Với một database nằm cùng VPS, bạn không cần agent.
Chạy Databasement từ image Docker trong 5 phút ở cổng 2226

README đưa sẵn lệnh quick start dùng SQLite để lưu cấu hình, nên bạn không cần chuẩn bị database trước. Chỉ cần Docker và một thư mục muốn gắn vào /data của container.
- Chạy lệnh sau:
docker run -d --name databasement -p 2226:2226 -e DB_CONNECTION=sqlite -e DB_DATABASE=/data/database.sqlite -e ENABLE_QUEUE_WORKER=true -v ./databasement-data:/data davidcrty/databasement:1 - Mở http://localhost:2226 trong trình duyệt, tạo tài khoản admin đầu tiên rồi bắt đầu thêm server database và tạo job backup.
Ngoài Docker, README còn liệt kê thêm Docker Compose, Kubernetes với Helm và native Ubuntu. Bảng dưới đây tóm tắt đúng những gì tài liệu chính thức mô tả.
| Phương pháp | Mô tả trong README |
|---|---|
| Docker | Một container duy nhất, gồm web server, queue worker và scheduler |
| Docker Compose | Nhiều container, dùng database bên ngoài |
| Kubernetes và Helm | Cài lên cụm Kubernetes theo chart Helm |
| Native Ubuntu | Cài trực tiếp trên Ubuntu, không dùng Docker |
README không nhắc Railway hay Unraid. Một số bài viết bên ngoài hướng dẫn chạy Databasement trên hai nền tảng này như một container Docker thông thường; nếu làm theo, bạn tự lo phần volume và biến môi trường vì tài liệu chính thức không có hướng dẫn riêng.
PUID, PGID, ENABLE_QUEUE_WORKER: ba biến quan trọng của Databasement?

Lần đầu chạy quick start, ba biến này quyết định metadata nằm ở đâu và job có chạy nền không. Hiểu đúng chúng giúp bạn không mất danh sách server và lịch backup sau khi xóa container.
Cặp DB_CONNECTION=sqlite và DB_DATABASE=/data/database.sqlite trỏ metadata của Databasement vào file /data/database.sqlite. Nếu bạn mount volume sai, chẳng hạn chỉ mount ./backups:/backups, file database.sqlite vẫn nằm trong /data nhưng là lớp container không được lưu ra ngoài. Container bị xóa là mất toàn bộ cấu hình. README không cảnh báo trực tiếp điều này, nó nằm ở cách ghép hai biến với volume.
ENABLE_QUEUE_WORKER=true bật worker cho tác vụ bất đồng bộ như chạy backup, restore và thao tác nén hoặc mã hóa. README không nói rõ hậu quả khi thiếu biến này. Một số bài giới thiệu bên ngoài nhắc Databasement được xây bằng Laravel, còn README không nhắc framework; nếu bạn từng vận hành ứng dụng Laravel, khái niệm queue worker và scheduler trong một container sẽ dễ hình dung hơn.
PUID và PGID xuất hiện trong ghi chú của README: container tự xử lý quyền trên volume, nhưng có thể dùng hai biến này để khớp với UID và GID của user hệ thống. Nếu bạn mount thư mục ./databasement-data và sau này cần đọc bằng tài khoản deploy, đặt PUID/PGID trùng với user đó sẽ tránh việc file nằm dưới quyền không mong muốn.
Cũng gọi pg_dump và mongodump, Databasement khác gì khi tự gõ lệnh?

Nhiều người đọc bảng hỗ trợ sẽ thắc mắc: PostgreSQL vẫn dùng pg_dump, MongoDB vẫn dùng mongodump và mongorestore, MySQL cùng MariaDB dùng mariadb-dump. Vậy Databasement có gì hơn một chuỗi lệnh trong crontab?
Giá trị nằm ở phần việc quanh lệnh dump. Databasement lo lịch chạy, retention GFS hoặc theo số ngày, chọn gzip, zstd hoặc AES-256, đẩy file sang nhiều storage, ghi log chi tiết và gửi thông báo khi job fail qua Email, Slack, Discord, Telegram, Pushover, Gotify hoặc Webhook. Đây là phần các script tự viết thường thiếu nhất: theo dõi lỗi và kiểm tra backup còn dùng được.
Nếu bạn muốn duyệt dữ liệu nhanh, Adminer tích hợp sẵn trong app, chỉ dành cho MySQL, PostgreSQL và SQLite, đồng thời bị giới hạn ở vai trò admin. REST API và MCP server mở đường cho tự động hóa: script hoặc trợ lý AI như Claude Code, Cursor, VS Code Copilot có thể đọc trạng thái và tạo lệnh quản lý backup. Tuy nhiên, Databasement không phải công cụ backup toàn bộ hạ tầng; README giới hạn phạm vi database, không nhắc tới file cấu hình hệ thống hay snapshot máy ảo. Với một server SQLite nhỏ, đây là cỡ đại bác bắn muỗi. Với nhiều engine và nhiều người cùng vận hành, nó gom nhiều cron rời rạc về một web UI duy nhất.
Câu hỏi thường gặp
Databasement restore được Redis không?
Không. README ghi Redis 2.8+ và Valkey 7.2+ chỉ backup bằng redis-cli –rdb, cột Restore để giá trị No. Nếu quy trình của bạn bắt buộc khôi phục nguyên trạng Redis sau sự cố, Databasement chưa đủ để dựa vào và bạn cần một lớp snapshot khác.
Giấy phép MIT có dùng trong công ty thương mại được không?
README để MIT License, nên bạn được dùng, sửa và phân phối kể cả trong sản phẩm trả phí, miễn giữ thông báo bản quyền gốc. Khi tự vận hành nội bộ, không có phí giấy phép. Tuy nhiên, MIT không bảo đảm an toàn dữ liệu; trách nhiệm kiểm tra backup vẫn thuộc về người vận hành.
Database nằm sau firewall, không mở port inbound, backup kiểu gì?
Cài remote agent bên trong mạng có database. Agent chủ động kết nối ra ngoài qua HTTPS tới máy chủ Databasement, khi tới lượt sẽ dump ngay tại chỗ rồi upload file tới S3, SFTP, Samba hoặc local storage. README xác nhận không cần mở cổng vào.
Adminer tích hợp có phải ai đăng nhập cũng dùng được không?
Không. README ghi Adminer mở trong ứng dụng cho MySQL, PostgreSQL và SQLite, nhưng tính năng này giới hạn ở vai trò admin. Các database MongoDB, SQL Server và Firebird không nằm trong danh sách Adminer dù vẫn backup được. Giao diện duyệt dữ liệu không đồng nghĩa với toàn bộ engine được hỗ trợ.
Với Databasement: bắt đầu từ một server nhỏ, đừng cài cho cả hệ thống
Nếu bạn đã đọc tới đây, hãy tự trả lời ba câu: database đang nằm ở mấy engine, backup hiện có đang nằm ở mấy nơi, và lần gần nhất bạn thử restore là khi nào. Databasement đáng cài khi câu trả lời lần lượt là nhiều hơn một, nhiều hơn một và đã lâu. Cài theo quick start, gắn volume đúng, tạo một job backup nhỏ cho database dev, rồi thử restore sang server tạm. Sau đó mới mở rộng sang S3, SSH tunnel hoặc remote agent. Bắt đầu nhỏ để hiểu hành vi ứng dụng, vì công cụ backup chỉ có giá trị khi bạn tin vào file nó tạo ra.

