文章目錄
- 備份docker desktop中的opengauss數據庫
- 一、前提條件
- 二、備份步驟
- 三、注意事項
- 四、自動化備份(可選)
- 五、驗證備份
備份docker desktop中的opengauss數據庫
? 以下是在 Docker Desktop 中備份 OpenGauss 數據庫(以你的環境為例,容器名為 opengauss
,數據庫為 postgres
,版本為 7.0.0-rc1
)的詳細步驟。備份將使用 OpenGauss 提供的 gs_dump
工具生成 SQL 文件,并將其保存到本地主機。
一、前提條件
-
確保 Docker 容器正在運行:
docker ps
確認
opengauss
容器狀態為Up
。 -
你的數據庫登錄命令為:
docker exec -it opengauss bash -c "su - omm -c 'gsql -d postgres -p 5432'"
-
容器運行命令為:
docker run --name opengauss --privileged=true -d -e GS_PASSWORD=Abcd@1234 -p 8888:5432 opengauss:7.0.0-rc1
-
確保
omm
用戶有權限執行gs_dump
。
二、備份步驟
-
確認 gs_dump 工具可用
OpenGauss 默認包含gs_dump
工具,用于導出數據庫內容。進入容器確認工具存在:docker exec -it opengauss bash -c "su - omm -c 'which gs_dump'"
應返回類似
/usr/local/opengauss/bin/gs_dump
的路徑。 -
備份數據庫到 SQL 文件
使用gs_dump
導出postgres
數據庫到容器內的臨時文件(例如/tmp/backup.sql
):docker exec -it opengauss bash -c "su - omm -c 'gs_dump -p 5432 postgres -f /tmp/backup.sql'"
-
-p 5432
:指定數據庫端口(與容器內端口一致)。 -
-f /tmp/backup.sql
:指定輸出文件路徑。 -
如果需要備份特定 schema 或表,可添加
--schema
或--table
參數,例如:gs_dump -p 5432 postgres --schema public -f /tmp/backup.sql
-
-
將備份文件復制到本地主機
將容器內的/tmp/backup.sql
復制到本地主機(例如當前目錄下的backup.sql
):docker cp opengauss:/tmp/backup.sql ./backup.sql
-
驗證備份文件
檢查本地backup.sql
是否生成并包含正確內容:ls -l backup.sql head -n 10 backup.sql
確認文件非空且包含 SQL 語句(如
CREATE TABLE
等)。 -
(可選)清理容器內臨時文件
刪除容器內的備份文件以釋放空間:docker exec -it opengauss bash -c "rm /tmp/backup.sql"
-
(可選)使用 gs_backup 工具
OpenGauss 提供gs_backup
工具用于備份整個數據庫集群(包括配置文件等)。若需完整備份:docker exec -it opengauss bash -c "su - omm -c 'gs_backup -t backup --backup-dir=/tmp/backup_dir'"
然后將備份目錄復制到本地:
docker cp opengauss:/tmp/backup_dir ./backup_dir
清理容器內備份目錄:
docker exec -it opengauss bash -c "rm -rf /tmp/backup_dir"
注意:
gs_backup
備份包含更多系統文件,適合災難恢復,但文件較大。
三、注意事項
-
備份頻率:建議定期備份(如通過
cron
腳本自動化)。可參考 GitHub 上 Docker 備份腳本(如tiredofit/docker-db-backup
)實現定時備份。 -
文件權限:確保
omm
用戶有權限寫入/tmp
。如有權限問題,調整文件權限:docker exec -it opengauss bash -c "chmod 777 /tmp"
-
備份完整性:檢查
backup.sql
是否包含所有表和數據。如有錯誤,查看終端輸出,可能是 schema 或權限問題。 -
存儲安全:將
backup.sql
存儲到安全位置(如云存儲),避免單點故障。 -
版本兼容性:確保備份文件與 OpenGauss 7.0.0-rc1 兼容。如果計劃在其他版本恢復,檢查兼容性。
-
Docker Desktop 擴展:Docker Desktop 提供 “Volumes Backup & Share” 擴展,可備份卷數據,但對于數據庫,建議優先使用
gs_dump
以確保數據一致性。
四、自動化備份(可選)
? 若需定期備份,可在主機上創建腳本(例如 backup_opengauss.sh
):
#!/bin/bash
TIMESTAMP=$(date +%Y%m%d_%H%M%S)
docker exec -it opengauss bash -c "su - omm -c 'gs_dump -p 5432 postgres -f /tmp/backup_${TIMESTAMP}.sql'"
docker cp opengauss:/tmp/backup_${TIMESTAMP}.sql ./backup_${TIMESTAMP}.sql
docker exec -it opengauss bash -c "rm /tmp/backup_${TIMESTAMP}.sql"
? 添加執行權限并加入 cron
:
chmod +x backup_opengauss.sh
crontab -e
? 添加定時任務(例如每天凌晨 2 點):
0 2 * * * /path/to/backup_opengauss.sh
五、驗證備份
登錄數據庫查看表結構:
docker exec -it opengauss bash -c "su - omm -c 'gsql -d postgres -p 5432 -c \"\dt\"'"
確保備份文件中包含所有表和數據。