Kingbase单机数据库异机备份与恢复
目录
2.修改redo(异机) 和数据库的sys_rman.conf文件
安装kingbase数据库
数据库IP:192.168.40.27
备份服务器IP:192.168.40.26
数据库安装目录:/opt/Kingbase/ES/V8
数据目录:/opt/Kingbase/ES/V8/data
用户密码:kingbase/kingbase
数据库超管密码:system/1234%^&*Ab
- 两台主机主机都安装相同版本数据库
1、创建用户修改密码
[root@localhost ~]# groupadd kingbase
[root@localhost ~]# useradd -m -d /home/kingbase kingbase -g kingbase
[root@localhost ~]# echo 'kingbase' | passwd --stdin kingbase
更改用户 kingbase 的密码 。
passwd:所有的身份验证令牌已经成功更新。
-
创建安装目录
- 修改所属用户和用户组
- 赋予所属用户(u)读(r)和写(w)的权限。
[root@localhost ~]# mkdir -p /opt/Kingbase/ES/V8
[root@localhost ~]# chown -R kingbase:kingbase /opt/Kingbase/
[root@localhost ~]# chmod -R u+rw /opt/Kingbase/
[root@localhost ~]# mount -o loop KingbaseES_V008R030C011B0003_Lin64_install.iso /mnt/
mount: /dev/loop0 写保护,将以只读方式挂载
3、切换kingbase用户 命令行安装数据库
[root@localhost ~]# su - kingbase
[kingbase@localhost ~]$ cd /mnt/
[kingbase@localhost mnt]$ ./setup.sh -i console
-
启用数据库
/opt/Kingbase/ES/V8/Server/bin/sys_ctl -D /opt/Kingbase/ES/V8/data/ start
- 配置通信
方式一:SSH免密通信
方式二:securecmdd服务连接
下面我们采用securecmdd服务通信 ---请看操作2
1、
步骤 1:在备份服务器(192.168.40.26)操作 切换到kingbase用户,生成 SSH 密钥并推送到数据库服务器:
su - kingbase
# 生成密钥(一路回车,不设密码)
ssh-keygen -t rsa
# 推送公钥到数据库服务器(输入数据库服务器kingbase用户的密码)
ssh-copy-id kingbase@192.168.40.27
步骤 2:验证双向免密 • 在数据库服务器(192.168.40.12)测试:
su - kingbase
ssh kingbase@192.168.40.102 "echo ok" # 无需密码,返回ok
• 在备份服务器(192.168.40.102)测试:
su - kingbase
ssh kingbase@192.168.40.12 "echo ok" # 无需密码,返回ok
2、sys_securecmdd服务的初始化与启动操作
(安全远程连接守护进程)
Root用户执行(数据库和备机服务器都操作)
/opt/Kingbase/ES/V8/Server/bin/sys_HAscmdd.sh init

/opt/Kingbase/ES/V8/Server/bin/sys_HAscmdd.sh start

验证:
(注意:出现下面这种情况需要设置kingbase用户密码,然后再重试)

-
逻辑备份
(注意:逻辑备份需要备机上启用数据库)
备机服务器
1、编辑逻辑备份文件
[kingbase@localhost mnt]$ vim /opt/Kingbase/ES/V8/SupTools/kb_backup/backup8.conf

