設定Windows自動備份PostgreSQL Docker容器裡的資料庫
因為前面使用Docker部署Miniflux RSS Reader,是裝在Windows Docker Desktop,考慮之後也許會換到Windows Rancher Desktop或Windows Podman Desktop(?),所以採通用方式來備份。
如何備份和還原資料庫
開啟命令列進入PostgreSQL容器:
docker container exec -it <container-name> bash -l
建立
/var/backups/db
資料夾(每行命令分開執行):cd /var/backups mkdir db
備份資料庫:
PGPASSWORD=<db-password> pg_dump -U <db-username> <db-name> -Fc > /var/backups/db/db.dump
還原資料庫:
pg_restore -d <db-name> /var/backups/db/db.dump -c -U <db-username>
離開容器,將容器裡的備份檔複製到本機:
docker cp <container-name>:/var/backups/db/db.dump C:\Docker\Miniflux
或是將本機裡的備份檔複製到容器裡:
docker cp C:\Docker\Miniflux\db\db.dump <container-name>:/var/backups/db
建立自動備份執行檔
Windows使用Notepad++建立BASH:
#!/bin/bash PGPASSWORD=<db-password> pg_dump -U <db-username> <db-name> -Fc > /var/backups/db/$(date +%Y-%m-%d_%H-%M-%S).dump cd /var/backups/db ls -t | awk 'NR>7' | xargs rm -f
最後一行是刪除舊的備份檔,保留最新7個備份檔。存檔前換行格式要改成UNIX格式(LF),另存為
bash-file.sh
。將
bash-file.sh
複製到PostgreSQL容器裡的/var/backups
資料夾:docker cp C:\Docker\Miniflux\<bash-file.sh> <container-name>:/var/backups
測試
bash-file.sh
能否正確執行:docker exec -it <container-name> sh /var/backups/<bash-file.sh>
建立Windows batch──將步驟3命令另存為
bat-file-1.bat
,以下內容存為bat-file-2.bat
:rd /s /q C:\Docker\Miniflux\db timeout /t 2 docker cp <container-name>:/var/backups/db C:\Docker\Miniflux
先刪除本機備份檔,再將容器裡的備份檔複製到本機,保持兩邊檔案一致。
bat-file-1.bat
和bat-file-2.bat
都丟到Windows的工作排程器,系統便會自動定時備份。
參考文章: