date
Dec 10, 2025
slug
backup-database-trong-docker-tren-vps
status
Published
tags
NodeJs
NestJs
summary
Dưới đây là hướng dẫn đầy đủ, bài bản và đã kiểm chứng, giúp bạn backup PostgreSQL chạy trong Docker trên VPS và upload thẳng lên Google Drive bằng rclone.
type
Post

1. Tổng quan quy trình

  1. Tạo bản dump từ container PostgreSQL (dùng pg_dump).
  1. Lưu file .dump vào thư mục trên VPS.
  1. Dùng rclone upload file đó lên Google Drive.
  1. Thiết lập cronjob để tự động chạy hàng ngày.
 

Bước 0: Chuẩn bị

  • VPS đang chạy PostgreSQL trong Docker (pingtotalk-postgres).
  • Rclone đã cài trên VPS (nếu chưa: sudo apt install rclone -y).
  • Tài khoản Google Drive sẵn sàng.

Bước 1: Tạo kết nối Rclone với Google Drive

  1. Chạy:
  1. Chọn n → New remote
  1. Nhập tên remote, ví dụ: gdrive
  1. Chọn drive → Google Drive
  1. Đăng nhập Google Drive theo hướng dẫn để lấy token
  1. Kiểm tra kết nối:
Nếu thấy các folder trong Drive, kết nối thành công.

Bước 2: Chuẩn bị thư mục backup trên VPS

  • Nơi lưu file backup tạm trên VPS.

Bước 3: Script backup PostgreSQL Docker

Tạo file /usr/local/bin/pg_backup.sh:
Cấp quyền chạy:
Chạy thử backup:
Kiểm tra trên Google Drive:
 
Có file pg_backup_2025-12-09_10-56-31.dump rồi thì cách chạy sao để backup lại được ?

1. Kiểm tra file backup có tồn tại

Nếu file thấy OK → sang bước 2.

2. Dừng toàn bộ session đang dùng database

PostgreSQL không cho DROP DATABASE khi vẫn còn connection đang mở.

3. Xóa database cũ


4. Tạo lại database trống


5. Restore thủ công bằng pg_restore

Đây là lệnh chính để restore từ file .dump:
Giải thích nhanh:
  • cat ... | docker exec -i ... pg_restore → đưa file từ host vào container.
  • -clean → xóa object trước khi tạo lại.
  • -if-exists → không báo lỗi nếu object không tồn tại.
  • d railway → restore vào database “railway”.

6. Kiểm tra restore hoàn tất

Xem danh sách bảng:
Xem log lỗi nếu có:

© Hiếu Trần 2020 - 2025

Tip: Use console.table() for better array logging!