Skip to content

KingbaseES运维实践(二):基于 sys_rman 的异机物理备份与恢复

0b7ea360-7758-42e5-b172-f79322bc9607

1. 实验环境与约定

角色IP 地址说明
Kingbase 主库172.24.0.158提供业务数据;发生故障后在此节点恢复。
Kingbase 备份节点(REP0)172.24.0.159仅保存主库的物理备份集和归档 WAL;已安装与主库相同版本的 KingbaseES V9。

本文仅说明实验操作。备份目录统一规划为:

text
/home/application/KingbaseES/backup/rman

以下示例假设:Kingbase 安装目录为 /home/application/KingbaseES/V9/Server,主库数据目录为 /home/application/KingbaseES/data,端口为 54321,操作系统用户为 kingbase。请按实际环境替换。

重要:sys_rman 的初始化、定时任务配置和日常备份操作均在 备份节点 172.24.0.159 执行;不要在主库执行 sys_backup.sh init。主库只负责提供数据并将 WAL 归档到备份节点。

2. 前置准备

2.1 检查软件与连通性

在两台机器上确认使用相同版本的 KingbaseES V9,且 kingbase 用户可以使用 sys_rmansys_backup.shsys_ctlksql 等命令。

分别在主库和备份节点,执行:

bash
#主库节点
[kingbase@master ~]$ /home/application/KingbaseES/V9/Server/bin/sys_rman --version
sys_rman (KingbaseES) V009R001C010

#备份节点
[kingbase@REP0 ~]$ /home/application/KingbaseES/V9/Server/bin/sys_rman --version
sys_rman (KingbaseES) V009R001C010

2.2 配置双向 SSH 免密登录

备份时,备份节点需要登录主库读取数据;归档 WAL 和故障恢复时,主库需要登录备份节点。因此必须为 kingbase 用户配置双向 SSH 免密。

以下操作均在 主节点 172.24.0.158备节点 172.24.0.159kingbase 用户执行。(若已存在密钥则不要重复生成):

bash
#在kingbase用户下执行
#主库节点
[kingbase@master ~]$ ssh-keygen -t rsa -b 4096
Generating public/private rsa key pair.


Enter file in which to save the key (/home/kingbase/.ssh/id_rsa): Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/kingbase/.ssh/id_rsa
Your public key has been saved in /home/kingbase/.ssh/id_rsa.pub
The key fingerprint is:
SHA256:VSDgteqMaoEoMkcSCUSxNGEd67Ist9As/n8zoZO8Tt4 kingbase@master
The key's randomart image is:
+---[RSA 4096]----+
|=X+.. ..o ...    |
|= o... . o .     |
| o .  . . .      |
|. o    . .       |
|.= .  . S        |
|Bo=  + .         |
|*=+.o.= .        |
|o+.oo=.+         |
| o+.o=+Eo        |
+----[SHA256]-----+



