备份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


二、备份步骤

  1. 确认 gs_dump 工具可用
    OpenGauss 默认包含 gs_dump 工具,用于导出数据库内容。进入容器确认工具存在:

    docker exec -it opengauss bash -c "su - omm -c 'which gs_dump'"
    

    应返回类似 /usr/local/opengauss/bin/gs_dump 的路径。

  2. 备份数据库到 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
      
  3. 将备份文件复制到本地主机
    将容器内的 /tmp/backup.sql 复制到本地主机(例如当前目录下的 backup.sql):

    docker cp opengauss:/tmp/backup.sql ./backup.sql
    
  4. 验证备份文件
    检查本地 backup.sql 是否生成并包含正确内容:

    ls -l backup.sql
    head -n 10 backup.sql
    

    确认文件非空且包含 SQL 语句(如 CREATE TABLE 等)。

  5. (可选)清理容器内临时文件
    删除容器内的备份文件以释放空间:

    docker exec -it opengauss bash -c "rm /tmp/backup.sql"
    
  6. (可选)使用 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\"'"

确保备份文件中包含所有表和数据。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值