暂无图片
暂无图片
1
暂无图片
暂无图片
暂无图片

KingBase sys_rman备份工具

IT那活儿 2023-04-25
1398

点击上方“IT那活儿”公众号,关注后了解更多内容,不管IT什么活儿,干就完了!!!


前 言
sys_rman 类似与pgbackrest备份工具,可以实现物理备份,其他优势在于相比sys_basebackup可以进行并行备份、并行归档、备份管理等。
注意:
  • 1)如果数据块的大小不为8KB,pgbackrest不能进行备份。
  • 2)sys_rman没有该问题。

[kingbase@PG-1 bin]$ sys_rman
sys_rman 2.27 - General help

Usage:
sys_rman [options] [command]

Commands:
archive-get Get a WAL segment from the archive. #数据库恢复时使用
archive-push Push a WAL segment to the archive. #数据库WAL归档时使用
backup Backup a database cluster. #执行数据库备份
check Check the configuration.
expire Expire backups that exceed retention.#删除过期的备份
help Get help.
info Retrieve information about backups. #列举备份信息
restore Restore a database cluster.
stanza-create Create the required stanza data.
stanza-delete Delete a stanza.
stanza-upgrade Upgrade a stanza.
start Allow sys_rman processes to run.
stop Stop sys_rman processes from running.
version Get version.

Use 'sys_rman help [command]' for more information.


命令解析之stanza-create
sys_rman help stanza-create
用于创建stanza;stanza-create命令必须在存储库所在的主机上运行,前提需要配置sys_rman的配置文件。
参数解释:
  • --backup-standby
    默认:n,是否允许从standby节点发起备份;
  • --config sys_rman
    配置文件路径;
  • --stanza
    定义stanza;
  • --cmd-ssh
    客户端的ssh路径;
  • --log-file-console
    日志级别;
  • --repo-path
    存储备份和归档的路径;
  • --kb-host
    通过ssh操作的kingbase数据库主机;
  • --kb-host-port
    当kb-host设置时,需要设置该参数,ssh远程操作使用的端口;
  • --kb-host-user 
    ssh远程操作使用的操作系统用户,当kb-host设置时,需要设置该参数;
  • --kb-path
    kingbase数据库的数据目录;
  • --kb-port
    kingbase数据库的端口;
  • --kb-user 
    kingbase数据库的用户;
  • --kb-pass 
    kingbase用户的密码,base64的编码;
示例:创建stanza
1)编辑配置文件
vim /data/kingbase_backup/sys_rman.conf
[kingbasetest]
kb1-path=/data/kingbase
kb1-user=system
kb1-port=54321

[global]
repo1-path=/data/kingbase_backup
repo1-retention-full-type=count
repo1-retention-full=7
compress-level=3
compress-type=gz
log-subprocess=y
process-max=4
log-level-console=info
log-level-file=info
log-level-stderr=info
log-timestamp=y

[global:archive-push]
compress-level=3
compress-type=gz
process-max=3

2)创建stanza
sys_rman 
--config data/kingbase_backup/sys_rman.conf --stanza=kingbasetest stanza-create

3)调整数据库的archive_mode=on和archive_command=''
archive_command='/opt/Kingbase/ES/V8/Server/bin/sys_rman 
--config data/kingbase_backup/sys_rman.conf --stanza=kingbasetest archive-push %p'

4)检查配置
sys_rman --config /data/kingbase_backup/sys_rman.conf -
-stanza=kingbasetest check

在检查过程中会执行WAL日志切换,测试归档命令是否成功。如果归档不成功,则无法下一步执行备份。确保archive_command中的命令,可以正确执行且成功。
5)执行备份

sys_rman --config /data/kingbase_backup/sys_rman.conf -
-stanza=kingbasetest --type=full --archive-copy backup


