紀錄一下如何備份和恢復 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 postgres
對 postgres 的 service 執行命令pg_dumpall
-U postgres
就是資料庫的用戶名。docker 的默認用戶就是 postgres。有用其它用戶名就改改。-c
就是 DROP 原有的 db,就是重灌的意思
恢復#
- 把備份的文件放進一個臨時的目錄,例如 backup。
- 臨時加載備份的目錄到 docker。
在 docker-compose 文件 postgres 的
volumes:
- ./backup:/backup
- 重啓
docker-compose down && docker-compose up -d
- 執行恢復資料
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
記得多備份備份備份。
最後
- 多謝 SO https://stackoverflow.com/a/29913462/1729641
- 關於 pg_dumpall 的用法看官方文件 https://www.postgresql.org/docs/11/app-pg-dumpall.html