一、环境信息
- 操作系统:银河麒麟 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"
四、关键说明
- 备份格式
-Fc:自定义压缩格式,支持单表恢复,生产推荐; - 文件校验逻辑 :
sys_restore -l列出备份内对象,无报错代表备份文件完好; - 自动清理规则 :
.dump备份包 +backup_task_log.txt超过7天自动删除; - 执行用户说明 :定时任务由root发起,切换为
kingbase执行,规避kingbase无crontab权限问题; - 密码机制 :使用环境变量
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
六、故障排查要点
- 报错连接拒绝:检查
kingbase.conf监听地址、pg_hba.conf访问策略; - 权限报错:确认脚本归属
kingbase:kingbase,备份目录读写权限; - 定时任务不执行:查看系统crontab日志
/var/log/cron; - 日志持续膨胀:脚本自带7天自动清理,无需人工干预。