命令解析之check
sys_rman help check
用来验证sys_rman和archive_command命令设置是否正确,归档和备份的正确配置;
该命令也可以在standby节点运行,但是由于无法执行sys_switch_wal(),此时只检查存储库配置。
参数解释:
  • --backup-standby
    默认:n,是否允许从standby节点发起备份;
  • --cmd-ssh
    客户端的ssh路径;
  • --config sys_rman
    配置文件路径;
  • --stanza
    定义stanza;
  • --log-file-console
    日志级别;
  • --repo-host
    通过ssh操作远程备库目录的主机;
  • --repo-host-port
    通过ssh操作时使用的端口;
  • --repo-host-user
    通过ssh操作时,使用的操作系统用户;
  • --repo-path
    存储备份和归档的路径;
  • --kb-host
    通过ssh操作的kingbase数据库主机;
  • --kb-host-port
    当kb-host设置时,需要设置该参数,ssh远程操作使用的端口;
  • --kb-host-user 
    ssh远程操作使用的操作系统用户,当kb-host设置时,需要设置该参数;
  • --kb-path 
    kingbase数据库的数据目录;
  • --kb-port 
    kingbase数据库的端口;
  • --kb-user 
    kingbase数据库的用户;
  • --kb-pass 

    kingbase用户的密码,base64的编码。


命令解析之backup
sys_rman help backup
用于对数据库执行备份。注意sys_rman没有内置的调度程序,需要加到cron中进行调度。
参数解释:
  • --archive-copy
    在备份过程中将恢复到一致性的WAL日志拷贝到备份中;
  • --backup-standby
    默认:n,是否允许从standby节点发起备份;
  • --type
    备份类型,full 全量备份;incr 增量备份;diff 差异备份。默认:incr;
  • --cmd-ssh
    客户端ssh的路径;
  • --compress
    备份是否压缩,默认:y;
  • --compress-level
    压缩级别;
  • --compress-type
    压缩类型,默认:gz;
  • --config
    sys_rman的配置文件;
  • --stanza
    指定定义的stanza;
  • --log-file-console
    日志级别;
  • --repo-path
    指定备份目录;
  • --kb-host
    通过ssh操作的kingbase数据库主机;
  • --kb-host-port
    当kb-host设置时,需要设置该参数,ssh远程操作使用的端口;
  • --kb-host-user
    ssh远程操作使用的操作系统用户,当kb-host设置时,需要设置该参数;
  • --kb-path 
    kingbase数据库的数据目录;
  • --kb-port
kingbase数据库的端口;
  • --kb-user
    kingbase数据库的用户;
  • --kb-pass
    kingbase用户的密码,base64的编码。
备份示例:

sys_rman --config /data/kingbase_backup/sys_rman.conf -
-stanza=kingbasetest --type=full --archive-copy backup


命令解析之info
sys_rman help info
用于查看有关的备份信息。info命令可以对单个节点或所有节点进行操作,提供备份的摘要信息。
输出格式默认:text,可以设置为json。
参数解释
  • --set 
    查看指定备份集的信息;
  • --cmd-ssh 
    客户端ssh路径;
  • --config 
    sys_rman的配置文件;
  • --stanza 
    查看指定stanza的备份信息;
  • --log-level-console 
    日志级别;
  • --repo-host 
    通过ssh操作远程备库目录的主机;
  • --repo-host-port
    通过ssh操作时使用的端口;
  • --repo-host-user 
    通过ssh操作时,使用的操作系统用户。
示例:
1)查看所有备份信息
[kingbase@PG-1 ~]$ sys_rman --config /home/kingbase/testkingbase/sys_rman.conf info
stanza: test
status: ok
cipher: none

db (current)
wal archive min/max (V008R006C005B0023-1): 0000001300000001000000AA/00000015000000020000001F

full backup: 20211230-131047F
timestamp start/stop: 2021-12-30 13:10:47 / 2021-12-30 13:11:13
wal start/stop: 0000001300000001000000B8 / 0000001300000001000000B8
database size: 1.9GB, backup size: 1.9GB
repository size: 632.9MB, repository backup size: 632.9MB

full backup: 20211230-165342F
timestamp start/stop: 2021-12-30 16:53:42 / 2021-12-30 16:54:13
wal start/stop: 0000001500000001000000BB / 0000001500000001000000BB
database size: 1.9GB, backup size: 1.9GB
repository size: 633.0MB, repository backup size: 633.0MB

