人大金仓Kingbase V8 自动全量备份部署完整笔记
适用系统:麒麟Linux / CentOS Linux
运行用户:kingbase
备份方式:sys_dump 逻辑全量压缩备份
策略:日常备份留存7天、首次备份永久兜底、每日凌晨2点定时执行、日志超10MB自动清空轮转
一、前期目录与权限初始化(root用户执行)
bash
mkdir -p /data/dbbak /data/dbbak/log
chown -R kingbase:kingbase /data/dbbak
BACK_LOG="/data/dbbak/log/kingbase_back.log"
touch $BACK_LOG
chown kingbase:kingbase $BACK_LOG
校验目录权限
bash
ls -l /data/dbbak/
ls -l /data/dbbak/log/
二、确认金仓备份工具路径(root核对)
bash
ls /data/kingbase/Server/bin/sys_dump /data/kingbase/Server/bin/sys_restore
说明:人大金仓不使用pg_dump,原生备份工具为 sys_dump、恢复工具 sys_restore,存在即正常
三、编写自动备份脚本(root创建)
1、新建脚本文件
bash
vim /data/kingbase_back.sh
2、粘贴纯脚本内容(配置项改成自己的:密码、库名、金仓端口)
bash
#!/bin/bash
KB_BIN="/data/kingbase/Server/bin"
KB_PORT="54321"
KB_DB="business_db"
KB_USER="system"
KB_PWD="******"
BAK_BASE="/data/dbbak"
LOG_FILE="${BAK_BASE}/log/kingbase_back.log"
LOG_MAX_SIZE=$((10 * 1024 * 1024))
RETENTION_DAY=7
INIT_FLAG="${BAK_BASE}/first_backup.flag"
check_log_size() {
if [ -f "$LOG_FILE" ]; then
LOG_SIZE=$(du -b "$LOG_FILE" | awk '{print $1}')
if [ $LOG_SIZE -gt $LOG_MAX_SIZE ]; then
> $LOG_FILE
echo "【$(date '+%Y-%m-%d %H:%M:%S')】日志文件超过10MB,已清空重置" >> $LOG_FILE
fi
}
write_log() {
check_log_size
echo "【$(date '+%Y-%m-%d %H:%M:%S')】$1" >> $LOG_FILE
}
check_log_size
write_log "===== 人大金仓业务库自动备份任务开始 ====="
export PGPASSWORD="$KB_PWD"
BAK_NAME="kingbase_business_db_$(date +%Y%m%d_%H%M%S).dump"
BAK_FULL_PATH="${BAK_BASE}/${BAK_NAME}"
write_log "开始执行全量备份,文件:$BAK_NAME"
${KB_BIN}/sys_dump -h 127.0.0.1 -p $KB_PORT -U $KB_USER -d $KB_DB -Fc -f $BAK_FULL_PATH
if [ $? -eq 0 ] && [ -s "$BAK_FULL_PATH" ]; then
write_log "备份成功:$BAK_FULL_PATH"
if [ ! -f "$INIT_FLAG" ]; then
touch "$INIT_FLAG"
cp $BAK_FULL_PATH ${BAK_BASE}/kingbase_business_db_FIRST_FULL_BACKUP.dump
write_log "检测到首次备份,已永久留存初始完整备份包"
fi
find $BAK_BASE -maxdepth 1 -name "kingbase_business_db_*.dump" -type f -mtime +${RETENTION_DAY} ! -name "*FIRST_FULL_BACKUP*" -delete
write_log "已自动清理${RETENTION_DAY}天以上过期日常备份"
else
write_log "备份失败!请检查数据库连接、端口、账号密码是否正常"
rm -f $BAK_FULL_PATH
fi
unset PGPASSWORD
write_log "===== 本次备份任务结束 ====="
echo -e "\n" >> $LOG_FILE
3、修改参数说明
- KB_PORT:金仓默认端口 54321
- KB_DB:替换为自身实际业务数据库名称
- KB_PWD:将
******修改为system用户实际数据库密码
4、配置脚本权限与归属
bash
chmod 700 /data/kingbase_back.sh
chown kingbase:kingbase /data/kingbase_back.sh
四、手动测试备份(切换kingbase用户)
bash
su - kingbase
bash /data/kingbase_back.sh
五、结果验证命令
- 查看备份文件
bash
ls -lh /data/dbbak
文件释义:
kingbase_business_db_时间戳.dump:每日动态生成全量备份,滚动保留7天,到期自动清理kingbase_business_db_FIRST_FULL_BACKUP.dump:首次初始化全量备份,永久兜底保存,不受7天清理规则限制first_backup.flag:首次备份标记文件
- 查看运行日志
bash
tail -100 /data/dbbak/log/kingbase_back.log
日志流程完整、无报错 = 备份测试成功

六、配置Linux定时任务(kingbase用户)
1、编辑定时计划
bash
crontab -e
写入定时规则:
0 2 * * * /bin/bash /data/kingbase_back.sh
定时释义:每日 凌晨02:00 自动执行备份脚本
2、查看已配置定时任务
bash
crontab -l
七、备份策略规则汇总
- 备份类型:sys_dump 二进制压缩全量逻辑备份,完整包含库表结构、数据、索引、函数、约束、序列等全部对象
- 日志管控:日志文件阈值10MB,超出容量自动清空重置,避免日志持续膨胀占用磁盘
- 备份留存:
- 日常每日备份:循环保留7天,超时自动删除
- 首次初始备份:永久留存兜底,不会被定时清理
- 运行身份:kingbase普通业务用户运行,规避root访问数据库的权限安全隐患
八、数据库整库恢复操作命令
bash
su - kingbase
/data/kingbase/Server/bin/sys_restore -h 127.0.0.1 -p 54321 -U system -d business_db /data/dbbak/备份文件名.dump
备注:执行前可按需新建空库,避免数据冲突覆盖
九、日常运维快捷命令
bash
# 实时监控备份日志
tail -f /data/dbbak/log/kingbase_back.log
# 按时间倒序查看所有备份文件
ls -lht /data/dbbak/*.dump
# 手动临时触发一次备份校验
bash /data/kingbase_back.sh
十、故障排查要点
- 备份失败:优先查阅日志,核对端口、数据库名、账号密码、数据库服务运行状态
- 定时任务不生效:确认定时任务归属kingbase用户、脚本权限700、系统crond服务正常开启
- 磁盘空间告警:及时迁移备份文件、扩容磁盘容量