人大金仓数据库异地定时备份(单机+外部备份)
单机数据库节点和 REPO 备份服务器节点。备份服务器是一个单独的物理设备,相对独立,具有较高 的冗余度,备份不会随着数据库节点故障而失效。
1 环境准备
1.1 数据库备份环境准备
REPO 节点的搭建可以采用安装 KingbaseES 软件或拷贝文件目录的方式。
安装方式:请在对应的 REPO 服务器上,安装 KingbaseES 数据库;
拷贝方式:请拷贝 DB 数据库节点目录下的所有文件和文件夹,包含 bin、lib、share、etc 等子文件夹,拷贝到 REPO 服务器上。
1.2 数据库备份还原免密设置
该操作旨在为数据库备份还原时免除用户手动输入密码
在 KingbaseES 中使用密码配置工具 sys_encpwd 来设置口令密文。将用户的密码以密文形式存在.encpwd 文件中。
使用方法示例:
进入安装数据库的bin目录下使用sys_encpwd工具
sys_encpwd参数说明:
-H, --hostname= 主机地址,允许单主机地址匹配和全匹配,全匹配时使用 * 指定 -P, --portnum= 端口号,仅允许单端口匹配 -D, --database= 数据库名,允许单数据库匹配和全匹配,全匹配时使用 * 指定 -U, --user= 用户名,仅允许单用户匹配 -W, --password= 用户对应的密码,仅允许单用户匹配
注意: 当前四个参数输入与原文件中的某一条记录完全相同时,会修改该条记录相应的密码,否则生成一条新的记 录。
2 数据库备份
2.1上传备份脚本并修改
上传 【人大金仓数据库备份还原】 文件夹下的【ksql_backup】文件夹
修改备份脚本中相应参数
#!/bin/bash # 设置变量 # 数据库安装目录 kdb_home="/home/kingbase/KESRealPro/V008R006C008B0014/Server" # 当前路径(备份保存路径) kdbback_dest="/home/db_data_back" # 用户名 kdb_user="postgres" # 目标端口号 kdb_port="5432" # 目标ip kdb_host="192.168.1.212" # 目标数据库 database="ods" # 目标模式(多个模式使用空格符分开) schemas=("auth" "config" "monitor") # 指定保留备份文件的天数 keep_time="7" # 创建数据库级别的目录 db_dir="${kdbback_dest}/${database}" mkdir -p "${db_dir}" # 创建日志文件 log_file="${db_dir}/sh_log.txt" touch "${log_file}" || { echo "无法创建日志文件: ${log_file}"; exit 1; } # 备份模式 for schema in "${schemas[@]}"; do # 创建模式目录 schema_dir="${kdbback_dest}/${database}/${schema}" mkdir -p "${schema_dir}" # 备份文件路径 dump_file="${schema_dir}/${database}_${schema}_$(date '+%Y%m%d%H%M')" # 执行备份命令 echo "开始备份模式 ${schema}......" cd ${kdb_home} && ./sys_dump -p ${kdb_port} -U ${kdb_user} -w -h ${kdb_host} -f ${dump_file} -n ${schema} ${database} && echo '模式${schema}备份成功: $(date '+%Y%m%d%H%M%S')' >> ${log_file} || echo '模式${schema}备份失败: $(date '+%Y%m%d%H%M%S')' >> ${log_file} # 压缩文件路径 compressed_file="${dump_file}.gz" # 执行压缩命令 echo "备份结束,开始压缩模式 ${schema}......" gzip ${dump_file} && echo '模式${schema}压缩成功: $(date '+%Y%m%d%H%M%S')' >> ${log_file} || echo '模式${schema}压缩失败: $(date '+%Y%m%d%H%M%S')' >> ${log_file} done docker exec kingbase_back find "${kdbback_dest}" -type f -name "*.gz" -mtime "+${keep_time}" -exec rm -f {} \;
2.2授权备份脚本可执行权限
chmod +x ./ksql_backup/*.sh
2.3设置定时备份任务
使用linux中的Crontab 工具定时执行数据库备份脚本。
使用 crontab -e 创建定时任务
crontab -l 查看设置的定时任务
每天凌晨两点执行数据库备份 00 02 * * * /home/ksql_backup/dbback.sh
3 备份文件还原
3.1 拷贝备份文件到/home/ksql_restore并解压
tar -zvxf xxxxxxx05161700.tar.gz
3.2 上传备份还原脚本并修改
上传 【人大金仓数据库备份还原】 文件夹下的【ksql_restore】文件夹至 /home/并修改备份脚本中参数
#!/bin/bash # 设置变量 # 数据库安装目录 kdb_home="/home/kingbase/KESRealPro/V008R006C008B0014/Server" # 数据库用户名 kdb_user="postgres" # 数据库端口号 kdb_port="5432" # 数据库主机IP kdb_host="192.168.1.213" # 还原的数据库名称 database="ods" # 指定要还原的备份文件存放路径 backup_path="/home/db_data_back/restore/" # 指定要还原的备份文件名 backup_files=("ods_alm_202405291433") # 执行还原操作 #"${kdb_home}/bin/ksql" -U "${kdb_user}" -w -h "${kdb_host}" -p "${kdb_port}" -d "${database}" -f "${backup_path}""${backup_file}" for backup_file in "${backup_files[@]}"; do echo "开始还原文件: ${backup_path}${backup_file}" # 执行还原操作,注意这里的引号使用 "${kdb_home}/bin/ksql" -U "${kdb_user}" -w -h "${kdb_host}" -p "${kdb_port}" -d "${database}" -f "${backup_path}${backup_file}">> restore_log_$(date '+%Y%m%d').txt 2>&1 if [ $? -ne 0 ]; then echo "还原文件 ${backup_path}${backup_file} 失败" else echo "还原文件 ${backup_path}${backup_file} 成功" fi done
3.3 授权备份脚本可执行权限
chmod +x /home/ksql_restore/*.sh
3.4 执行备份脚本等待还原
./db_restore.sh