2)查看指定备份节点stanza的备份信息
[kingbase@PG-1 ~]$ sys_rman --config /home/kingbase/testkingbase/sys_rman.conf --stanza=test info
stanza: test
status: ok
cipher: none

db (current)
wal archive min/max (V008R006C005B0023-1): 0000001300000001000000AA/00000015000000020000001F

full backup: 20211230-131047F
timestamp start/stop: 2021-12-30 13:10:47 / 2021-12-30 13:11:13
wal start/stop: 0000001300000001000000B8 / 0000001300000001000000B8
database size: 1.9GB, backup size: 1.9GB
repository size: 632.9MB, repository backup size: 632.9MB

full backup: 20211230-165342F
timestamp start/stop: 2021-12-30 16:53:42 / 2021-12-30 16:54:13
wal start/stop: 0000001500000001000000BB / 0000001500000001000000BB
database size: 1.9GB, backup size: 1.9GB
repository size: 633.0MB, repository backup size: 633.0MB

3)查看某个备份集的信息
注意:查看某个备份集的信息,需要指定备份节点stanza。

[kingbase@PG-1 ~]$ sys_rman --config /home/kingbase/testkingbase/sys_rman.conf --stanza=test --set='20211230-165342F' info
stanza: test
status: ok
cipher: none

db (current)
wal archive min/max (V008R006C005B0023-1): 0000001300000001000000AA/00000015000000020000001F

full backup: 20211230-165342F
timestamp start/stop: 2021-12-30 16:53:42 / 2021-12-30 16:54:13
wal start/stop: 0000001500000001000000BB / 0000001500000001000000BB
database size: 1.9GB, backup size: 1.9GB
repository size: 633.0MB, repository backup size: 633.0MB
database list: esrep (16384), security (16169), system (24716), test (16168)


命令解析之expire
sys_rman help expire
用于将超过保留期的备份过期。如果设置保留两次完整备份,无论时间隔两小时或几周,执行该命令将只保留两个完整备份。
参数解析:
  • --set
    将指定的备份集过期,使用该参数数必须指定备份节点stanza;
  • --cmd-ssh
    客户端ssh路径;
  • --config
    sys_rman的配置文件;
  • --stanza
    指定备份节点stanza;
  • --log-level-console
    日志级别;
  • --repo-path
    指定备份存储的路径;
  • --kb-host
    通过ssh操作的kingbase数据库主机;
  • --kb-host-port
    当kb-host设置时,需要设置该参数,ssh远程操作使用的端口;
  • --kb-host-user
    ssh远程操作使用的操作系统用户,当kb-host设置时,需要设置该参数。
示例:
1)查看当前备份集
[kingbase@PG-1 test]$ sys_rman --config /home/kingbase/testkingbase/sys_rman.conf --stanza=test info
stanza: test
status: ok
cipher: none

db (current)
wal archive min/max (V008R006C005B0023-1): 0000001300000001000000B8/000000150000000200000025

full backup: 20211230-131047F
timestamp start/stop: 2021-12-30 13:10:47 / 2021-12-30 13:11:13
wal start/stop: 0000001300000001000000B8 / 0000001300000001000000B8
database size: 1.9GB, backup size: 1.9GB
repository size: 632.9MB, repository backup size: 632.9MB

full backup: 20211230-165342F
timestamp start/stop: 2021-12-30 16:53:42 / 2021-12-30 16:54:13
wal start/stop: 0000001500000001000000BB / 0000001500000001000000BB
database size: 1.9GB, backup size: 1.9GB
repository size: 633.0MB, repository backup size: 633.0MB

full backup: 20211230-210955F
timestamp start/stop: 2021-12-30 21:09:55 / 2021-12-30 21:13:14
wal start/stop: 000000150000000200000021 / 000000150000000200000021
database size: 2.6GB, backup size: 2.6GB
repository size: 903.3MB, repository backup size: 903.3MB

full backup: 20211230-211401F
timestamp start/stop: 2021-12-30 21:14:01 / 2021-12-30 21:14:35
wal start/stop: 000000150000000200000023 / 000000150000000200000023
database size: 2.6GB, backup size: 2.6GB
repository size: 903.3MB, repository backup size: 903.3MB

