Skip to main content

Docker-Compose 怎樣備份和恢復 Postgres 數據庫

Dev Docker
Table of Contents

紀錄一下如何備份和恢復 Docker 的 Postgres。備份有很多原因的。

⚠️ 文章的命令要在 docker-compose.yml 的目錄下執行

備份
#

docker-compose exec postgres pg_dumpall -c -U postgres > dump_`date +%d-%m-%Y"_"%H_%M_%S`.sql
  • docker-compose exec postgrespostgres 的 service 執行命令 pg_dumpall
  • -U postgres 就是資料庫的用戶名。docker 的默認用戶就是 postgres。有用其它用戶名就改改。
  • -c 就是 DROP 原有的 db,就是重灌的意思

恢復
#

  1. 把備份的文件放進一個臨時的目錄,例如 backup
  2. 臨時加載備份的目錄到 docker。

在 docker-compose 文件 postgres 的

volumes:
  - ./backup:/backup
  1. 重啓 docker-compose down && docker-compose up -d
  2. 執行恢復資料
docker-compose exec postgres psql -f /backup/dump_xxx.sql postgres -U postgres
  • dump_xxx.sql 是備份文件名。
  • 由於備份有用到 clean 的選項所以需要連接到 postgres 的 db。
  • -U postgres 一樣是 db 的默認用戶名。

例子
#

docker-compose.yml 文件

version: "3.6"
services:
  postgres:
    image: postgres:12
    restart: always
    volumes:
      - ./backup:/backup
    environment:
      POSTGRES_PASSWORD: TOP_SECRET

記得多備份備份備份。

最後