人大金仓OS_Core数据库自动备份实施笔记(银河麒麟Linux)

一、环境信息

  • 操作系统:银河麒麟 Linux
  • 数据库:人大金仓 KingbaseES V8
  • 数据库名:OS_Core
  • 端口:54321
  • 登录账号:system
  • 密码:XXXXXXXXX
  • 工具路径:/data/kingbase/es/v8/Server/bin/
  • 备份目录:/data/kbbak
  • 保留周期:7天(备份包+日志统一7天自动清理)
  • 执行系统用户:kingbase
  • 定时触发:root定时任务每日02:00执行

二、备份脚本文件

文件路径:/data/kbbak/kb_backup.sh

bash 复制代码
#!/bin/bash
# KingbaseES 自动备份脚本 银河麒麟Linux
export LANG=en_US.UTF-8
# 金仓密码环境变量
export KINGBASE_PASSWORD="xxxxxxxxx"

# ======================【配置区域】======================
DB_HOST="127.0.0.1"
DB_PORT="54321"
DB_USER="system"
DB_NAME="OS_Core"
BAK_DIR="/data/kbbak"
LOG_FILE="/data/kbbak/backup_task_log.txt"
RETENTION_DAY=7
# 金仓工具绝对路径
SYS_DUMP="/data/kingbase/es/v8/Server/bin/sys_dump"
SYS_RESTORE="/data/kingbase/es/v8/Server/bin/sys_restore"
# =======================================================

# 创建备份目录
mkdir -p "${BAK_DIR}"

echo "==================================================" >> "${LOG_FILE}"
echo "Task Start Time: $(date '+%Y-%m-%d %H:%M:%S')" >> "${LOG_FILE}"

# 生成备份文件名
BAK_FILE="${BAK_DIR}/${DB_NAME}_Full_$(date +%Y-%m-%d_%H_%M).dump"
echo "Backup File Path:${BAK_FILE}" >> "${LOG_FILE}"

# 执行数据库备份
"${SYS_DUMP}" -h "${DB_HOST}" -p "${DB_PORT}" -U "${DB_USER}" -d "${DB_NAME}" -Fc -f "${BAK_FILE}" >> "${LOG_FILE}" 2>&1
DUMP_RET=$?

# 校验备份文件(等价SQLServer RESTORE VERIFYONLY,仅校验不恢复)
echo "Start verify backup file" >> "${LOG_FILE}"
"${SYS_RESTORE}" -l "${BAK_FILE}" >> "${LOG_FILE}" 2>&1
VERIFY_RET=$?

# 判断备份+校验结果
if [ ${DUMP_RET} -eq 0 ] && [ ${VERIFY_RET} -eq 0 ];then
    echo "${DB_NAME} backup finished and verified successfully" >> "${LOG_FILE}"
else
    echo "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!" >> "${LOG_FILE}"
    echo "${DB_NAME} backup OR verify FAILED !!" >> "${LOG_FILE}"
    echo "!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!" >> "${LOG_FILE}"
fi

# 清理7天前备份包与日志文件
echo "Start clean backup & log files older than ${RETENTION_DAY} days" >> "${LOG_FILE}"
find "${BAK_DIR}" -maxdepth 1 \( -name "*.dump" -o -name "backup_task_log.txt" \) -type f -mtime +${RETENTION_DAY} -delete

echo "Task Finish Time: $(date '+%Y-%m-%d %H:%M:%S')" >> "${LOG_FILE}"
echo "" >> "${LOG_FILE}"

三、部署操作命令

1、创建脚本

bash 复制代码
mkdir    /data/kbbak
&&  vi /data/kbbak/kb_backup.sh
# 粘贴上面完整脚本,保存退出

2、权限配置

bash 复制代码
chmod +x /data/kbbak/kb_backup.sh
chown kingbase:kingbase /data/kbbak/kb_backup.sh

3、手动测试(必须执行)

bash 复制代码
su - kingbase -c "/data/kbbak/kb_backup.sh"
# 查看运行日志
cat /data/kbbak/backup_task_log.txt

成功标识:日志末尾打印 OS_Core backup finished and verified successfully

4、定时任务配置(root用户,kingbase禁止直接使用crontab)

bash 复制代码
crontab -e -u root
# 添加定时规则:每日凌晨02:00执行
0 2 * * * su - kingbase -c "/data/kbbak/kb_backup.sh"

四、关键说明

  1. 备份格式 -Fc:自定义压缩格式,支持单表恢复,生产推荐;
  2. 文件校验逻辑sys_restore -l 列出备份内对象,无报错代表备份文件完好;
  3. 自动清理规则.dump备份包 + backup_task_log.txt 超过7天自动删除;
  4. 执行用户说明 :定时任务由root发起,切换为kingbase执行,规避kingbase无crontab权限问题;
  5. 密码机制 :使用环境变量KINGBASE_PASSWORD传入,无需交互式输入;

五、应急手动备份单行命令

bash 复制代码
export KINGBASE_PASSWORD="Afj4*S@1sd%d"
/data/kingbase/es/v8/Server/bin/sys_dump -h 127.0.0.1 -p 9988 -U system -d OS_Core -Fc -f /data/kbbak/OS_Core_Temp_$(date +%Y%m%d_%H%M).dump

六、故障排查要点

  1. 报错连接拒绝:检查kingbase.conf监听地址、pg_hba.conf访问策略;
  2. 权限报错:确认脚本归属kingbase:kingbase,备份目录读写权限;
  3. 定时任务不执行:查看系统crontab日志 /var/log/cron
  4. 日志持续膨胀:脚本自带7天自动清理,无需人工干预。
相关推荐
老杨聊技术2 小时前
CentOS 7 安装 MySQL 8 保姆级教程
linux·mysql·centos
sunxr.2272 小时前
Mysql-----最后一次作业
数据库·mysql
普通网友2 小时前
Python FastAPI 异步数据库管理
数据库·fastapi
晓子文集2 小时前
Tushare接口文档:期货合约信息表(fut_basic)
大数据·数据库·金融·金融数据·量化投资
xiaoye-duck2 小时前
《Linux系统编程》Linux 系统多线程(六):<线程同步与互斥>线程同步(下):POSIX 信号量与环形队列生产者消费者模型详解
linux·线程
三言老师3 小时前
CentOS7.9:Redis‑Cluster集群部署结构化实战教程
linux·运维·服务器·数据库
旺仔学长 哈哈3 小时前
Spring Boot 智能停车场管理系统---附源码+数据库文档
数据库·spring boot·后端·智能停车场
ClickHouseDB3 小时前
ClickHouse托管Postgres:OLTP+OLAP,新能力解锁最佳数据平台
java·前端·数据库
数智化管理手记4 小时前
主数据重复、错漏频发?一站式主数据管理平台如何落地?
大数据·运维·数据库·人工智能·数据挖掘