人大金仓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天自动清理,无需人工干预。
相关推荐
海绵宝宝转agent3 小时前
learn-claude-code第1-5章开源学习笔记分享
人工智能·笔记·python·学习
Ruiery3 小时前
Linux 6.6内核 CPU 深度解析(七):调度器启动 — 从单核到多核,调度器分阶段点亮
linux·运维·服务器
50万马克的面包3 小时前
CSDN-栈队列数组-知识点整理
linux·运维·服务器
Elastic 中国社区官方博客4 小时前
将你自己的密钥用于现有 Elastic Cloud 部署
大数据·数据库·elasticsearch·全文检索
红海云5 小时前
Jev:给智能系统做判断的模型
大数据·数据库·人工智能
wjkjpcba5 小时前
PCBA烧录程序是什么:PCBA包工包料厂家解析烧录与测试
linux·数据库·人工智能·smt贴片加工·pcba贴片加工厂
꯭自꯭闭꯭5 小时前
达梦事物特性及MVCC
linux·运维·数据库
小马同学-5 小时前
MySQL主从复制和读写分离
数据库·mysql
谢亮_vipxieliang5 小时前
Spring 事务失效的常见场景
java·开发语言·数据库·spring boot
91刘仁德6 小时前
HTTP协议详解:从URL到HTTP服务器的完整实战
服务器·网络·笔记·网络协议·http