full backup: 20211230-211640F
timestamp start/stop: 2021-12-30 21:16:40 / 2021-12-30 21:17:13
wal start/stop: 000000150000000200000025 / 000000150000000200000025
database size: 2.6GB, backup size: 2.6GB
repository size: 903.3MB, repository backup size: 903.3MB

sys_rman设置的保留5个完整备份,因此在执行一次完整备份后,在查看备份集。
[kingbase@PG-1 test]$ sys_rman --config /home/kingbase/testkingbase/sys_rman.conf --stanza=test info
stanza: test
status: ok
cipher: none

db (current)
wal archive min/max (V008R006C005B0023-1): 0000001500000001000000BB/000000150000000200000027

full backup: 20211230-165342F
timestamp start/stop: 2021-12-30 16:53:42 / 2021-12-30 16:54:13
wal start/stop: 0000001500000001000000BB / 0000001500000001000000BB
database size: 1.9GB, backup size: 1.9GB
repository size: 633.0MB, repository backup size: 633.0MB

full backup: 20211230-210955F
timestamp start/stop: 2021-12-30 21:09:55 / 2021-12-30 21:13:14
wal start/stop: 000000150000000200000021 / 000000150000000200000021
database size: 2.6GB, backup size: 2.6GB
repository size: 903.3MB, repository backup size: 903.3MB

full backup: 20211230-211401F
timestamp start/stop: 2021-12-30 21:14:01 / 2021-12-30 21:14:35
wal start/stop: 000000150000000200000023 / 000000150000000200000023
database size: 2.6GB, backup size: 2.6GB
repository size: 903.3MB, repository backup size: 903.3MB

full backup: 20211230-211640F
timestamp start/stop: 2021-12-30 21:16:40 / 2021-12-30 21:17:13
wal start/stop: 000000150000000200000025 / 000000150000000200000025
database size: 2.6GB, backup size: 2.6GB
repository size: 903.3MB, repository backup size: 903.3MB

full backup: 20211230-211828F
timestamp start/stop: 2021-12-30 21:18:28 / 2021-12-30 21:19:04
wal start/stop: 000000150000000200000027 / 000000150000000200000027
database size: 2.6GB, backup size: 2.6GB
repository size: 903.3MB, repository backup size: 903.3MB

发现还是五个备份集合,因为在备份过程中,自动将保留期外的备份删除了,对比两次的结果可以发现:full backup: 20211230-131047F 备份集被删除了。
2)删除指定的备份集

[kingbase@PG-1 test]$ sys_rman --config /home/kingbase/testkingbase/sys_rman.conf --stanza=test --set='20211230-165342F' expire
2021-12-30 21:21:23.147 P00 INFO: expire command begin 2.27: --config=/home/kingbase/testkingbase/sys_rman.conf --log-level-console=info --log-level-file=info --log-path=/home/kingbase/kbdb_repo/log --log-subprocess --repo1-path=/home/kingbase/kbdb_repo --repo1-retention-full=5 --set=20211230-165342F --stanza=test
2021-12-30 21:21:23.149 P00 INFO: expire adhoc backup 20211230-165342F
2021-12-30 21:21:23.154 P00 INFO: remove expired backup 20211230-165342F
2021-12-30 21:21:23.301 P00 INFO: expire command end: completed successfully (159ms)
您在 /var/spool/mail/kingbase 中有新邮件
[kingbase@PG-1 test]$ sys_rman --config /home/kingbase/testkingbase/sys_rman.conf --stanza=test info
stanza: test
status: ok
cipher: none

db (current)
wal archive min/max (V008R006C005B0023-1): 0000001500000001000000BB/000000150000000200000027

full backup: 20211230-210955F
timestamp start/stop: 2021-12-30 21:09:55 / 2021-12-30 21:13:14
wal start/stop: 000000150000000200000021 / 000000150000000200000021
database size: 2.6GB, backup size: 2.6GB
repository size: 903.3MB, repository backup size: 903.3MB

full backup: 20211230-211401F
timestamp start/stop: 2021-12-30 21:14:01 / 2021-12-30 21:14:35
wal start/stop: 000000150000000200000023 / 000000150000000200000023
database size: 2.6GB, backup size: 2.6GB
repository size: 903.3MB, repository backup size: 903.3MB