kdb_home="/opt/Kingbase/ES/V8"
kdb_bin="/opt/Kingbase/ES/V8/Server/bin"
kdbback_dest="/opt/Kingbase/backup/logical"
kdb_user="system"
password="1234%^&*Ab"
kdb_port="54321"
kdb_host="192.168.40.27"
kdb_list=`${kdb_bin}/ksql -p ${kdb_port} -U ${kdb_user} -c "SELECT datname FROM pg_database where datname not in ('templvim ate1','template0');" template1 |head -n -2|tail -n +3`
keep_time="31"
LD_LIBRARY_PATH="/opt/Kingbase/ES/V8/Server/lib"
解释:
· kdb_home="/opt/Kingbase/ES/V8"
- · 定义金仓数据库的安装主目录,路径是/opt/Kingbase/ES/V8。
· kdb_bin="/opt/Kingbase/ES/V8/Server/bin"
- · 定义金仓数据库命令工具(如ksql、备份工具)所在的目录,路径是/opt/Kingbase/ES/V8/Server/bin。
· kdbback_dest="/opt/Kingbase/backup/logical"
- · 定义逻辑备份文件的存储目录,路径是/opt/Kingbase/backup/logical。
· kdb_user="system"
- · 定义连接数据库使用的用户名,这里是金仓数据库的默认管理员用户system。
· password="1234^&*Ab"
- · 定义连接数据库的用户密码(注意:脚本明文写密码存在安全风险)。
· kdb_port="54321"
- · 定义数据库的监听端口,金仓数据库的默认端口是54321。
· kdb_host="192.168.40.27"
- · 定义数据库所在服务器的 IP 地址,这里是192.168.40.27。
· kdb_list=${kdb_bin}/ksql -p ${kdb_port} -U $${kdb_user} -c "SELECT datname FROM pg_database where datname not in ( 'template1','template0' );" template1 |head -n -2|tail -n +3``
- · 执行ksql命令查询数据库列表:筛选出除了系统模板库template1、template0之外的所有业务数据库,并用head/tail处理输出格式,结果存到kdb_list变量中(用于后续批量备份这些数据库)。
· keep_time="31"
- · 定义备份文件的保留时间,这里是 31 天(超过时间的备份会被清理)。
· LD_LIBRARY_PATH="/opt/Kingbase/ES/V8/Server/lib"
· 设置系统的库文件搜索路径,指定金仓数据库依赖的动态链接库所在目录,确保命令工具能找到对应的依赖库。
2、加密数据库连接密码
sys_encpwd -H \* -P \* -D \* -W '1234%^&*Ab' -U system
3、执行逻辑备份脚本
/opt/Kingbase/ES/V8/SupTools/kb_backup/fast_deploy_backup8.sh

-
物理备份
(物理备份不需要启用数据库服务)
1、编辑sys_backup.conf 备份配置文件
Vim /opt/Kingbase/ES/V8/Server/bin/share/sys_backup.conf
# target db style enum: single/cluster/single-pro
_target_db_style="single"
# one kingbase node IP/hostname
# just provide one IP/hostname, script will use 'repmgr cluster show' get other node IP/hostname
_one_db_ip="192.168.40.27"
如果是单节点数据库,直接填该节点IP;如果是集群,填任意一个节点IP即可
# local repo IP/hostname, inner-REPO, means repo located in one db node
# outer repo IP/hostname, outer-REPO, means repo located in outer node
# support MULTI repo IP/hostname, separate by space, example: "10.10.10.11 10.10.10.12"
_repo_ip="192.168.40.26"
备份文件存储在 IP 为192.168.40.26的远程服务器上
# 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="/opt/Kingbase/backup/rman" (指定备份文件的存储目录)
# data dir of single
_single_data_dir="/opt/Kingbase/ES/V8/data" (数据库数据目录)
# bin dir of single
_single_bin_dir="/opt/Kingbase/ES/V8/Server/bin" (数据库命令行工具目录)
# on means sys_securecmd, off means normal ssh
_use_scmd=on
# 当值为on时,使用sys_securecmd工具;当值为off时,使用普通的ssh
# whether to gz the target file, none or gz
_compress_type=none
一般为压缩备份
2.备份脚本的初始化操作
(备机服务器上操作)
[kingbase@localhost bin]$ ./sys_backup.sh init

启动备份任务
[kingbase@localhost bin]$ ./sys_backup.sh start

/opt/Kingbase/ES/V8/Server/bin/sys_rman --config=/opt/Kingbase/backup/rman/sys_rman.conf --stanza=kingbase info

查看:
WAL 归档推送操作成功完成

本地备份操作已成功完成

备份环境检查
· 检查备份存储库(repo1)的配置是否正常;
· 检查 WAL 归档是否正常:日志中明确显示WAL segment 000000010000000000000006 successfully archived,即 WAL 日志段已成功归档到指定存储路径

执行一次全量备份
/opt/Kingbase/ES/V8/Server/bin/sys_rman --config=/opt/Kingbase/backup/rman/sys_rman.conf --stanza=kingbase --archive-copy --type=full backup

查看
/opt/Kingbase/ES/V8/Server/bin/sys_rman --config=/opt/Kingbase/backup/rman/sys_rman.conf --stanza=kingbase info

在数据库上查看 rman下sys_rman.conf文件