#在kingbase用户下执行
#备份节点
[kingbase@REP0 ~]$ ssh-keygen -t rsa -b 4096
Generating public/private rsa key pair.
Enter file in which to save the key (/home/kingbase/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/kingbase/.ssh/id_rsa
Your public key has been saved in /home/kingbase/.ssh/id_rsa.pub
The key fingerprint is:
SHA256:GwWAVOpzfNOjq435EzZC73QxJkomvQVlfYbJ1r74Q8M kingbase@REP0
The key's randomart image is:
+---[RSA 4096]----+
|   ..ooo+o +     |
|    .... .* +    |
|    .. . ..+     |
|   ...= oo+ .    |
|    o=o=Soo= .   |
|     o+.*=o.E    |
|       =o+ o .   |
|       +o.  o    |
|      +o+.   .   |
+----[SHA256]-----+

以下操作均在 备份节点 172.24.0.159、以 kingbase 用户执行。将公钥安装到主库:

bash
[kingbase@REP0 ~]$ ssh-copy-id kingbase@172.24.0.158

/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/home/kingbase/.ssh/id_rsa.pub"
The authenticity of host '172.24.0.158 (172.24.0.158)' can't be established.
ED25519 key fingerprint is SHA256:THQ+puxNLZdPLZCqGgynoOpbez62kcOBmAm35ixcn84.
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys

Authorized users only. All activities may be monitored and reported.
kingbase@172.24.0.158's password:

Number of key(s) added: 1

Now try logging into the machine, with:   "ssh 'kingbase@172.24.0.158'"
and check to make sure that only the key(s) you wanted were added.

以下操作均在 主节点 172.24.0.158、以 kingbase 用户执行。将公钥安装到备份节点:

bash
[kingbase@master ~]$ ssh-copy-id kingbase@172.24.0.159

/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/home/kingbase/.ssh/id_rsa.pub"
The authenticity of host '172.24.0.159 (172.24.0.159)' can't be established.
ED25519 key fingerprint is SHA256:THQ+puxNLZdPLZCqGgynoOpbez62kcOBmAm35ixcn84.
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys

Authorized users only. All activities may be monitored and reported.
kingbase@172.24.0.159's password:

Number of key(s) added: 1

Now try logging into the machine, with:   "ssh 'kingbase@172.24.0.159'"
and check to make sure that only the key(s) you wanted were added.

以下操作均在 主节点 172.24.0.158备节点 172.24.0.159kingbase 用户执行。

验证双向免密;两条命令均不应再要求输入操作系统密码:

bash
# 在备份节点执行
[kingbase@REP0 ~]$ ssh kingbase@172.24.0.158 'hostname' && ifconfig

Authorized users only. All activities may be monitored and reported.
master
ens192: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 172.24.0.159  netmask 255.255.255.0  broadcast 172.24.0.255
        inet6 fe80::2954:defd:5ea8:7b32  prefixlen 64  scopeid 0x20<link>
        inet6 fe80::1759:c054:174d:2217  prefixlen 64  scopeid 0x20<link>
        inet6 fe80::3917:6e9e:dc35:d5fc  prefixlen 64  scopeid 0x20<link>
        ether 00:50:56:a3:cb:1c  txqueuelen 1000  (Ethernet)
        RX packets 39427  bytes 39689033 (37.8 MiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 15156  bytes 1422317 (1.3 MiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        inet6 ::1  prefixlen 128  scopeid 0x10<host>
        loop  txqueuelen 1000  (Local Loopback)
        RX packets 1461  bytes 188841 (184.4 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 1461  bytes 188841 (184.4 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0




# 在主库执行
[kingbase@master ~]$  ssh kingbase@172.24.0.159 'hostname' && ifconfig

Authorized users only. All activities may be monitored and reported.
REP0
ens192: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 172.24.0.158  netmask 255.255.255.0  broadcast 172.24.0.255
        inet6 fe80::3917:6e9e:dc35:d5fc  prefixlen 64  scopeid 0x20<link>
        ether 00:50:56:a3:79:c0  txqueuelen 1000  (Ethernet)
        RX packets 42696  bytes 39918640 (38.0 MiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 13995  bytes 1256478 (1.1 MiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        inet6 ::1  prefixlen 128  scopeid 0x10<host>
        loop  txqueuelen 1000  (Local Loopback)
        RX packets 1611  bytes 206009 (201.1 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 1611  bytes 206009 (201.1 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

2.3 主库开启归档,并设置数据库登录免密;关闭备份节点数据库实例

在主库 172.24.0.158kingbase.conf 末尾确认以下参数,然后重启实例。archive_command 暂时置空,初始化时将由 sys_backup.sh 自动写入正确的归档命令。

以下操作均在 主节点 172.24.0.158、以 kingbase 用户执行

conf
[kingbase@master ~]$ vim +999 /home/application/KingbaseES/data/kingbase.conf

archive_mode = on
archive_command = ''
bash
# 主库 172.24.0.158,以 kingbase 用户重启数据库

[kingbase@master ~]$ sys_ctl restart
等待服务器进程关闭 .... 完成
服务器进程已经关闭
等待服务器进程启动 ....2026-07-27 16:57:02.880 CST [11815] LOG:  sepapower扩展初始化完成
2026-07-27 16:57:02.886 CST [11815] LOG:  正在启动 KingbaseES V009R001C010
2026-07-27 16:57:02.886 CST [11815] LOG:  正在监听IPv4地址"0.0.0.0",端口 54321
2026-07-27 16:57:02.886 CST [11815] LOG:  正在监听IPv6地址"::",端口 54321
2026-07-27 16:57:02.886 CST [11815] LOG:  在Unix套接字 "/tmp/.s.KINGBASE.54321"上侦听
2026-07-27 16:57:02.998 CST [11815] LOG:  日志输出重定向到日志收集进程
2026-07-27 16:57:02.998 CST [11815] HINT:  后续的日志输出将出现在目录 "/home/application/KingbaseES/data/sys_log"中.
 完成
服务器进程已经启动

为主库的 system 用户生成密码密文,供备份节点发起数据库连接时使用。

⚠️⚠️⚠️ 密文文件必须生成在主节点kingbase 用户主目录下:

# 主节点 172.24.0.158 上
[kingbase@master ~]$ cd ~
[kingbase@master ~]$ sys_encpwd -H \* -P \* -D \* -U system -W kingbase

[kingbase@master ~]$ cat ~/.encpwd
*:54321:*:system:a2luZ2Jhc2U=


#验证免密登陆
[kingbase@master ~]$ ksql test system -c 'select version();'
         version
-------------------------
 KingbaseES V009R001C010
(1 行记录)

关闭备份节点数据库实例。

以下操作均在 备节点 172.24.0.159、以 kingbase 用户执行

[kingbase@REP0 ~]$ sys_ctl stop
等待服务器进程关闭 .... 完成
服务器进程已经关闭

2.4 准备备份节点备份目录和 crontab 权限

在备份节点确认备份盘空间满足“至少可容纳保留的全量备份及对应 WAL”的要求,并确保目录归属为 kingbase

以下操作均在 备份节点 172.24.0.159 上执行

bash
# 备份节点,以 root 用户执行
[kingbase@REP0 ~]$ su - root
[root@REP0 ~]# mkdir -p /home/application/KingbaseES/backup
[root@REP0 ~]# chown kingbase:kingbase /home/application/KingbaseES/backup

# 再切换至 kingbase 用户执行
[root@REP0 ~]# su - kingbase

[kingbase@REP0 ~]$ df -Ph /home/application/KingbaseES/backup
文件系统        容量  已用  可用 已用% 挂载点
/dev/sdb       200G  11G  190G    6% /home/application

[kingbase@REP0 ~]$ ls -ld /home/application/KingbaseES/backup
drwxr-xr-x 2 kingbase kingbase 6  6月 25 14:44 /home/application/KingbaseES/backup

需要使用 sys_backup.sh start 创建定时任务,需由 root 在备份节点允许 kingbase 使用 crontab

以下操作均在 备份节点 172.24.0.159 上执行

bash
# 备份节点,以 root 用户执行
[kingbase@REP0 ~]$ su - root

[root@REP0 ~]# chmod a+x,u+x /usr/bin/crontab

[root@REP0 ~]# echo 'kingbase' >> /etc/cron.allow

3. 在备份节点初始化 sys_rman

3.1 复制模板文件,并编辑 sys_backup.conf

以下操作均在 备份节点 172.24.0.159、以 kingbase 用户执行。

bash
[root@REP0 ~]# su - kingbase
[kingbase@REP0 ~]# cp /home/application/KingbaseES/V9/Server/share/sys_backup.conf /home/application/KingbaseES/V9/Server/bin/sys_backup.conf

编辑 /home/application/KingbaseES/V9/Server/bin/sys_backup.conf,保留未展示参数的默认值,并设置以下内容:

#过滤不需要的注释
[kingbase@REP0 ~]$ grep -v '^#' /home/application/KingbaseES/V9/Server/bin/sys_backup.conf
[kingbase@REP0 ~]$ vim /home/application/KingbaseES/V9/Server/bin/sys_backup.conf
bash
# 单节点数据库备份模式
_target_db_style="single"

# 主库IP地址
_one_db_ip="172.24.0.158"
# 备份节点 IP 地址
_repo_ip="172.24.0.159"

# 备份实例名称(stanza)
_stanza_name="kingbase"
# 执行备份任务的操作系统用户
_os_user_name="kingbase"
# 备份仓库根目录,rman目录会自动生成,确保 kingbase 用户有对/home/application/KingbaseES/backup/目录所有权限
_repo_path="/home/application/KingbaseES/backup/rman"


# 保留的全量备份数量
_repo_retention_full_count=3


# 备份计划:每隔 7 天执行一次全量备份,在凌晨 02:00 执行
_crond_full_days=7
_crond_full_hour=2
# 备份计划:不执行差异备份
_crond_diff_days=0
_crond_diff_hour=3
# 备份计划:每隔 1 天执行一次增量备份,在凌晨 04:00 执行
_crond_incr_days=1
_crond_incr_hour=4


# 限速带宽;0 表示不限速
_band_width=0

# 操作系统命令的绝对路径
_os_ip_cmd="/sbin/ip"
_os_rm_cmd="/bin/rm"
_os_sed_cmd="/bin/sed"
_os_grep_cmd="/bin/grep"
_os_base64_cmd="/bin/base64"

# 主库数据目录
_single_data_dir="/home/application/KingbaseES/data"
# 主库 KingbaseES 可执行文件目录
_single_bin_dir="/home/application/KingbaseES/V9/Server/bin"

# 用于连接主库的数据库用户
_single_db_user="system"
# 主库数据库监听端口
_single_db_port="54321"

# 是否使用 scmd 远程命令模式;off 表示不使用
_use_scmd=off
# 启动/停止数据库时是否使用快速模式
_start_fast=y

# 备份压缩类型
_compress_type=gz
# 非归档 WAL 预留空间,单位通常为 MB
_non_archived_space=1024
# 是否收集归档统计信息
_archive_statistics=n

3.2 初始化并校验

以下操作均在 备份节点 172.24.0.159、以 kingbase 用户执行。

bash
[kingbase@REP0 ~]$ cd /home/application/KingbaseES/V9/Server/bin

[kingbase@REP0 ~]$ sys_backup.sh init
# pre-condition: check the non-archived WAL files

Authorized users only. All activities may be monitored and reported.

Authorized users only. All activities may be monitored and reported.

Authorized users only. All activities may be monitored and reported.

Authorized users only. All activities may be monitored and reported.
# generate single sys_rman.conf...
Authorized users only. All activities may be monitored and reported.
DONE

Authorized users only. All activities may be monitored and reported.

Authorized users only. All activities may be monitored and reported.
# update single archive_command with sys_rman.archive-push...DONE
# create stanza and check...(maybe 60+ seconds)
# create stanza and check...DONE
# initial first full backup...(maybe several minutes)
# initial first full backup...DONE
# Initial sys_rman OK.
'sys_backup.sh start' should be executed when need back-rest feature.
  • 启动定时任务,查看定时任务
[kingbase@REP0 ~]$ sys_backup.sh start


Enable some sys_rman in crontab-daemon
no crontab for kingbase
Set full-backup in 7 days
Set incr-backup in 1 days
0 2 */7 * * /home/application/KingbaseES/V9/Server/bin/sys_rman --config=/home/application/KingbaseES/backup/rman/sys_rman.conf --stanza=kingbase --archive-copy --type=full backup >> /home/application/KingbaseES/V9/Server/log/sys_rman_backup_full.log 2>&1
0 4 */1 * * /home/application/KingbaseES/V9/Server/bin/sys_rman --config=/home/application/KingbaseES/backup/rman/sys_rman.conf --stanza=kingbase --archive-copy --type=incr backup >> /home/application/KingbaseES/V9/Server/log/sys_rman_backup_incr.log 2>&1


[kingbase@REP0 ~]$ crontab -l
0 2 */7 * * /home/application/KingbaseES/V9/Server/bin/sys_rman --config=/home/application/KingbaseES/backup/rman/sys_rman.conf --stanza=kingbase --archive-copy --type=full backup >> /home/application/KingbaseES/V9/Server/log/sys_rman_backup_full.log 2>&1
0 4 */1 * * /home/application/KingbaseES/V9/Server/bin/sys_rman --config=/home/application/KingbaseES/backup/rman/sys_rman.conf --stanza=kingbase --archive-copy --type=incr backup >> /home/application/KingbaseES/V9/Server/log/sys_rman_backup_incr.log 2>&1

初始化会生成 sys_rman.conf、创建 stanza、配置主库的 archive_command,并执行首次全量备份。成功后查看备份目录:

bash
[kingbase@REP0 ~]$ ls -l /home/application/KingbaseES/backup/rman
总用量 4
drwxr-x--- 3 kingbase kingbase   22  7月 28 00:26 archive
drwxr-x--- 3 kingbase kingbase   22  7月 28 00:26 backup
-rw-r--r-- 1 kingbase kingbase 1386  7月 28 00:26 sys_rman.conf

[kingbase@REP0 ~]$ sys_rman --config=/home/application/KingbaseES/backup/rman/sys_rman.conf --stanza=kingbase info

#注释: --config 默认指定的配置文件路径在/etc/sys_rman.conf, 我们只需要把sys_rman.conf 软连接到/etc/sys_rman.conf
#就无需每次添加--config 选项
[kingbase@REP0 ~]$ su - root
#配置软链接
[root@REP0 ~]# ln -s /home/application/KingbaseES/backup/rman/sys_rman.conf /etc/sys_rman.conf
[root@REP0 ~]# ls -l /etc/sys_rman.conf 
lrwxrwxrwx 1 root root 54  7月 28 00:29 /etc/sys_rman.conf -> /home/application/KingbaseES/backup/rman/sys_rman.conf

预期目录中包含 archivebackupsys_rman.conf。再在主库检查归档命令已经生效:

以下操作均在 主节点 172.24.0.158、以 kingbase 用户执行。

sql
-- 主库 172.24.0.158
[root@master ~]# su - kingbase

[kingbase@master ~]$ ksql -U system -d test
授权类型: 企业版.
输入 "help" 来获取帮助信息.

test=# SHOW archive_mode;
 archive_mode 
--------------
 on
(1 行记录)

test=# SHOW archive_command;
                                                      archive_command                
                        
-------------------------------------------------------------------------------------------------------------------------------------------------------
------------------------
 export TZ=Asia/Shanghai;/home/application/KingbaseES/V9/Server/bin/sys_rman --config /home/application/KingbaseES/backup/rman/sys_rman.conf --stanza=k
ingbase archive-push %p
(1 行记录)

archive_command 应包含 sys_rman archive-push,并指向备份节点的仓库配置。若初始化没有自动更新主库配置,先停止处理业务并排查 SSH 免密、主库路径和权限,不要手工猜测或拼接 archive_command

4. 日常备份操作(在备份节点执行)

所有命令均在备份节点 172.24.0.159kingbase 用户下执行:

执行全量备份:

bash
[kingbase@REP0 ~]$ sys_rman --stanza=kingbase --archive-copy --type=full backup

执行差异备份:

bash
[kingbase@REP0 ~]$ sys_rman --stanza=kingbase --archive-copy --type=diff backup

执行增量备份:

bash
[kingbase@REP0 ~]$ sys_rman --stanza=kingbase --archive-copy --type=incr backup

检查备份链与归档 WAL:

bash
[kingbase@REP0 ~]$ sys_rman --stanza=kingbase info
[kingbase@REP0 ~]$ sys_rman  --stanza=kingbase check
[kingbase@REP0 ~]$ sys_rman  --stanza=kingbase verify

5. 主库故障后的回拉恢复

恢复发生在主库 172.24.0.158。恢复前确认备份节点仍可访问,且仓库中有可用备份:

bash
# 主库,以 kingbase 用户执行
[kingbase@master ~]$ ssh kingbase@172.24.0.159 'ls -l /home/application/KingbaseES/backup/rman'


[kingbase@master ~]$ ssh kingbase@172.24.0.159 'sys_rman --stanza=kingbase info'

5.1 完全恢复(恢复到最近可用备份)

  1. 停止主库:
bash
[kingbase@master ~]$ sys_ctl stop -m fast
  1. 若数据目录损坏或需要从头恢复,先由管理员按变更规范清空/隔离原数据目录,再创建空数据目录并确认属主。此操作会删除当前数据,执行前必须确认恢复目标和备份可用性。
bash
#删除数据库主目录下的所有文件
[kingbase@localhost ~]$ rm -rf /home/application/KingbaseES/data/*
[kingbase@localhost ~]$ rm -rf /home/application/KingbaseES/data/.*
  1. 在主库执行远程仓库恢复。以下命令从备份节点 172.24.0.159 拉取数据到主库:
bash
sys_rman \
  --kb1-path=/home/application/KingbaseES/data \
  --repo1-host=172.24.0.159 \
  --repo1-host-cmd=/home/application/KingbaseES/V9/Server/bin/sys_rman \
  --repo1-host-user=kingbase \
  --repo1-host-config=/home/application/KingbaseES/backup/rman/sys_rman.conf \
  --repo1-path=/home/application/KingbaseES/backup/rman \
  --log-path=/tmp/sys_rman_restore \
  --log-level-console=info \
  --log-subprocess=y \
  --band-width=0 \
  --link-all=y \
  --stanza=kingbase restore
  1. 启动主库并验证数据:
bash
sys_ctl start
ksql -U system -d kingbase
sql
SELECT now();
\l

5.2 基于时间点的不完全恢复(PITR)

例如,误删前记录的目标时间为 2026-07-28 09:59:34.562048,先在备份节点查询可用备份标签:

最近一次完全备份的备份集标签20260728-093219F,也就是说,恢复会以 2026-07-28 09:32:19 创建的那份全量备份为基础,然后通过归档 WAL 回放到 指定时间点

以下操作均在 备份节点 172.24.0.159、以 kingbase 用户执行。

bash
# 备份节点执行
[kingbase@REP0 ~]$  sys_rman --stanza=kingbase info

stanza: kingbase
    status: ok
    cipher: none

    db (current)
        wal archive min/max (V009R001C010B0004): 000000010000000000000013/000000040000000000000020

        full backup: 20260728-003314F
            timestamp start/stop: 2026-07-28 00:33:14+08 / 2026-07-28 00:33:17+08
            wal start/stop: 000000010000000000000013 / 000000010000000000000013
            database size: 107.2MB, database backup size: 107.2MB
            repo1: backup set size: 12.2MB, backup size: 12.2MB

        diff backup: 20260728-003314F_20260728-003514D
            timestamp start/stop: 2026-07-28 00:35:14+08 / 2026-07-28 00:35:15+08
            wal start/stop: 000000010000000000000015 / 000000010000000000000015
            database size: 107.2MB, database backup size: 16MB
            repo1: backup set size: 12.2MB, backup size: 73.1KB
            backup reference list: 20260728-003314F

        incr backup: 20260728-003314F_20260728-003519I
            timestamp start/stop: 2026-07-28 00:35:19+08 / 2026-07-28 00:35:21+08
            wal start/stop: 000000010000000000000016 / 000000010000000000000017
            database size: 123.2MB, database backup size: 32MB
            repo1: backup set size: 12.3MB, backup size: 145.0KB
            backup reference list: 20260728-003314F

        incr backup: 20260728-003314F_20260728-040001I
            timestamp start/stop: 2026-07-28 04:00:01+08 / 2026-07-28 04:00:03+08
            wal start/stop: 000000010000000000000019 / 000000010000000000000019
            database size: 107.2MB, database backup size: 16MB
            repo1: backup set size: 12.2MB, backup size: 73.5KB
            backup reference list: 20260728-003314F

        full backup: 20260728-093219F
            timestamp start/stop: 2026-07-28 09:32:19+08 / 2026-07-28 09:32:21+08
            wal start/stop: 00000002000000000000001D / 00000002000000000000001D
            database size: 125.0MB, database backup size: 125.0MB
            repo1: backup set size: 14.7MB, backup size: 14.7MB

正常停止数据库,删除数据库数据目录下的所有文件。

以下操作均在 主节点 172.24.0.158、以 kingbase 用户执行。

#正常关闭数据库
[kingbase@localhost ~]$ sys_ctl stop -m fast
等待服务器进程关闭 .... 完成
服务器进程已经关闭


#删除数据库主目录下的所有文件
[kingbase@localhost ~]$ rm -rf /home/application/KingbaseES/data/*
[kingbase@localhost ~]$ rm -rf /home/application/KingbaseES/data/.*

在主库执行与“完全恢复”相同的远程参数,额外指定备份标签、时间点和切换动作:

以下操作均在 主节点 172.24.0.158、以 kingbase 用户执行。

bash
sys_rman \
  --kb1-path=/home/application/KingbaseES/data \
  --repo1-host=172.24.0.159 \
  --repo1-host-cmd=/home/application/KingbaseES/V9/Server/bin/sys_rman \
  --repo1-host-user=kingbase \
  --repo1-host-config=/home/application/KingbaseES/backup/rman/sys_rman.conf \
  --repo1-path=/home/application/KingbaseES/backup/rman \
  --log-path=/tmp/sys_rman_restore \
  --log-level-console=info \
  --log-subprocess=y \
  --stanza=kingbase \
  --set=20260728-093219F \
  --type=time \
  --target='2026-07-28 09:59:34.562048' \
  --target-action=promote restore

--set 的示例值替换为 info 输出中实际选择的备份标签。随后启动主库并核验误操作前的数据是否已恢复。

5.3 恢复后的收尾

恢复成功后,主库会产生新时间线。应立即在备份节点执行一次全量备份,建立新的备份基线:

bash
# 备份节点执行
sys_rman --stanza=kingbase --archive-copy --type=full backup
sys_rman --stanza=kingbase check

6. 实验验收清单

按实际验证结果勾选。所有命令均以 kingbase 操作系统用户执行,除非条目中另有说明。

  • 主库 `172.24.0.158` 与备份节点 `172.24.0.159` 的 KingbaseES / `sys_rman` 版本一致,且两端均可执行所需命令。172.24.0.158 与备份节点 172.24.0.159 的 KingbaseES / sys_rman 版本一致,且两端均可执行所需命令。
  • 双向 SSH 免密登录正常:备份节点可登录主库,主库也可登录备份节点,均不要求输入操作系统用户密码。
  • 主库实例运行正常并监听 `54321` 端口;`archive_mode` 为 `on`。54321 端口;archive_modeon
  • 主库 `kingbase` 用户的 `~/.encpwd` 已配置 `system` 用户密码密文,使用 `ksql` 本地连接 `kingbase` 数据库无需输入密码。kingbase 用户的 ~/.encpwd 已配置 system 用户密码密文,使用 ksql 本地连接 kingbase 数据库无需输入密码。
  • 备份节点数据库实例已停止;`/home/application/KingbaseES/backup` 目录存在,属主为 `kingbase`,并具备足够的备份与 WAL 存储空间。/home/application/KingbaseES/backup 目录存在,属主为 kingbase,并具备足够的备份与 WAL 存储空间。
  • 备份节点的 `sys_backup.conf` 已按单节点模式配置:主库 IP、备份节点 IP、数据目录、二进制目录、端口、`system` 数据库用户及仓库路径均与实际环境一致。sys_backup.conf 已按单节点模式配置:主库 IP、备份节点 IP、数据目录、二进制目录、端口、system 数据库用户及仓库路径均与实际环境一致。
  • 已在备份节点成功执行 `sys_backup.sh init`,并完成 stanza 创建、`check` 和首次全量备份。sys_backup.sh init,并完成 stanza 创建、check 和首次全量备份。
  • 备份节点仓库 `/home/application/KingbaseES/backup/rman` 中存在 `archive`、`backup` 与 `sys_rman.conf`;`sys_rman --stanza=kingbase info` 可列出可用备份集。/home/application/KingbaseES/backup/rman 中存在 archivebackupsys_rman.confsys_rman --stanza=kingbase info 可列出可用备份集。
  • 主库的 `archive_command` 已由初始化流程配置为包含 `sys_rman ... archive-push` 的命令,且不手工拼接或覆盖该参数。archive_command 已由初始化流程配置为包含 sys_rman ... archive-push 的命令,且不手工拼接或覆盖该参数。
  • 备份节点已执行 `sys_backup.sh start`,`crontab -l` 中存在每 7 天 02:00 的全量备份和每天 04:00 的增量备份任务;未配置差异备份任务。sys_backup.sh startcrontab -l 中存在每 7 天 02:00 的全量备份和每天 04:00 的增量备份任务;未配置差异备份任务。
  • 在备份节点执行 `sys_rman --stanza=kingbase check`、`info`、`verify` 均成功,且归档 WAL 连续、备份链完整。sys_rman --stanza=kingbase checkinfoverify 均成功,且归档 WAL 连续、备份链完整。
  • 已完成一次主库回拉完全恢复:恢复命令通过 `repo1-host=172.24.0.159` 访问仓库,主库启动后可连接数据库,并完成 `SELECT now();` 与对象清单核验。repo1-host=172.24.0.159 访问仓库,主库启动后可连接数据库,并完成 SELECT now(); 与对象清单核验。
  • 已完成一次 PITR 演练:根据 `info` 选择正确的 `--set` 全量备份标签,归档 WAL 覆盖目标时间;以 `--type=time`、`--target` 和 `--target-action=promote` 恢复后,误操作前数据已验证恢复。info 选择正确的 --set 全量备份标签,归档 WAL 覆盖目标时间;以 --type=time--target--target-action=promote 恢复后,误操作前数据已验证恢复。
  • PITR 恢复产生新时间线后,已在备份节点执行一次新的全量备份,并再次执行 `sys_rman --stanza=kingbase check` 验证新备份基线。sys_rman --stanza=kingbase check 验证新备份基线。
最近更新

采用 CC BY-NC-ND 4.0 协议,完整转载请注明来自 运维小弟