人大金仓(KingbaseES)Docker 容器自动备份方案

一、前提假设(可根据环境调整)

项目 假设值
数据库 人大金仓 KingbaseES
部署方式 Docker 容器
容器名称 kingbase
数据库用户 system
数据库名 testdb
数据库端口 54321
备份目录 /data/backup/kingbase
备份保留天数 7 天
备份工具 sys_dump / sys_restore

⚠️ 人大金仓兼容 PostgreSQL 协议,但必须使用自带的 sys_dump 与 sys_restore,不可用 pg_dump。

二、自动备份脚本

📄 backup_kingbase.sh

bash 复制代码
#!/bin/bash

# ================= 配置区 =================
CONTAINER_NAME="kingbase"
DB_USER="system"
DB_NAME="testdb"
DB_PORT="54321"

BACKUP_DIR="/data/backup/kingbase"
DATE=$(date +"%Y%m%d_%H%M%S")
KEEP_DAYS=7
# =========================================

# 创建备份目录
mkdir -p "$BACKUP_DIR"

# 备份文件名
BACKUP_FILE="$BACKUP_DIR/kingbase_${DB_NAME}_${DATE}.dump"

echo "[$(date)] 开始备份 Kingbase 数据库:$DB_NAME"

# 在 Docker 容器中执行 sys_dump
docker exec "$CONTAINER_NAME" \
  sys_dump \
    -U "$DB_USER" \
    -d "$DB_NAME" \
    -p "$DB_PORT" \
    -Fc \
    -f "/tmp/$(basename "$BACKUP_FILE")"

# 从容器拷贝到宿主机
docker cp "$CONTAINER_NAME:/tmp/$(basename "$BACKUP_FILE")" "$BACKUP_FILE"

# 清理容器内临时文件
docker exec "$CONTAINER_NAME" rm -f "/tmp/$(basename "$BACKUP_FILE")"

if [ $? -eq 0 ]; then
    echo "[$(date)] 备份成功:$BACKUP_FILE"
else
    echo "[$(date)] 备份失败"
    exit 1
fi

# 删除过期备份
find "$BACKUP_DIR" -name "kingbase_*.dump" -mtime +$KEEP_DAYS -delete

echo "[$(date)] 清理超过 $KEEP_DAYS 天的备份完成"

三、脚本赋权

bash 复制代码
chmod +x backup_kingbase.sh

四、手动测试

bash 复制代码
./backup_kingbase.sh

验证备份文件

bash 复制代码
ls /data/backup/kingbase

预期结果:

复制代码
kingbase_testdb_20260115_030000.dump

五、配置定时任务(Crontab)

编辑定时任务:

bash 复制代码
crontab -e

每天凌晨 2 点执行备份:

复制代码
0 2 * * * /path/to/backup_kingbase.sh >> /var/log/backup_kingbase.log 2>&1

六、数据库恢复示例(重要)

1️⃣ 将备份文件拷贝进容器

bash 复制代码
docker cp kingbase_testdb_20260115_030000.dump kingbase:/tmp/

2️⃣ 执行恢复

bash 复制代码
docker exec -it kingbase \
  sys_restore \
    -U system \
    -d testdb \
    -p 54321 \
    -c \
    /tmp/kingbase_testdb_20260115_030000.dump

-c:恢复前清理已有对象,避免冲突。

七、人大金仓特有说明

✅ 为什么使用 sys_dump / sys_restore?

工具 说明
sys_dump 人大金仓专用备份工具
sys_restore 人大金仓专用恢复工具
pg_dump 版本不兼容,禁止使用

✅ 端口说明

数据库 默认端口
PostgreSQL 5432
人大金仓 54321
复制代码
相关推荐
xbzb9 小时前
容器 IP 每次重建都变?docker network 五种模式与自定义网桥固定地址
网络·docker·容器·ip·network·固定
打工仔折腾 AI13 小时前
Changedetection.io 网页变动监控:Docker 部署、通知配置与公网暴露实践
运维·人工智能·后端·python·docker·容器·性能优化
无奈笑天下13 小时前
银河麒麟上lsblk命令教程详解
linux·运维·服务器·数据库
fengkai454513 小时前
Prometheus+K8s弹性伸缩综合项目
运维·kubernetes·k8s·prometheus·hpa·vpa
分布式存储与RustFS15 小时前
镜像仓库的层别只堆本地盘:用 RustFS 给 Harbor 当 S3 后端
运维·云原生·开源·对象存储·分布式存储·s3·性能基准
xbzb17 小时前
自建镜像仓库:registry 一条命令 + harbor 部署、授权、跨库同步与卸载
docker·harbor·镜像·仓库·同步·registry
雪落漂泊17 小时前
Liunux进程(七):程序控制篇(中)
linux·运维·windows
分布式存储与RustFS18 小时前
工作流脚本和依赖 JAR 散在各节点本地盘:用 DolphinScheduler 资源中心接到 RustFS
运维·云原生·开源·对象存储·分布式存储·s3·性能基准
分布式存储与RustFS1 天前
群晖 NAS 被 C3RB3R 锁了:本地备份一起被加密,RustFS 对象锁为什么删不掉
运维·云原生·开源·对象存储·分布式存储·s3·性能基准
真好啊又活了一天1 天前
服务器和虚机配置IPV6
运维·服务器·github