1 开启归档
alter system set archive_mode='on';
重启数据库生效
sys_ctl restart
查看是否开启归档
![Image]()
2 使用sys_encpwd为system设置口令密文。
sys_encpwd -H \* -P \* -D \* -U system -W kingbase
设置后,查看~/.encpwd文件内容。
cat .encpwd
![Image]()
3 允许kingbase用户使用crontab
su - root
chmod a+x,u+s /usr/bin/crontab
ls -l /usr/bin/crontab
![Image]()
4 检查备份目录磁盘空间充足和kingbase用户有权限自动生成目录
df -Ph /data/
ls -ld /data/
![Image]()
5 修改备份配置文件
sys_backup.conf是sys_backup.sh的配置文件,默认在安装目录/Server/share中,但执行初始化备份会优先找安装目录bin下面的文件,将改文件复制到bin目录下面进行修改
cd /home/kingbase/kdb/KESRealPro/V009R001C001B0025/Server/share
cp sys_backup.conf ../bin/
编辑sys_backup.conf:重点红色部分。
vi /home/kingbase/kdb/KESRealPro/V009R001C001B0025/Server/bin/sys_backup.conf
![Image]()
编辑好之后,执行如下命令,检查相关参数
grep -v ^# /home/kingbase/kdb/KESRealPro/V009R001C001B0025/Server/bin/sys_backup.conf
![Image]()
相关参数说明
![Image]()
6 执行初始化备份脚本
sys_backup.sh init
![Image]()
securecmdd 服务没启动,找到 securecmdd.zip文件并解压
![Image]()
![image]()
归档配置有问题
![Image]()
修改归档参数。
vi /home/kingbase/kdb/data/kingbase.conf
archive_mode = on
archive_command = ''
修改之后,重启数据库再次备份
![Image]()
原因是 sys_rman备份会在 /tmp/sys_rman/生成kingbase.stop,备份完成会删除此文件。 如果有备份没完成这个文件不会删除,会导致报错,将文件删除之后,备份成功
rm -rf /tmp/sys_rman/kingbase.stop
rm -rf /data/rman/
![Image]()
7 检查备份集
初始化过程会自动做一次全量备份,初始化过程会自动在备份目录中创建sys_rman.conf配置文件,并且依照sys_backup.conf文件中的设置对sys_rman.conf文件中的参数进行设置,后续sys_rman命令将使用这个文件中配置的参数。
sys_rman --config=/data/rman/sys_rman.conf --stanza=kingbase info
![Image]()
相关参数说明
--config=/data/rman/sys_rman.conf 指定配置文件
--stanza=kingbase 指定标签
--archive-copy 指定备份时同时备份WAL文件
--type=full backup 指定备份类型
8 物理备份
创建测试表tab_full ,插入数据之后进行日志切换
![]()
8.1 执行全量备份
sys_rman --config=/data/rman/sys_rman.conf --stanza=kingbase --archive-copy --type=full backup
![Image]()
登录数据库,创建一条测试数据,进行日志切换
create table tab_diff(id int);
insert into tab_diff values(1);
SELECT sys_switch_wal();
8.2 差异备份
sys_rman --config=/data/rman/sys_rman.conf --stanza=kingbase --archive-copy --type=diff backup
![Image]()
登录数据库,创建一条测试数据,进行日志切换
CREATE TABLE tab_incr (id int,name text);
INSERT INTO tab_incr VALUES(1,'xyz'),(2,'opq');
SELECT sys_switch_wal();
8.3 增量备份
sys_rman --config=/data/rman/sys_rman.conf --stanza=kingbase --archive-copy --type=incr backup
![Image]()
差异备份和增量备份的区别
差异备份:是指上次全量备份以来改变的数据
增量备份:是指上次(全量,增量或差异)备份以来改变的数据
8.4 查看备份集
sys_rman --config=/data/rman/sys_rman.conf --stanza=kingbase inf
![Image]()
9 定时备份任务脚本
sys_backup.sh start(启动定时备份任务)
sys_backup.sh pause(暂停定时备份任务)
sys_backup.sh unpause(恢复定时备份任务)
sys_backup.sh stop(取消定时备份任务)
10 物理还原
停止数据库服务,删除实例目录/home/kingbase/kdb/data下面文件
10.1 执行完全还原
sys_rman --config=/data/rman/sys_rman.conf --stanza=kingbase restore
![Image]()
删除之后还是提示目录下面存在文件,添加--delta 又报该路径没有文件
![Image]()
使用kingbase创建一个/data/kdb/data 目录,指定这个目录进行恢复,执行成功
sys_rman --config=/data/rman/sys_rman.conf --stanza=kingbase --kb1-path=/data/kdb/data restore
![Image]()
![Image]()
在 /home/kingbase/.bashrc 配置环境变量
export KINGBASE_DATA=/data/kdb/data
配置生效
source /home/kingbase/.bashrc
改完之后还是一样的情况,将/data/rman/sys_rman.conf 配置文件里面实例路径改了也不行,问题不知道出在哪里,启动和停止都需要 -D 指定路径,其他服务都无法启动
还是尝试在这个目录/home/kingbase/kdb/data去还原,将这目录里面data目录删除重建之后可以正常恢复 ,应该是以前/home/kingbase/kdb/data下面一些隐藏文件没删除导致
sys_rman --config=/data/rman/sys_rman.conf --stanza=kingbase restore
可以看到数据已经恢复成功
10.2 恢复到指定时间点
sys_rman --config=/data/rman/sys_rman.conf --stanza=kingbase --type=time --target='2025-08-06 10:13:08' --target-action=promote restore
11 备份文件保留策略
在sys_rman.conf中配置永久保留策略,保留最近5次全量备份,经验证全量备份删除会同步将这个全量备份之前的增量及差异备份删除
vi /data/rman/sys_rman.conf
cat /data/rman/sys_rman.conf |grep retention|grep -v grep