文章目录
- 备份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\"'"
确保备份文件中包含所有表和数据。