kingbase-备份恢复

1、物理备份恢复

物理备份恢复是通过备份集和归档日志将数据库转化为历史状态的过程,KingbaseES 通过备份磁盘中数据目录下的物理文件(数据文件、控制文件和日志文件),依靠还原数据文件和日志恢复技术来保护数据。目前只支持数据库实例整体备份,不支持单个数据库或数据表备份。

1.1 sys_rman 工具物理备份。

sys_rman 工具不仅备份数据集,还备份归档日志,设置 archive_command 参数,所以即使在没有执行 sys_rman 命令时,当发生wal日志切换,也会进行日志归档。此时备份集中的数据变化,包括当时的备份文件和归档文件。

修改sys_backup.conf文件

$ cat ./app/ES/V8/KESRealPro/V008R006C007B0024/Server/share/sys_backup.conf | grep -v ^# | grep -v ^$

## single 表示备份单机环境,而非集群
_target_db_style="single"
## 要备份的主机IP地址
_one_db_ip="127.0.0.1"
## 备份文件保存的目标IP地址 
_repo_ip="127.0.0.1"
## 该备份任务标签
_stanza_name="kingbase"
## 运行kingbase操作系统用户  
_os_user_name="kingbase"
## 备份文件的存放路径 
_repo_path="/backup/rman"
## 备份保留策略,保留5份
_repo_retention_full_count=5 
## 全量备份的频率,每7天做一次全量备份
_crond_full_days=7  
## 差异备份的频率,0 表示不做备份
_crond_diff_days=0 
## 增量备份的频率,1 表示每天备份
_crond_incr_days=1
## 指定全量备份的时间,2 凌晨2点
_crond_full_hour=2 
_crond_diff_hour=3 
_crond_incr_hour=4 
_band_width=0
_os_ip_cmd="/sbin/ip"
_os_rm_cmd="/bin/rm"
_os_sed_cmd="/bin/sed"
_os_grep_cmd="/bin/grep"
_single_data_dir="/home/kingbase/app/ES/V8/data"
_single_bin_dir="/home/kingbase/app/ES/V8/Server/bin"
_single_db_user="system"
_single_db_port="54321"
_use_scmd=on
_start_fast=y
_compress_type=none
_non_archived_space=1024

设置 system 用户免密登录,在sys_hba.conf 文件中添加以下内容

host all system 127.0.0.1/32 trust

开启数据库归档,编辑 kingbase.conf 文件

$ vim kingbase.conf
archive_mode = on
## 该参数在初始化时自动赋值
archive_command = ''

进行初始化操作

$ sys_backup.sh init
ERROR: securecmdd dose not work,please check
## 该报错原因是securecmdd服务没有启动
$ cd /home/kingbase/app/ES/V8/ClientTools/guitools/DeployTools/zip/securecmdd/bin/
$ sh sys_HAscmdd.sh init
$ sh sys_HAscmdd.sh start

初始化完成后,自动创建备份目录结构,生成 sys_rman.conf 配置文件

$ ls -l /backup/rman

登录数据库,查看 archive_command 参数已经被赋值

$ ksql test system
ksql (V8.0)
输入 "help" 来获取帮助信息.

test=# show archive_command;
                                                              archive_command                                                               
--------------------------------------------------------------------------------------------------------------------------------------------
 export TZ=Asia/Shanghai;/home/kingbase/app/ES/V8/Server/bin/sys_rman --config /backup/rman/sys_rman.conf --stanza=kingbase archive-push %p

查看备份集,初始化过程自动做一次全量备份

$ sys_rman --config=/backup/rman/sys_rman.conf --stanza=kingbase info

sys_backup.sh 备份管理

## 启动定时备份任务,自动添加到 crontab 任务中
$ sys_backup.sh start
## 暂停定时备份任务
$ sys_backup.sh pause
## 恢复定时备份任务
$ sys_backup.sh unpause
## 停止删除定时备份任务
$ sys_backup.sh stop

全量备份

$ sys_rman --config=/backup/rman/sys_rman.conf --stanza=kingbase --archive-copy --type=full backup

差异备份,和上一次完全备份去比较差异的数据

$ sys_rman --config=/backup/rman/sys_rman.conf --stanza=kingbase --archive-copy --type=diff backup

增量备份,和上一次备份去比较差异的数据

$ sys_rman --config=/backup/rman/sys_rman.conf --stanza=kingbase --archive-copy --type=incr backup
1.2 sys_rman 数据恢复

模拟数据库故障,删除 data 目录下所有文件

完全恢复,包括差异备份和增量备份的所有数据

$ sys_rman --config=/backup/rman/sys_rman.conf --stanza=kingbase restore
$ sys_ctl start -D ./app/ES/V8/data

基于时间的不完全恢复
1、查看备份信息,确认备份时间点
2、删除表
3、停止数据库,删除 data 目录下所有文件
4、基于时间不完全恢复

$ sys_rman --config=/backup/rman/sys_rman.conf --stanza=kingbase --type=time --target='2023-08-16 20:50:43' --target-action=promote restore

5、启动数据库
6、在第二步删除的表,此时仍存在数据库中,未被删除

如果不指定--tar-action=promote 选项,系统默认使用--targer-action=pause 选项,此时系统处于只读状态,需要执行 select pg_wal_replay_resume 命令切换时间线,进入读写状态。

基于事务的不完全恢复

$ sys_rman --config=/backup/rman/sys_rman.conf --stanza=kingbase --type=xid --target='1296' --set='20230816-204326F_20230816-205042I' --target-action=promote restore

保留策略删除备份集,保留最近两次全量备份

$ sys_rman --config=/backup/rman/sys_rman.conf --stanza=kingbase --repo1-retention-full=2 expire

删除指定备份集

$ sys_rman --config=/backup/rman/sys_rman.conf --stanza=kingbase --set='20220126-095932F' expire

检测备份集可用性

$ sys_rman --config=/backup/rman/sys_rman.conf --stanza=kingbase check
2、逻辑备份恢复

逻辑备份还原是利用备份的数据库对象把数据库从一个快照转化到另一个快照的过程(数据库在某个时刻的
一个状态称为一个快照)。KingbaseES 提供数据库对象的联机逻辑备份恢复功能,备份对象包括:数据库、模式、表、视图、约束、权限、触发器、函数、序列。

逻辑备份主要支持导出整个实例、指定库、指定模式、指定表等几种导出的方式。

  • sys_dumpall 可以导出整个实例或角色表空间等定义和数据

  • sys_dump 可以导出指定数据库的所有对象定义和内容,也可以导出指定模式或指定表的对象定义和内容。

准备数据

$ ksql test system
ksql (V8.0)
输入 "help" 来获取帮助信息.

test=# create user itpux with password 'itpux123' nocreatedb;

test=# create database itpuxdb with owner=itpux template=template0 encoding='UTF8';

$ ksql itpuxdb itpux
ksql (V8.0)
输入 "help" 来获取帮助信息.

itpuxdb=> create table t1(name varchar(12));

itpuxdb=> insert into t1 values('oracle'),('sybase'),('mysql'),('postgresql'),('kingbase');

备份 itpuxdb 数据库

$ sys_dump -U itpux -d itpuxdb -W > ./itpuxdb.dumpfile

删除 itpuxdb 数据库中的对象,数据恢复

$ ksql itpuxdb system < ./itpuxdb.dumpfile

验证数据

$ ksql itpuxdb itpux -c 'select * from t1;'

sys_dumpall 备份数据库整体

$ sys_dumpall -U system > ./all.dump
posted @   原来是你~~~  阅读(908)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!
点击右上角即可分享
微信分享提示