人大金仓数据库逻辑备份与恢复实战:从命令解析到场景应用

张开发
2026/4/9 8:22:12 15 分钟阅读

分享文章

人大金仓数据库逻辑备份与恢复实战:从命令解析到场景应用
1. 人大金仓数据库备份恢复核心命令解析第一次接触人大金仓数据库的备份恢复功能时我被各种参数选项搞得晕头转向。经过几个实际项目的摸爬滚打终于摸清了这些命令的门道。下面我就用最直白的语言带你快速掌握这些救命命令。sys_dump是备份的瑞士军刀最常用的两个参数组合是-F和-f。-F指定格式p是纯SQL文本c是压缩二进制-f指定输出文件路径。比如要备份整个test数据库到SQL文件sys_dump -Usystem -dtest -F p -f /backup/test_full.sql dc.log 21这里有个新手常踩的坑输出重定向符号和21必须写在命令最后否则会导致日志文件记录不全。我曾在紧急恢复时因为这个细节浪费了半小时排查问题。二进制格式的.dmp文件体积更小适合大型数据库sys_dump -Usystem -dtest -F c -f /backup/test_full.dmp dc.log 21恢复时对应使用ksql或sys_restore。特别注意二进制恢复时要加-v参数显示详细过程# SQL恢复 ksql -Usystem -dnewdb -f /backup/test_full.sql dr.log 21 # 二进制恢复 sys_restore -Usystem -dnewdb -v /backup/test_full.dmp dr.log 212. 实战场景整库迁移五步法去年帮客户做系统迁移时我总结出一套稳如老狗的整库迁移方案。整个过程就像搬家既要保证物品完好又要确保新家布局合理。第一步源库健康检查执行前务必用这个命令检查数据库状态ksql -Usystem -dtest -c SELECT datname,pg_size_pretty(pg_database_size(datname)) FROM pg_database;第二步制定备份策略小型库50GB直接用SQL格式全量备份中型库50-200GB二进制格式全量增量大型库200GB二进制格式并行备份第三步实际备份操作这是我常用的夜间备份脚本模板#!/bin/bash BACKUP_DIR/backup/$(date %Y%m%d) mkdir -p $BACKUP_DIR sys_dump -Usystem -dtest -F c -j 4 -f $BACKUP_DIR/full.dmp $BACKUP_DIR/backup.log 21第四步目标库预处理新建数据库时要特别注意编码和模板CREATE DATABASE newdb WITH TEMPLATE template0 ENCODING UTF8 LC_COLLATE zh_CN.utf8 LC_CTYPE zh_CN.utf8;第五步恢复与验证恢复后立即运行数据校验脚本-- 检查表数量 SELECT count(*) FROM pg_tables WHERE schemaname NOT LIKE pg_%; -- 抽样数据校验 SELECT (SELECT count(*) FROM src_table) as src_cnt, (SELECT count(*) FROM dest_table) as dest_cnt;3. 救命指南误删表紧急恢复凌晨三点被电话吵醒客户误删了核心业务表——这种场景DBA都懂。经过几次血泪教训我整理出这套黄金30分钟恢复方案。场景一有完整备份的情况如果表在最近备份中存在先用这个命令快速定位备份文件grep -l CREATE TABLE public.deleted_table /backup/*.sql找到文件后精准恢复单表ksql -Usystem -dtest -t public.deleted_table -f /backup/20230801_full.sql restore.log 21场景二只有二进制备份二进制恢复单表要特别注意模式匹配sys_restore -Usystem -dtest -t public.deleted_table -v /backup/20230801_full.dmp restore.log 21场景三无备份的终极方案万不得已时尝试从WAL日志恢复立即停止数据库写入备份当前pg_wal目录使用kingbase_waldump工具分析日志4. 高级技巧跨模式数据同步在做数据仓库项目时经常需要跨模式同步数据。传统的ETL工具太重其实用原生命令就能高效完成。方法一COPY命令组合这是我常用的CSV中转方案-- 导出源数据 COPY (SELECT * FROM source_schema.source_table WHERE create_time 2023-01-01) TO /tmp/transfer.csv WITH CSV HEADER; -- 导入目标表 COPY target_schema.target_table FROM /tmp/transfer.csv WITH CSV HEADER;方法二管道直接传输更高效的方式是跳过中间文件ksql -Usystem -dsourcedb -c COPY (SELECT * FROM source_table) TO STDOUT WITH CSV | \ ksql -Usystem -dtargetdb -c COPY target_table FROM STDIN WITH CSV方法三模式映射恢复二进制恢复时直接转换模式sys_restore -Usystem -dnewdb -n source_schema -G target_schema -v /backup/data.dmp5. 避坑宝典常见错误排查这些错误我全都踩过现在把排查方法无偿奉上。错误1权限不足典型报错permission denied for schema 解决方案-- 检查权限 SELECT nspname,usename FROM pg_namespace,pg_user WHERE has_schema_privilege(usename,nspname,CREATE); -- 授权语句示例 GRANT ALL ON SCHEMA problem_schema TO recovery_user;错误2版本不兼容备份恢复时最怕版本差异先用这个命令检查strings backup_file | grep KINGBASE错误3空间不足备份前务必检查df -h /backup建议在备份命令中加入自动检查#!/bin/bash MIN_SPACE100 #GB AVAILABLE$(df -BG /backup | awk NR2{print $4} | tr -d G) if [ $AVAILABLE -lt $MIN_SPACE ]; then echo Error: Insufficient disk space 2 exit 1 fi6. 自动化运维实战最后分享我的自动化备份方案这套系统稳定运行了3年没出过差错。完整备份脚本#!/bin/bash # 备份配置 DB_USERsystem BACKUP_DIR/backup/$(date %Y%m%d) LOG_FILE$BACKUP_DIR/backup_$(date %H%M).log DB_LIST$(ksql -U $DB_USER -l | awk NR2{print $1} | grep -v template) # 创建目录 mkdir -p $BACKUP_DIR # 并行备份所有数据库 for DB in $DB_LIST; do { echo [$(date)] Starting backup $DB sys_dump -U $DB_USER -d $DB -F c -f $BACKUP_DIR/${DB}.dmp 2 $LOG_FILE echo [$(date)] Finished backup $DB } done wait # 生成校验文件 md5sum $BACKUP_DIR/*.dmp $BACKUP_DIR/checksum.md5监控报警配置# 每日检查备份是否成功 if ! grep -q completed successfully /var/log/backup.log; then mailx -s Backup Failed! dba-teamcompany.com /var/log/backup.log fi定期清理策略# 保留最近7天备份 find /backup -type d -mtime 7 -exec rm -rf {} \;

更多文章