[kingbase@localhost rman]$ cat sys_rman.conf
# Genarate by script at 20260109153755, should not change manually
[kingbase]
kb1-path=/opt/Kingbase/ES/V8/data
#指定数据库节点 1 的数据目录路径,sys_rman通过此路径访问数据库文件
[global]
repo1-host=192.168.40.26
#备份存储库所在的主机 IP
repo1-host-user=kingbase
#访问备份存储库使用的操作系统用户
repo1-host-config=/opt/Kingbase/backup/rman/sys_rman.conf
#备份存储库主机上的配置文件路径
repo1-path=/opt/Kingbase/backup/rman
#备份存储库的本地路径(备份文件存储位置)
archive-statistics=n
#禁用归档文件的统计信息收集
log-path=/opt/Kingbase/ES/V8/Server/log
#sys_rman的日志存储路径
log-level-file=info
log-level-console=info
log-subprocess=y
#### support: gz none
compress-type=none
#备份文件不压缩
compress-level=3
#压缩级别(仅compress-type=gz时生效)
band-width=0
#不限速(0 表示无带宽限制)
repo-disk-warn=16384MB
#备份存储库剩余空间低于 16384MB 时告警
repo-disk-error=1024MB
#备份存储库剩余空间低于 1024MB 时报错终止
archive-timeout=600
#WAL 归档超时时间(600 秒)
archive-mode-check=n
#不检查数据库的归档模式
link-all=y
#备份时保留所有文件的链接关系
cmd-ssh=/opt/Kingbase/ES/V8/Server/bin/sys_securecmd
#远程连接使用的工具(sys_securecmd)
查看备机rman的sys_rman.conf 文件

# Genarate by script at 20260109153754, should not change manually
[kingbase] (数据库节点配置)
kb1-path=/opt/Kingbase/ES/V8/data
kb1-port=54321
kb1-user=system
kb1-host=192.168.40.27
kb1-host-user=kingbase
[global] (全局备份配置)
repo1-path=/opt/Kingbase/backup/rman
repo1-retention-full=5
archive-statistics=n
log-path=/opt/Kingbase/ES/V8/Server/log
log-level-file=info
log-level-console=info
log-subprocess=y
process-max=4
#### support: gz none
compress-type=none
compress-level=3
start-fast=y
link-all=y
archive-mode-check=n
band-width=0
repo-disk-warn=16384MB
repo-disk-error=1024MB
non-archived-space=1024
archive-timeout=600
#### Enable below alert-command to take custom action on issue during backup, such as sending alert mail
# alert-command=( cd /opt/Kingbase/ES/V8/Server/bin; ./sys_mail -s "%t" -b "%c" & )
cmd-ssh=/opt/Kingbase/ES/V8/Server/bin/sys_securecmd
注意:当前用的是金仓数据库专用的sys_securecmd替代系统 SSH 做远程连接;
恢复
一、完全恢复
灾难模拟
数据库数据丢失
先备份:cp -r data data.bak/
删除数据目录:rm -rf data/.*
rm -rf /opt/kingbase/cluster/install/kingbase/data

1、恢复
/opt/kingbase/cluster/install/kingbase/bin/sys_rman --config=/opt/kingbase/backup/rman/sys_rman.conf --stanza=kingbase restore

2、启用数据库
/opt/kingbase/cluster/install/kingbase/bin/sys_ctl -D /opt/kingbase/cluster/install/kingbase/data start

3、验证数据已恢复

二、指定时间点恢复
1、删除数据
(记住这个时间点)

2.修改redo(异机) 和数据库的sys_rman.conf文件


3.指定时间点恢复
/opt/kingbase/cluster/install/kingbase/bin/sys_rman --config=/opt/kingbase/backup/rman/sys_rman.conf --stanza=kingbase --type=time --target='2026-01-12 10:03:31' --target-action=promote restore

4、修改端口
[kingbase@node1 ~]$ vim /opt/kingbase/data/es_rep.conf

[kingbase@node1 ~]$ vim /opt/kingbase/data/kingbase.conf

启用新实例
[kingbase@node1 data]$ /opt/Kingbase/ES/V8/Server/bin/sys_ctl -D /opt/kingbase/data start

查看数据是否恢复

导出数据
[kingbase@node1 data]$ sys_dump -U system -d test -p 54322 -t students -f /opt/kingbase/students.sql
导入数据

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐

所有评论(0)