full backup: 20211230-211640F
timestamp start/stop: 2021-12-30 21:16:40 / 2021-12-30 21:17:13
wal start/stop: 000000150000000200000025 / 000000150000000200000025
database size: 2.6GB, backup size: 2.6GB
repository size: 903.3MB, repository backup size: 903.3MB

full backup: 20211230-211828F
timestamp start/stop: 2021-12-30 21:18:28 / 2021-12-30 21:19:04
wal start/stop: 000000150000000200000027 / 000000150000000200000027
database size: 2.6GB, backup size: 2.6GB
repository size: 903.3MB, repository backup size: 903.3MB


命令解析之restore
sys_rman help restore
用于执行数据库的恢复。
参数解释:
  • --link-all 恢复所有的符号连接,默认:n;
  • --link-map 修改符号连接的目标;
  • --set 指定使用哪个备份集进行恢复,需要同时使用--stanza指定备份节点;
  • --tablespace-map 将表空间恢复到指定位置;
  • --tablespace-map-all 将所有的表空间恢复到指定位置;
  • --target 恢复目标;time,xid,lsn;
  • --target-action 恢复完成后的执行的动作;
  • --type 基于time,xid,lsn恢复;
  • --cmd-ssh 客户端ssh路径;
  • --config sys_rman的配置文件;
  • --stanza 指定数据节点;
  • --log-level-console 日志级别;
  • --repo-host 通过ssh操作远程备库目录的主机;
  • --repo-host-port 通过ssh操作时使用的端口;
  • --repo-host-user 通过ssh操作时,使用的操作系统用户;
  • --kb-path 指定恢复到哪个数据目录。
恢复示例:

sys_rman --config /data/kingbase_backup/sys_rman.conf -
-stanza=test --type=time --recovery='2021-12-30 20:09:00' --kb1-path=/data/kingbase_standby restore


命令解析之archive-push
sys_rman help archive-push
用于WAL日志归档,设置archive_command。
参数解释:
  • --archive-async
    默认:n,异步归档WAL日志;
  • --archive-push-queue-max
    归档队列的大小;
  • --cmd-ssh
    客户端ssh路径;
  • --compress
    归档是否压缩,默认:y;
  • --compress-level
    压缩级别;
  • --compress-type
    压缩算法,默认:gz;
  • --stanza
    指定数据节点;
  • --log-level-console
    日志级别;
  • --repo-host
    通过ssh操作远程备库目录的主机;
  • --repo-host-port
    通过ssh操作时使用的端口;
  • --repo-host-user
    通过ssh操作时,使用的操作系统用户;
  • --repo-path
    归档存储路径;
  • --kb-path
    kingbase数据目。
示例:

archive_command='sys_rman --config
/home/kingbase/sys_rman.conf --stanza=test --archive-async=n archive-push %p'


命令解析之archive-get
sys_rman help archive-get
用户从归档目录中读取WAL日志,用户恢复。
参数解释:
  • --archive-async
    异步获取WAL日志,默认:n;
  • --cmd-ssh
    客户端ssh路径;
  • --config
    sys_rman配置文件;
  • --stanza
    指定数据节点;
  • --log-level-console
    日志级别;
  • --repo-host
    通过ssh操作远程备库目录的主机;
  • --repo-host-port
    通过ssh操作时使用的端口;
  • --repo-host-user
    通过ssh操作时,使用的操作系统用户;
  • --repo-path
    归档存储路径;
  • --kb-path
    归档恢复到哪个kingbase数据目;
示例:

restore_command='sys_rman --config
/home/kingbase/sys_rman.conf --kb1-
path=/data/kingbase_standby --stanza=test --archive-async=n archive-get %f "%p"'


