本文使用的配置:
虚拟机:CentOS7
KES版本:kingbaseES V8R6 通用型
license:企业版
文件目录:
- 安装路径:/KingbaseES/V8
- 主数据目录:/data
- 备份目录:/backup
一、准备工作
物理备份不似逻辑备份,可以直接使用,我们需要在执行备份之前做一系列的准备工作。
1、配置文件
在配置物理备份之前,我们首先要做的就是,修改配置文件。
1.1、拷贝配置文件到指定目录
sys_rman.sh 的配置文件也就是物理备份所需要的配置文件就是sys_backup.conf,这个文件的位置位于/安装目录/Server/share中,但是在执行sys_rman.sh 的时候,它默认加载配置文件的地址是在/安装目录/Server/bin下面的sys_backup.conf,如果找不到才回去/安装目录/Server/share中查找,所以我们可以将配置文件sys_backup.conf复制到/bin下面进行修改。
复制配置文件:
cd /KingbaseES/V8/Server/share
cp sys_rman.conf ../bin/
编辑配置文件:
# target db style enum: single/cluster
_target_db_style="single"
# one kingbase node IP
# just provide one IP, script will use 'repmgr cluster show' get other node IP
_one_db_ip="127.0.0.1"
# local repo IP, inner-REPO, must be same as one_db_ip, means repo located in one db node
# outer repo IP, outer-REPO, means repo located in outer node
_repo_ip="127.0.0.1"
# label of this cluster
_stanza_name="kingbase"
# OS user name of database
_os_user_name="kingbase"
# !!!! dir to store the backup files
# should be accessable for the OS user
_repo_path="/backup/rman"
# count of keep, over the count FULL-backup will be remove
_repo_retention_full_count=5
# count of days, interval to do FULL-backup
_crond_full_days=7
# count of days, interval to do DIFF-backup
_crond_diff_days=0
# count of days, interval to do INCR-backup
_crond_incr_days=1
# HOUR to do the FULL-backup
_crond_full_hour=2
# HOUR to do the DIFF-backup
_crond_diff_hour=3
# HOUR to do the INCR-backup
_crond_incr_hour=4
# OS cmd define
_os_ip_cmd="/usr/sbin/ip"
_os_rm_cmd="/usr/bin/rm"
_os_sed_cmd="/usr/bin/sed"
_os_grep_cmd="/usr/bin/grep"
# !!! these follow 4 parameter ONLY for single style
# data dir of single
_single_data_dir="/data"
# bin dir of single
_single_bin_dir="/KingbaseES/V8/Server/bin"
# database user of single
_single_db_user="system"
# database port of single
_single_db_port="54321"
因为我们在这里面设置了定时备份的时间啊,定时备份的频率等等,所以在每次进行自动备份的时候我们要求不需要我们本人输入密码,我们希望到点了就直接开始备份,所以对于system用户,我们需要设置他免密登录数据库开始备份。
设置免密登录:
vim /data/sys_hba.conf
#加入下面这行
local all system 127.0.0.1/32 trust
修改归档参数:
vim /data/kingbase.conf
archive_mode = on
archive_command = ''
#archive_command在初始化数据库的时候会自动赋值
1.2、执行初始化命令
在做好前期的准备工作之后,就开始执行初始化命令。
sys_backup.sh init
#接着输入root用户的密码
接着可以去/backup/rman下面查看初始化自动创建的备份目录结构。
ll /backup/rman
然后登录数据库,查看归档参数是否更改成功。
#登录数据库
ksql test system
#查看归档参数
show archive_mode;
show archive_command;
最后可以看一备份集,在初始化完成之后会执行一次全量备份。
sys_rman --config=/backup/rman/sys_rman.conf --stanza=kingbase info
1.3、sys_backup.sh的其他用法
#1、启动定时备份任务
sys_backup.sh start
#2、暂停定时备份任务
sys_backup.sh pause
#3、恢复定时备份任务
sys_backup.sh unpause
#4、取消定时备份任务
sys_backup.sh stop
二、执行备份
1、全量备份
sys_rman --config=/backup/rman/sys_rman.conf --stanza=kingbase --archive-copy --type=full backup
参数解析:
- --config=/backup/rman/sys_rman.conf:指定配置文件
- --stanza=kingbase:指定标签,在配置文件中找到我们想要的配置参数
- --archive-copy:备份的时候同时备份wal段
- --type:指定备份的类型,这里指定的是full,全量备份
2、差异备份
sys_rman --config=/backup/rman/sys_rman.conf --stanza=kingbase --archive-copy --type=diff backup
3、增量备份
sys_rman --config=/backup/rman/sys_rman.conf --stanza=kingbase --archive-copy --type=incr backup
4、查看备份集
sys_rman --config=/backup/rman/sys_rman.conf --stanza=kingbase info
三、执行恢复
1、完全恢复
在进行物理备份恢复的时候需要关闭数据库实例。我们先删除/data数据库下面的所有文件,包括隐藏文件,之后直接执行完全恢复。
sys_rman --config=/backup/rman/sys_rman.conf --stanza=kingbase restore
2、不完全恢复
2.1、基于时间的不完全恢复
这里想要实现的是将数据库恢复到某个时间点的状态,比如说在某个时间点,由于错误操作导致数据被删除了,我们需要恢复到删除数据的时间点之前,但是在这里我们往往不能十分确定删除数据的时间点的准确时间,所以我们需要多次尝试,尽量减少损失。
sys_rman --config=/backup/rman/sys_rman.conf --stanza=kingbase --type=time --target='xxxx-xx-xx xx:xx:xx' --target-action=promote restore
参数解释:
- --target=’xxxx-xx-xx xx:xx:xx‘:恢复的时间点
- --target-action=promote:在恢复操作完成之后需要执行的操作,这里的promote表示将恢复数据提升为当前数据库版本。
2.2、基于事务ID的不完全恢复
在实际的操作过程中,可能时间不太好确定准确的时间点,但是对于事务来说,我们可以找到事务的ID,基于这个ID我们可以恢复到这个ID事务执行结束的状态。
sys_rman --config=/backup/rman/sys_rman.conf --stanza=kingbase --type=xid --target='2344' - --set='20230922-160938F' -target-action=promote restore
参数解释:
- --set=’20230922-160938F‘:指定使用的备份集,通常我们使用的就是最近的一个全量备份备份集。
四、恢复物理备份到新的目录
1、在原库中创建表空间和对象
1.1、创建目录并授权
跟之前KES安装一样,我们这里再创建一个/data类似的数据目录。
mkdir /home/kingbase/tbs01
chmod 700 /home/kingbase/tbs01
1.2、新建表空间并插入数据
create tablespace tbs01 loction'/home/kingbase/tbs01';
create table t001(id int,name text) tablespace tbs01;
insert into t001 values(1,'xiangxiao');
2、在原库中执行备份
sys_rman --config=/backup/rman/sys_rman.conf --stanza=kingbase --archive-copy --type=full backup
3、恢复备份到新的集簇目录中
创建新的目录,并且授权。
mkdir /home/kingbase/data01
mkdir /home/kingbase/tbs02
chmod 700 /home/kingbase/data01
chmod 700 /home/kingbase/tbs02
开始备份:
sys_rman --config=/backup/rman/sys_rman.conf --stanza=kingbase --kb1-path=/home/kingbase/data01 --stable-map=tbs01=/home/kingbase/tbs02 restore
参数解释:
- --kb1-path:指定数据库数据路径
- --stable-map:指定映射文件路径
4、修改新的数据库实例的端口并启动
echo 'port=55555'>>/home/kingbase/data01/kingbase.conf