
一、整体功能说明本方案面向 GBase 8c 集中式版本数据库构建一套标准化、可落地的集中式备份运维体系完整覆盖本地备份、远程异地备份两大部署场景同时提供逻辑备份、物理备份两套技术路线配套自动化脚本、定时调度、过期清理、完整恢复操作规范可适配中小业务库、TB 级海量业务集群、跨机房异地灾备等各类生产环境。方案依托 GBase 8c 原生工具 gs_dump逻辑备份、gs_probackup物理增量 /全量备份实现数据保护逻辑备份支持单库、多库选择性导出具备跨环境迁移、误删数据精准回滚能力物理备份支持全量备份 PTRACK 增量备份组合模式搭配归档 WAL 日志实现任意时间点恢复兼顾备份效率与数据完整性。整套流程内置日志记录、自动压缩、生命周期清理机制可通过 crontab 实现无人值守自动备份大幅降低人工运维成本同时统一规范备份目录、保留周期、数据库连接参数便于运维团队统一管控、快速排查备份故障。1. 本地备份本地备份指备份存储介质与 GBase 8c 数据库部署在同一服务器节点适用于单节点、单机集群日常基础数据防护分为逻辑备份、物理备份两类方案可根据业务数据规模灵活选用。1.1 逻辑备份逻辑备份基于 gs_dump 工具完成数据库逻辑对象导出以库为最小备份粒度支持自定义压缩等级、自动打包归档、过期文件自动清理适合中小型业务库、数据迁移、单库误操作恢复场景。1.1.1 备份脚本样例#!/bin/bash if [[ $1 --help ]] || [[ $1 -h ]] || [[ $# 小于2 ]]then echo help for gbase backup scripts echo 第一个参数为主机地址; echo 传递参数为数据库列表,多个数据库使用空格分开,如备份test和emp库执行:sh backup.sh 127.0.0.1 test emp exit -1fi GBASE_HOST$1DATABASES($*)unset DATABASES[0] # gbase的 base目录GBASE_HOME$GAUSSHOME/bin # 数据库链接信息GBASE_PORT15400GBASE_USERregressGBASE_PASSWD******* # 备份目录以及存放备份日志的目录DIR_BACKUP/home/gbase/backupDIR_LOG/home/gbase/backup/bakup_log # 备份数据库列表使用空格隔开# DATABASES(test emp) # DATABASES($(${GBASE_HOME}/gsql -d postgres -p ${GBASE_PORT} -U ${GBASE_USER} -q -c select datname from pg_database where datname not in (template0,template1,gha) | grep -v datname\|(\|--\|))) # gbase备份时的压缩级别0~9,0表示不压缩COMPRESS_LEVEL5 # 设置备份文件保留的天数OVERDUE_DAYS7 DATE$(date %Y%m%d%H%M)BACKUP_FILE${DIR_LOG}/gbase_back_${DATE}.log # 检查备份目录和备份日志目录test -d ${DIR_BACKUP}/gbase_backup_${DATE} || mkdir -p ${DIR_BACKUP}/gbase_backup_${DATE}test -d ${DIR_LOG} || mkdir -p ${DIR_LOG} echo -e $(date %F\ %T) Start backup ${BACKUP_FILE} # 开始按数据库备份for database in ${DATABASES[]}; do echo ------ current backup database : [ ${database} ] ------ ${BACKUP_FILE} ${GBASE_HOME}/gs_dump ${database} -h ${GBASE_HOST} -p ${GBASE_PORT} -U ${GBASE_USER} -W${GBASE_PASSWD} -Z ${COMPRESS_LEVEL} -Fc -f ${DIR_BACKUP}/gbase_backup_${DATE}/${database}_${DATE}.dump ${BACKUP_FILE}done # 打包压缩备份文件,完成后删除原文件cd ${DIR_BACKUP}echo -e \n------$(date %F\ %T) tar backup file------ ${BACKUP_FILE}tar -cvzf gbase_backup_${DATE}.tar.gz gbase_backup_${DATE} --remove-files ${BACKUP_FILE} # 删除过期的备份文件和日志echo -e \n------$(date %F\ %T) rm -rf overdue files------ ${BACKUP_FILE}find ${DIR_BACKUP} -type f -mtime ${OVERDUE_DAYS} -iname gbase_backup_\*.gz -exec rm -rf {} \;find ${DIR_LOG} -type f -mtime ${OVERDUE_DAYS} -iname gbase_bak_\*.log -exec rm -rf {} \; echo -e \n$(date %F\ %T) Backup script finish ${BACKUP_FILE}# 恢复参考命令# gs_restore -p 15433 -U gbase -WQWE123qwe -d test /tmp/test.dump1.1.2 备份脚本修改点脚本需使用 gbase 操作系统用户创建部署部署前根据现场环境修改以下核心配置项数据库链接信息GBASE_PORT15400 #GBase 8c 数据库服务端口GBASE_USERregress #具备备份权限的数据库账号GBASE_PASSWD******* #备份账号登录密码存储目录配置DIR_BACKUP/home/gbase/backup #备份文件存储根目录DIR_LOG/home/gbase/backup/backup_log #备份运行日志存放目录1.1.3 备份执行修改配置完成后赋予脚本执行权限执行命令格式sh gbase_backup.sh 127.0.0.1 database1 database2参数说明首个参数为数据库主机 IP后续参数为需要备份的数据库名称多库使用空格分隔。1.1.4 备份定时任务挂载每日凌晨 1 点自动执行切换数据库运行用户sudo su - gbase赋予脚本执行权限chmod x /home/gbase/bin/gbase_backup.sh编辑定时任务crontab -e写入定时调度规则0 1 * * * /home/gbase/bin/gbase_backup.sh 127.0.0.1 database1 database21.2 物理备份物理备份依托 gs_probackup 工具直接拷贝数据库底层物理数据文件支持全量备份、PTRACK 增量备份搭配归档 WAL 日志可实现时间点恢复适用于 TB 级大容量数据库、业务高可用场景备份速度快、恢复效率高。1.2.1 备份脚本样例#!/bin/bash retention_redundancy30 #备份文件保留天数 retention_window30 #支持回溯恢复的最大天数 backup_path/home/gbase/backup/pro_backup #物理备份存储根路径archive_log_dir/home/gbase/backup/archive_dir/ #WAL 归档日志存放路径 db_host172.16.5.103 #数据库主机IPdb_port15400 #GBase 8c 服务端口 db_userregress #备份专用账号 db_passwd******* #账号密码 instance_namegbase_probackremote_host${db_host}remote_usergbasecompress_level5compress_algorithmzlibbackup_log/home/gbase/backup/pro_backup/log source ~/.bashrc #自动读取数据库数据目录 data_path$(gsql -d postgres -h ${db_host} -p ${db_port} -U ${db_user} -W ${db_passwd} -c show data_directory; -t | awk NR1) test -d ${backup_log} || mkdir -p ${backup_log}log_file${backup_log}/gbase_backup_$(date %Y%m%d).log #帮助提示函数 function help() { echo This script is used to backup the GBase 8c echo Usage: gbasepro_backup.sh [-b backup-mode] echo backup-mode: backup mode, supporting INIT ,FULL, PTRACK, SHOW [required]. echo INIT: 初始化备份实例配置 echo FULL: 执行物理全量备份 echo PTRACK: 执行增量备份 echo show: 查看历史备份记录 echo Example: echo sh gbasepro_backup.sh -b init echo sh gbasepro_backup.sh -b full echo sh gbasepro_backup.sh -b ptrack echo sh gbasepro_backup.sh -b show exit -1} #读取输入参数 while getopts b:h: option; do case $option in b) BACKUP_MODE${OPTARG,,} ;; h) help ;; \?) help ;; esacdone #初始化备份实例 function config_backup(){ test -d ${backup_path} || mkdir -p ${backup_path} gs_probackup init -B ${backup_path} gs_probackup add-instance -B ${backup_path} -D ${data_path} --instance ${instance_name} --remote-host ${remote_host} --remote-user ${remote_user} gs_probackup set-config -B ${backup_path} --instance ${instance_name} --retention-redundancy ${retention_redundancy} --retention-window ${retention_window} gs_probackup show-config -B ${backup_path} --instance ${instance_name} exit} #全量备份逻辑 function full_backup(){ echo -e \n$(date %F\ %T) starting full backup ${log_file} gs_probackup backup -B ${backup_path} -b FULL -h ${db_host} -p ${db_port} -U ${db_user} -W ${db_passwd} --instance ${instance_name} --delete-expired -d postgres --compress-algorithm${compress_algorithm} --compress-level${compress_level} --remote-host ${remote_host} --remote-user ${remote_user} ${log_file} 21 echo -e \n$(date %F\ %T) finished full backup ${log_file} if [[ $? -eq 0 ]];then echo Database backup successed ! exit fi} #增量备份逻辑 function increment_backup(){ echo -e \n$(date %F\ %T) starting increment backup ${log_file} gs_probackup backup -B ${backup_path} -b PTRACK -h ${db_host} -p ${db_port} -U ${db_user} -W ${db_passwd} --instance ${instance_name} --delete-expired -d postgres --compress-algorithm${compress_algorithm} --compress-level${compress_level} --remote-host ${remote_host} --remote-user ${remote_user} ${log_file} 21 echo -e \n$(date %F\ %T) finished increment backup ${log_file} if [[ $? -eq 0 ]];then echo Database backup successed ! exit fi} #查询备份记录 function show(){ gs_probackup show -B ${backup_path}} #清理过期归档日志与备份文件 function remove_archivelog(){ echo -e \n$(date %F\ %T) starting remove expired archive log ${log_file} find ${archive_log_dir} -name * -mtime ${retention_redundancy} -exec rm -rfv {} \; find ${backup_path} -name * -mtime ${retention_redundancy} -print -exec rm -rfv {} \; ${log_file} 21} #主执行入口 main(){ if [[ $BACKUP_MODE init ]];then config_backup elif [[ $BACKUP_MODE full ]];then full_backup show elif [[ $BACKUP_MODE ptrack ]];then increment_backup show elif [[ $BACKUP_MODE show ]];then show else help fi remove_archivelog} main1.2.2 备份脚本修改点 数据库前置参数配置脚本内可配置项retention_redundancy30 #备份文件留存天数retention_window30 #可恢复数据时间窗口backup_path/home/gbase/backup/pro_backup #物理备份存储路径archive_log_dir/home/gbase/backup/archive_dir/ #WAL 归档日志路径db_host172.16.5.103 #数据库主机 IPdb_port15400 #数据库端口db_userregress #备份账号db_passwd******* #账号密码remote_usergbase #远程访问操作系统用户compress_level5 #压缩等级compress_algorithmzlib #压缩算法backup_log/home/gbase/backup/pro_backup/log #备份日志目录数据库参数前置配置增量备份必须开启#开启归档模式 gs_guc reload -N all -I all -c archive_modeon#每30分钟自动归档日志 gs_guc reload -N all -I all -c archive_timeout1800#开启增量数据页跟踪PTRACK增量必备 gs_guc reload -N all -I all -c enable_cbm_trackingon#配置归档日志落地路径按磁盘规划调整 gs_guc reload -N all -I all -c archive_command cp %p /home/gbase/backup/archive_dir/%f1.2.3 备份执行操作#第一步初始化备份实例首次部署仅执行一次 sh gbasepro_backup.sh -b init #第二步执行物理全量备份 sh gbasepro_backup.sh -b full #第三步执行PTRACK增量备份 sh gbasepro_backup.sh -b ptrack #第四步查看所有历史备份记录校验备份有效性 sh gbasepro_backup.sh -b show1.2.4 备份定时挂载周全量 日增量组合策略采用每周一次全量、每日增量的混合备份策略平衡备份耗时与存储成本切换 gbase 用户sudo su - gbase赋予脚本权限chmod x /home/gbase/bin/gbasepro_backup.sh编辑定时任务crontab -e写入调度规则#每周日凌晨 1 点执行全量备份输出独立日志 0 1 * * 0 /home/gbase/bin/gbasepro_backup.sh -b full /home/gbase/log/gbase_full_$(date \%F).log 21 #周一至周六凌晨 1 点执行增量备份输出独立日志 0 1 * * 1-6 /home/gbase/bin/gbasepro_backup.sh -b ptrack /home/gbase/log/gbase_inc_$(date \%F).log 212. 远程异地备份远程备份指备份存储服务器与数据库主机分属不同机房、不同服务器用于异地灾备规避本地服务器磁盘损坏、机房故障导致备份丢失风险。整体执行逻辑与本地备份完全一致仅需满足两项前置条件① 远程备机安装与数据库同版本 GBase 8c 客户端工具② 脚本中数据库 IP 填写集群主节点业务 IP同时配置免密 SSH 通道实现文件传输。2.1 逻辑备份远程逻辑备份脚本、修改参数、执行方式、定时任务与本地逻辑备份完全通用仅需调整数据库 IP 为远端生产库主 IP支持跨机房多库批量导出归档。2.1.1 备份脚本样例同 1.1.1 本地逻辑备份脚本仅修改 GBASE_HOST 为生产库远程 IP。2.1.2 备份脚本修改点仅需根据远程存储服务器磁盘规划修改存储目录DIR_BACKUP/home/gbase/backup #远程备机存储根目录DIR_LOG/home/gbase/backup/backup_log #远程备机日志目录2.1.3 备份执行sh gbase_backup.sh 172.16.X.X database1 database2 参数 1 为远程生产数据库主机 IP后续为待备份数据库名称。2.1.4 备份定时任务挂载定时规则与本地逻辑备份一致在远程备机的 gbase 用户下配置 crontab。2.2 物理备份远程物理备份依托 gs_probackup 远程 SSH 传输能力可直接将生产库物理文件同步至异地备机支持归档日志异地同步满足两地三中心灾备规范。2.2.1 备份脚本样例同 1.2.1 本地物理备份脚本新增异地归档传输配置。2.2.2 备份脚本修改点 异地归档配置脚本内基础参数修改项同本地物理备份异地归档额外配置归档传输命令#异地归档日志传输替换为备机实际IP gs_guc reload -N all -I all -c archive_command scp %p gbase172.16.X.X:/data/mpp/backup/zhck/archive_dir/%f2.2.3 备份执行执行命令与本地物理备份一致在远程备机执行sh gbasepro_backup.sh -b initsh gbasepro_backup.sh -b fullsh gbasepro_backup.sh -b ptracksh gbasepro_backup.sh -b show2.2.4 备份定时挂载定时规则与本地物理备份一致在远程灾备服务器配置 crontab 调度。3. 逻辑恢复操作规范逻辑备份文件后缀为.dump适用于单库迁移、误删表 / 库精准恢复恢复前需将备份文件上传至目标恢复服务器执行标准恢复命令gs_restore -p 15400 -U gbase -W****** -d 目标数据库名 /tmp/备份文件.dump可支持恢复至不同 GBase 8c 兼容版本环境灵活性高适合开发测试环境数据克隆。4. 物理全量恢复操作规范物理恢复依托完整物理备份 归档日志可整实例快速恢复适合服务器硬件故障、集群整体损坏场景恢复至原集群会停止数据库对外服务存在业务中断风险执行前需提前评估业务影响建议业务低峰期操作仅恢复主节点数据目录备节点无需单独恢复。查看集群数据目录gs_om -t status --detail完整停止数据库集群gs_om -t stop备份原有损坏数据目录防止二次数据丢失mv /data/database/install/data/dn /data/database/install/data/dn_bak查询可用备份集 IDsh gbasepro_backup.sh -b show执行本地恢复替换备份集 ID、目标数据目录gs_probackup restore -B /home/gbase/backup/pro_backup --instancegbase_proback -D /opt/software/data/single_node -i T5K5MX异地备机远程恢复命令gs_probackup restore -B /home/gbase/backup/ --instancegbase_cluster -D /home/gbase/restore_test -i T5K5MX --remote-host172.*.*.* --remote-usergbase恢复完成启动集群gs_om -t start方案整体价值体现整套 GBase 8c 集中式版本备份方案覆盖本地基础防护、远程异地灾备双场景融合逻辑、物理两种备份模式形成 “全量 增量 归档日志” 多层级数据保护体系一方面通过自动化脚本与定时调度实现 7×24 小时无人值守备份大幅降低数据库运维人工成本标准化脚本统一参数、日志、清理规则减少人为操作失误另一方面兼顾中小库灵活迁移、海量集群快速恢复的差异化需求物理备份支持分钟级实例恢复、PITR 任意时间点回滚满足金融、政务等行业数据安全监管要求异地备份机制彻底规避单机 / 单机房故障导致的数据彻底丢失风险。同时方案内置备份生命周期自动清理、完整运行日志留存、备份集校验能力可快速定位备份失败问题平衡存储资源消耗与数据留存周期在保障数据零丢失、缩短故障 RTO/RPO 恢复指标的前提下最大化降低企业存储与运维投入构建稳定、合规、低成本的 GBase 8c 数据库数据安全防线。