命令解析之stanza-delete
sys_rman help stanza-delete
用于删除stanza节点,该命令要小心使用,它将会永久删除stanza节点的所有备份包括归档日志。
参数解释:
  • --cmd-ssh
    客户端的ssh路径;
  • --config sys_rman
    配置文件路径;
  • --stanza
    定义stanza;
  • --log-file-console
    日志级别;
  • --repo-path
    存储备份和归档的路径;
  • --kb-host
    通过ssh操作的kingbase数据库主机;
  • --kb-host-port
    当kb-host设置时,需要设置该参数,ssh远程操作使用的端口;
  • --kb-host-user
    ssh远程操作使用的操作系统用户,当kb-host设置时,需要设置该参数;
  • --kb-path
    kingbase数据库的数据目录;
  • --kb-port
    kingbase数据库的端口;
  • --kb-user
    kingbase数据库的用户;
  • --kb-pass

    kingbase用户的密码,base64的编码。


命令解析之stanza-upgrade
sys_rman help stanza-upgrade
用户升级stanza节点,在Kingbase升级到较新的主版本后,立即为所有系统sys_rman的配置,必须设置新的数据目录。
参数解释:
  • --backup-standby
    默认:n,是否允许从standby节点发起备份;
  • --cmd-ssh
    客户端ssh的路径;
  • --config
    sys_rman的配置文件;
  • --stanza
    指定定义的stanza;
  • --log-file-console
    日志级别;
  • --repo-path
    指定备份目录;
  • --kb-host
    通过ssh操作的kingbase数据库主机;
  • --kb-host-port
    当kb-host设置时,需要设置该参数,ssh远程操作使用的端口;
  • --kb-host-user
    ssh远程操作使用的操作系统用户,当kb-host设置时,需要设置该参数;
  • --kb-path
    kingbase数据库的数据目录;
  • --kb-port
    kingbase数据库的端口;
  • --kb-user
    kingbase数据库的用户;
  • --kb-pass

    kingbase用户的密码,base64的编码。


命令解析之start、stop
stop 用于停止运行某个stanza的sys_rman。
示例:
[kingbase@PG-1 ~]$ sys_rman 
--config /home/kingbase/testkingbase/sys_rman.conf
--stanza=test stop
2021-12-30 22:05:27.109 P00 INFO: stop command begin 2.27:
--config=/home/kingbase/testkingbase/sys_rman.conf
--log-level-console=info
--log-level-file=info
--log-path=/home/kingbase/kbdb_repo/log
--log-subprocess
--repo1-path=/home/kingbase/kbdb_repo
--stanza=test
2021-12-30 22:05:27.109 P00 INFO:
stop command end: completed successfully (5ms)

再次执行备份:
[kingbase@PG-1 ~]$ sys_rman
--config /home/kingbase/testkingbase/sys_rman.conf
--stanza=test --type full
--archive-copy backup
2021-12-30 22:05:41.546 P00 INFO: backup command begin 2.27:
--archive-copy --compress-level=3 --compress-type=gz
--config=/home/kingbase/testkingbase/sys_rman.conf
--log-level-console=info
--log-level-file=info
--log-path=/home/kingbase/kbdb_repo/log
--log-subprocess --kb1-path=/data/kingbase --kb1-port=54321 --kb1-user=system
--process-max=4
--repo1-path=/home/kingbase/kbdb_repo
--repo1-retention-full=5
--stanza=test --type=full
ERROR: [062]: stop file exists for stanza test
2021-12-30 22:05:41.546 P00 INFO: backup command end: aborted with exception [062]

此时已经不能在执行备份。但不影响其他stanza节点,需要使用start启动该节点的sys_rman:
[kingbase@PG-1 ~]$ sys_rman --config /home/kingbase/testkingbase/sys_rman.conf 
--stanza=test start
2021-12-30 22:05:53.659 P00 INFO: start command begin 2.27:
--config=/home/kingbase/testkingbase/sys_rman.conf
--log-level-console=info
--log-level-file=info --log-path=/home/kingbase/kbdb_repo/log
--log-subprocess
--repo1-path=/home/kingbase/kbdb_repo
--stanza=test
2021-12-30 22:05:53.659 P00 INFO: start command end: completed successfully (7ms)

start 只是运行某个stanza的备份,不会在系统层面启动任何的sys_rman进程。

END


本文作者:魏 强(上海新炬中北团队)

本文来源:“IT那活儿”公众号

文章转载自IT那活儿,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论