此场景为单机数据库节点内部备份,方便部署和操作,但备份REPO与数据库实例处于同一个物理主机,冗余度较低。
前期准备
配置ksql免密登录(必须)
在Kingbase数据库运行维护中,经常用到ksql工具登录数据库,本地免密登录可以让维护数据库时,摆脱每次登库输入用户名密码;下面介绍KingbaseES V8数据库2种配置免密登录的方法。
ksql登录时,会去数据库安装用户家目录下的密码文件.encpwd中读取账户,从而登入数据库;密码文件为普通文本文件,可以vi创建,也可以使用kingbase提供的工具sys_encpwd工具来生成密码文件。
本案例采用system用户做演示,若需其他用户视情况更改。
配置环境变量
su - kingbase
vi .bash_profile
export KINGBASE_USER=system
export KINGBASE_PORT=54326
export KINGBASE_DATABASE=test
.encpwd内容解析
每一行代表一条访问规则记录,可以配置多条记录;每条记录包含5个字段,字段与字段之间用冒号“:”分隔,5个字段分别为:主机地址、端口号、库名、用户名、密码(加密格式);
.encpwd若不存在会创建,若已存在,会追加记录。
例:
127.0.0.1:54321:test:u1:MTIzNDU2
sys_encpwd配置工具使用方法
该工具包含5个参数,5个参数均需要输入才能配置成功
参数说明:
-H, --hostname=主机地址,允许单主机地址匹配和全匹配,全匹配时使用*指定
-P, --portnum=端口号,仅允许单端口匹配
-D, --database=数据库名,允许单数据库匹配和全匹配,全匹配时使用*指定
-U, --user=用户名,仅允许单用户匹配
-W, --password=用户对应的密码,仅允许单用户匹配
注意:当前四个参数输入与原文件中的某一条记录完全相同时,会修改该条记录相应的密码,否则生成一条新的记录。
示例1:将新创建用户登录信息加入密码文件
--创建用fuwa并指定密码,用ksql测试登录需要输入密码
[kingbase@node1 ~]$ ksql -Usystem -W test
口令:
ksql (V8.0)
输入 "help" 来获取帮助信息.
test=# create user fuwa with password 'fuwa';
CREATE ROLE
test=# \q
[kingbase@node1 ~]$ ksql -Ufuwa test
ksql (V8.0)
输入 "help" 来获取帮助信息.
test=> --使用sys_encpwd工具配置密码,指定fuwa用户可以从任意主机、任意端口,登录任意数据库
[kingbase@node1 ~]$ sys_encpwd -H \* -P \* -D \* -U fuwa -W fuwa
[kingbase@node1 ~]$ cat .encpwd
*:*:*:fuwa:ZnV3YQ==参数说明:-H 指定任意主机,-P指定任意端口,-D指定任意库*,“*”为特殊字符,需要加\转义**--测试用户fuwa免密登录
[kingbase@node1 ~]$ ksql -Ufuwa test
ksql (V8.0)
输入 "help" 来获取帮助信息.test=>
示例2:对system用户登录信息加入密码文件
[kingbase@node1 ~]$ sys_encpwd -H \* -P \* -D \* -U system -W kingbase
[kingbase@node1 ~]$ cat .encpwd
*:*:*:fuwa:ZnV3YQ==
*:*:*:system:a2luZ2Jhc2U=
问题:免密登录配置后登录失败
--问题描述
免密登录配置后登录失败
[kingbase@guanxishujukufuwuqi2 ~]$ cat .encpwd
*:*:*:system:dG9wYWhwY18xMjM=
[kingbase@guanxishujukufuwuqi2 ~]$ ksql
ksql: error: could not connect to server: could not connect to server: No such file or directoryIs the server running locally and acceptingconnections on Unix domain socket "/tmp/.s.KINGBASE.54321"?
[kingbase@guanxishujukufuwuqi2 ~]$ ps -ef | grep Kingbase
kingbase 2044 1 0 Dec20 ? 00:00:08 /KingbaseV8R6/KESRealPro/V008R006C008B0014/Server/bin/kingbase -D /topsoft/kbdata
kingbase 563074 555702 0 19:45 pts/0 00:00:00 grep Kingbase--解决办法
数据库开启归档模式(必须)
--开启归档模式
[kingbase@node1 ~]$ vi /data/kingbase.conf
#archive_mode = off # enables archiving; off, on, or always
#archive_command = ''
改为
archive_mode = on # enables archiving; off, on, or always
archive_command = ''--重启库
[kingbase@node1 ~]$ sys_ctl restart -D /data/
补充:archive_command 没有被注释,内容将被脚本自动修改
规划备份目录
[root@node1 bin]# mkdir -p /kbrmanbak
[root@node1 bin]# chown -R kingbase:kingbase /kbrmanbak/
[root@node1 bin]# chmod -R 755 /kbrmanbak/
sys_rman的初始化配置
准备初始配置文件
sys_backup.conf,初始化配置文件,供操作人员修改的配置文件;
sys_rman.conf,运行时配置文件,由初始化动作自动生成,不推荐人为后续的修改。
工具按照如下顺序寻找初始化配置文件
cd /KingbaseES/V8/Server
# bin/sys_backup.conf
# share/sys_backup.conf
生成sys_backup.conf并更改
V008R006C005B0023之后的版本,支持securecmdd或sshd;之前的版本支持sshd。
--查找sys_backup.conf模板位置
[kingbase@node1 bin]$ find / -name sys_backup.conf
/KingbaseES/V8/Server/share/sys_backup.conf
/KingbaseES/V8/ClientTools/share/sys_backup.conf
/KingbaseES/V8/ManagerTools/share/sys_backup.conf--生成正式sys_backup.conf文件
[kingbase@node1 bin]$ cp /KingbaseES/V8/Server/share/sys_backup.conf /KingbaseES/V8/Server/bin/sys_backup.conf--正式sys_backup.conf文件 追加以下内容:
# 网络限速,单位固定为 MB/s, 默认为0,代表不限速,配置文件仅接受纯数字
# band witdh limit, fixed in MB/s, default 0 means no limit
_band_width=0
# 使用通讯协议,默认使用securecmdd,可选使用ssh,视生产环境版本更改参数值
# V008R006C005B0023之后的版本,支持securecmdd或sshd;之前的版本支持sshd。
# on means securecmdd, off means normal ssh
_use_scmd=on
# 是否快速启动备份,立即生成checkpoint,默认y
# whether to sys_start_backup() fastly, y or n
_start_fast=y
#可在指定备份时、还原时并行处理可使用的并发进程数量
--process-max=4
# 是否在备份时使用压缩存储,默认为none不压缩 若指定压缩级别,可选范围 [ 0 - 9 ]
# whether to gz the target file, none or gz
_compress_type=gz
--compress-level=3
# 在init过程中,检查未归档的WAL的容量,
# 如果超过设置值,报错并退出init过程
# 单位固定为MB,可选 128 ~ 1024
# if the non archived WAL files , more than this setting
# show ERROR and break the backup-init, unit be fixed in MB, 128 ~ 1024
_non_archived_space=1024
# 不启用归档统计功能
_archive_statistics=n--更改正式sys_backup.conf文件,更改后内容如下:
[kingbase@node1 bin]$ cat /KingbaseES/V8/Server/bin/sys_backup.conf
#file: sys_backup.conf
#dest dir: <cluster_dir>/kingbase/bin/sys_backup.conf
#dest dir: <cluster_dir>/kingbase/share/sys_backup.conf#单机 single 集群 cluster 集群各节点独立备份 single-pro
# target db style enum: single/cluster
_target_db_style="single"
#一个数据库节点的IP,支持主机名、IPv4、IPv6地址
# one kingbase node IP
# just provide one IP, script will use 'repmgr cluster show' get other node IP
_one_db_ip="192.168.40.110"
#REPO备份节点的IP 本配置项支持主机名、IPv4、IPv6地址
# 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="192.168.40.110"
# 备份服务器的标签,仅在备份范畴内使用
# 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="/kbrmanbak/kbbr_repo"
# 保存全量备份的数目,超过此数目的全量备份将被自动移除
# 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=1
# 自动执行差异备份的间隔天数,0表示不执行
# count of days, interval to do DIFF-backup
_crond_diff_days=0
# 自动执行增量备份的间隔天数,0表示不执行
# count of days, interval to do INCR-backup
_crond_incr_days=0
# 自动执行全量备份的时间点,2表示凌晨2点
# HOUR to do the FULL-backup
_crond_full_hour=2
# 自动执行差异备份的时间点,3表示凌晨3点
# HOUR to do the DIFF-backup
_crond_diff_hour=3
# 自动执行增量备份的时间点,4表示凌晨4点
# HOUR to do the INCR-backup
_crond_incr_hour=4
# 操作系统常见命令的全路径文件名
# OS cmd define
_os_ip_cmd="/sbin/ip"
_os_rm_cmd="/bin/rm"
_os_sed_cmd="/bin/sed"
_os_grep_cmd="/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"
# 网络限速,单位固定为 MB/s, 默认为0,代表不限速,配置文件仅接受纯数字
# band witdh limit, fixed in MB/s, default 0 means no limit
_band_width=0
# 使用通讯协议,默认使用securecmdd,可选使用ssh,视生产环境版本更改参数值
# V008R006C005B0023之后的版本,支持securecmdd或sshd;之前的版本支持sshd。
# on means securecmdd, off means normal ssh
_use_scmd=on
# 是否快速启动备份,立即生成checkpoint,默认y
# whether to sys_start_backup() fastly, y or n
_start_fast=y
#可在指定备份时、还原时并行处理可使用的并发进程数量
--process-max=4
# 是否在备份时使用压缩存储,默认为none不压缩 若指定压缩级别,可选范围 [ 0 - 9 ]
# whether to gz the target file, none or gz
_compress_type=gz
--compress-level=3
# 在init过程中,检查未归档的WAL的容量,
# 如果超过设置值,报错并退出init过程
# 单位固定为MB,可选 128 ~ 1024
# if the non archived WAL files , more than this setting
# show ERROR and break the backup-init, unit be fixed in MB, 128 ~ 1024
_non_archived_space=1024
# 不启用归档统计功能
_archive_statistics=n
注意事项:
[kingbase@node1 bin]$ vi /KingbaseES/V8/Server/bin/sys_backup.conf
....
# 使用通讯协议,默认使用securecmdd,可选使用ssh,视生产环境版本更改参数值
# V008R006C005B0023之后的版本,支持securecmdd或sshd;之前的版本支持sshd。
# on means securecmdd, off means normal ssh
_use_scmd=off
...--查看版本方法
[kingbase@node1 bin]$ ksql -V
ksql (Kingbase) V008R006C005B0023
sys_rman初始化
初始化步骤
kingbase@node1 kbrmanbak]$ sys_backup.sh init
The authenticity of host '192.168.40.110 (192.168.40.110)' can't be established.
ECDSA key fingerprint is b8:54:e0:74:c5:e2:33:46:0d:7d:39:91:e3:b5:5a:6d.
Are you sure you want to continue connecting (yes/no)? yes
root@192.168.40.110's password:
# generate single sys_rman.conf...DONE
# update single archive_command with sys_rman.archive-push...DONE
# create stanza and check...(maybe 60+ seconds)
2023-12-22 13:43:32.069 CST [12140] 警告: max_connections should be less than or equal than 10 (restricted by license)
2023-12-22 13:43:32.069 CST [12140] 提示: the value of max_connect is set 10
# 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.
问题处理
check stanza failed
--问题描述:
sys_rman初始化报错
[kingbase@node1 bin]$ sys_backup.sh init
The authenticity of host '192.168.40.110 (192.168.40.110)' can't be established.
ECDSA key fingerprint is b8:54:e0:74:c5:e2:33:46:0d:7d:39:91:e3:b5:5a:6d.
Are you sure you want to continue connecting (yes/no)? yes
Please input password ...
root@192.168.40.110's password: local <-> root@192.168.40.110 ssh pwd-less OK.
# generate single sys_rman.conf...DONE
# update single archive_command with sys_rman.archive-push...DONE
# create stanza and check...(maybe 60+ seconds)
ERROR: check stanza failed, check log file /KingbaseES/V8/Server/log/sys_rman_check.log--分析过程
[kingbase@node1 bin]$ tail -300f /KingbaseES/V8/Server/log/sys_rman_check.log
2023-12-22 13:38:56.493 P00 INFO: check command begin 2.27: --config=/kbrmanbak/kbbr_repo/sys_rman.conf --log-level-console=info --log-level-file=info --log-path=/KingbaseES/V8/Server/log --log-subprocess --kb1-path=/data --kb1-port=54321 --kb1-user=system --repo1-path=/kbrmanbak/kbbr_repo --stanza=kingbase
ERROR: [068]: archive_command '[null]' must contain sys_rman
2023-12-22 13:38:57.009 P00 INFO: check command end: aborted with exception [068]--解决办法
去掉archive_command前的#标识,去掉后如下
archive_command='/KingbaseES/V8/Server/bin/sys_rman --config /kbrmanbak/kbbr_repo/sys_rman.conf --stanza=kingbase archive-push %p'重启库
sys_backup.sh init删除目录
cd /kbrmanbak/
rm -rf kbbr_repo/再次sys_rman初始化成功
kingbase@node1 kbrmanbak]$ sys_backup.sh init
The authenticity of host '192.168.40.110 (192.168.40.110)' can't be established.
ECDSA key fingerprint is b8:54:e0:74:c5:e2:33:46:0d:7d:39:91:e3:b5:5a:6d.
Are you sure you want to continue connecting (yes/no)? yes
root@192.168.40.110's password:
# generate single sys_rman.conf...DONE
# update single archive_command with sys_rman.archive-push...DONE
# create stanza and check...(maybe 60+ seconds)
2023-12-22 13:43:32.069 CST [12140] 警告: max_connections should be less than or equal than 10 (restricted by license)
2023-12-22 13:43:32.069 CST [12140] 提示: the value of max_connect is set 10
# 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.
securecmdd does not work
--问题描述
[kingbase@guanxishujukufuwuqi2 share]$ sys_backup.sh init
ERROR: securecmdd does not work, please check--解决办法[root@guanxishujukufuwuqi2 ~]# cd /KingbaseV8R6/KESRealPro/V008R006C008B0014/ClientTools/guitools/DeployTools/zip
[root@guanxishujukufuwuqi2 zip]$ ls -l
total 232164
-rwxrwxr-x 1 root root 179967 Sep 2 04:15 cluster_install.sh
-rw-rw-r-- 1 root root 234974045 Sep 2 04:15 db.zip
-rw-rw-r-- 1 root root 14409 Sep 2 04:15 install.conf
-rw-rw-r-- 1 root root 2552788 Sep 2 04:15 securecmdd.zip
-rwxrwxr-x 1 root root 7374 Sep 2 04:15 trust_cluster.sh
[root@guanxishujukufuwuqi2 zip]$ unzip securecmdd.zip
Archive: securecmdd.zipcreating: securecmdd/creating: securecmdd/lib/inflating: securecmdd/lib/libcrypt.so.1 inflating: securecmdd/lib/libcrypto.so.1.1 inflating: securecmdd/lib/libssl.so.1.1 creating: securecmdd/bin/inflating: securecmdd/bin/sys_securecmd inflating: securecmdd/bin/sys_secureftp inflating: securecmdd/bin/sys_HAscmdd.sh inflating: securecmdd/bin/sys_securecmdd creating: securecmdd/share/inflating: securecmdd/share/sys_HAscmdd.conf inflating: securecmdd/share/key_file inflating: securecmdd/share/securecmdd_config inflating: securecmdd/share/securecmdd.service inflating: securecmdd/share/securecmd_config inflating: securecmdd/share/accept_hosts [root@guanxishujukufuwuqi2 zip]$ cd securecmdd/bin/
[root@guanxishujukufuwuqi2 bin]$ ls -l
total 2032
-rwxr-xr-x 1 root root 34468 Sep 2 04:15 sys_HAscmdd.sh
-rwxr-xr-x 1 root root 854936 Sep 2 04:15 sys_securecmd
-rwxr-xr-x 1 root root 986600 Sep 2 04:15 sys_securecmdd
-rwxr-xr-x 1 root root 198976 Sep 2 04:15 sys_secureftp说明:必须root下启动[root@guanxishujukufuwuqi2 bin]# sh sys_HAscmdd.sh init
successfully initialized the sys_securecmdd, please use "sys_HAscmdd.sh start" to start the sys_securecmdd
[root@guanxishujukufuwuqi2 bin]# sh sys_HAscmdd.sh start
Created symlink /etc/systemd/system/multi-user.target.wants/securecmdd.service → /etc/systemd/system/securecmdd.service.
--问题描述
[kingbase@guanxishujukufuwuqi2 ~]$ sys_backup.sh init
# pre-condition: check the non-archived WAL files
# generate single sys_rman.conf...DONE
# 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)
ERROR: full backup failed, check log file /KingbaseV8R6/KESRealPro/V008R006C008B0014/Server/log/sys_rman_backup.log[kingbase@guanxishujukufuwuqi2 ~]$ tail -300f /KingbaseV8R6/KESRealPro/V008R006C008B0014/Server/log/sys_rman_backup.log
2023-12-29 14:53:23.955 P01 INFO: backup file /topsoft/kbdata/base/1/1177 (0B, 99%)
2023-12-29 14:53:23.955 P02 INFO: backup file /topsoft/kbdata/.wallet/userkey.kr (0B, 99%)
2023-12-29 14:53:24.057 P03 INFO: backup file /topsoft/kbdata/.wallet/tspkey.kr (0B, 99%)
2023-12-29 14:53:24.257 P01 INFO: backup file /topsoft/kbdata/.wallet/tbcolkey.kr (0B, 99%)
2023-12-29 14:53:24.257 P02 INFO: backup file /topsoft/kbdata/.wallet/method.md (0B, 99%)
ERROR: [041]: raised from local-4 protocol: unable to open file '/topsoft/kbdata/kingbase.conf_back_2023-12-20_14_11_44' for read: [13] Permission denied[file_open_err] on retry after 0ms[file_open_err] on retry after 15000ms
2023-12-29 14:53:32.616 P00 INFO: backup command end: aborted with exception [041]
备份管理与优化
性能优化-并行处理
工具支持多进程并发拷贝物理文件;请根据当前环境的主库的性能情况,合理设置多进程数量。
可指定备份时、还原时并行处理可使用的并发进程数量。
–process-max=4 # 默认指定可并发4个进程来备份或还原 可选范围是1~999
性能优化-压缩优化
压缩将节约空间、消耗时间;不压缩将节约时间、消耗空间;请根据场景需要,设置是否压缩存储备份集和归档WAL日志文件。
指定备份文件实际存储时压缩算法和压缩级别
--compress-type= none # none 不压缩,默认设置,可选 none / gz
--compress-level=3 # 指定压缩级别,可选范围 [ 0 - 9 ]
备份还原时限速
备份和还原时,工具可以进行限速,单位固定为MB/s,可以在sys_rman.conf中动态调整。
限速功能,在还原场景时,因为逐个文件进行checksum校验和比对,限速精度受到影响,实际均速低于设定速度。建议在还原时不开启限速功能, REPO_PATH/sys_rman.conf 配置 band-width=0 。
在单机和集群内部备份场景时,限速行为将生效
备份任务的启停
sys_backup.sh start
脚本使用crontab命令增加定时任务,使用sys_rman进行定时备份;可以通过crontab -l 查看定时任务。
全量备份、差异备份、增量备份,均为可选。
备份类型、备份周期和备份时间由配置文件sys_backup.conf指定。
[kingbase@node1 ~]$ sys_backup.sh start
Enable some sys_rman in crontab-daemon
Set full-backup in 1 days
0 2 */1 * * kingbase /KingbaseES/V8/Server/bin/sys_rman --config=/kbrmanbak/kbbr_repo/sys_rman.conf --stanza=kingbase --archive-copy --type=full backup >> /KingbaseES/V8/Server/log/sys_rman_backup_full.log 2>&1[kingbase@node1 ~]$ crontab -l
0 2 */1 * * /KingbaseES/V8/Server/bin/sys_rman --config=/kbrmanbak/kbbr_repo/sys_rman.conf --stanza=kingbase --archive-copy --type=full backup >> /KingbaseES/V8/Server/log/sys_rman_backup_full.log 2>&1说明:
需要去掉以下中的kingbase,不然备份提示/bin/sh: kingbase: 未找到命令
[kingbase@node1 ~]$ crontab -l
0 2 */1 * * kingbase /KingbaseES/V8/Server/bin/sys_rman --config=/kbrmanbak/kbbr_repo/sys_rman.conf --stanza=kingbase --archive-copy --type=full backup >> /KingbaseES/V8/Server/log/sys_rman_backup_full.log 2>&1
sys_backup.sh stop
从系统CRONTAB中移除所有sys_rman相关的备份条目。
[kingbase@node1 ~]$ sys_backup.sh stop
Disable all sys_rman in crontab-daemon[kingbase@node1 kingbase]$ crontab -l
no crontab for kingbase
sys_backup.sh pause
暂时停止定时备份动作。
sys_backup.sh pause
Puase the sys_rman...DONE
sys_backup.sh unpause
恢复被暂停的定时备份动作。
sys_backup.sh unpause
Un-Puase the sys_rman...DONE
sys_backup.conf信息变化处理
如果sys_backup.conf中关于数据库的信息(包含IP、数据库名、端口等)有所修改,需要重新初始化备份,执行 sys_backup.sh init重新初始化备份功能。
如果sys_backup.conf中关于备份周期和时间点的信息有所修改,重新配置即可,执行sys_backup.sh start重新配置自动备份周期。
sys_rman.conf配置说明
运行时配置文件sys_rman.conf,不推荐手动修改,如果需要进行修改,请参考此段落:
以下参数修改后需要重新初始化生效
# DB节点的data目录
kb*-path=/home/kingbase/kingbase/data
# DB节点的监听端口
kb*-port=54321
# DB节点的数据库用户
kb*-user=esrep
# DB节点的IP地址
kb*-host=10.11.12.13
# DB节点的OS用户名
kb*-host-user=kingbase
# REPO节点的实际备份目录
repo1-path=/home/kingbase/kbbr_repo
修改完成后,执行以下命令完成重新初始化
/home/kingbase/cluster/project/cluster/kingbase/bin/sys_rman --config=/home/kingbase/kbbr_repo/sys_rman.conf --stanza=kingbase stanza-create
/home/kingbase/cluster/project/cluster/kingbase/bin/sys_rman --config=/home/kingbase/kbbr_repo/sys_rman.conf --stanza=kingbase check
/home/kingbase/cluster/project/cluster/kingbase/bin/sys_rman --config=/home/kingbase/kbbr_repo/sys_rman.conf --stanza=kingbase --type=full backup
以下参数修改后需要一次全量备份生效
# 是否压缩备份的数据,默认none不压缩,可选 none / gz
# 压缩将节约空间、消耗时间;不压缩将节约时间、消耗空间。
compress-type=none
# 压缩级别, 默认3, 1~9,9代表最大压缩,同时也最耗时
compress-level=3
修改完成后,执行以下命令完成一次全量备份:
/home/kingbase/cluster/project/cluster/kingbase/bin/sys_rman --config=/home/kingbase/kbbr_repo/sys_rman.conf --stanza=kingbase --type=full backup
以下参数修改后直接生效
# REPO节点保留至多的全量备份
repo*-retention-full=5
# REPO节点的sys_rman工具日志保存路径
log-path=/home/kingbase/kingbase/log
# 写入到日志文件的日志级别, info debug trace
log-level-file=info
# 执行命令时屏幕的日志级别, info debug trace
log-level-console=info
# 是否记录子进程的日志, y / n
log-subprocess=y
# 多进程的至多数目
process-max=4
# 是否快速生成checkpoint,在开启实际备份之前
start-fast=y
# 是否保留目录下的软链接
link-all=y
# 未归档的WAL文件容量的警告阈值
non-archived-space=1024
# 归档单个WAL的超时时间
archive-timeout=600
# 限速,单位固定为MB/s
band-width=0
# 备份过程中遇到校验和等问题时会执行的自定义命令,如发送告警邮件等
alert-command=( cd /opt/Kingbase/ES/Server/bin; ./sys_mail -s "%t" -b "%c" & )
常见异常处理
1、ERROR RMAN-00500: Non archived WAL files more than 1024 M , Please check the user-guide
原因:在初始化阶段,未归档的WAL文件超过了设定的容忍值
解决:
- 确保这些WAL日志是否有被其他第三方使用,若有,请尽快联系第三方转移这些归档。
- 确保这些WAL日志是否被不恰当使用后造成积压(例如归档目录意外删除,存储掉线等)。若有,将其积压文件用scp/cp等方式转移。
- 在确认这些日志无用后,进入数据库子目录(默认data/sys_wal/archive_status/),rm -rf *.ready 。随后进入数据库执行checkpoint,此时会清理这些积压日志,此操作会引起IO高峰,选择在可维护时间段内进行。
- 重新执行初始化 sys_backup.sh init
2、ERROR: [058]: version ‘12’ and path ‘…/data’ queried from cluster do not match version ‘12’ and ‘/home/kingbase/cluster/project/cluster/kingbase/data’ read from ‘/home/kingbase/cluster/project/cluster/kingbase/data/global/sys_control’
原因:备份工具需要绝对路径来寻找data目录
解决:启动数据库时,应该使用绝对路径来指定data目录
3、ERROR: sys_backup.conf does not exist
原因:在相应目录不存在sys_backup.conf文件
解决:确认./kingbase/bin/ 或 kingbase/share/ 存在此文件
4、ERROR: /home/kingbase/cluster/project/cluster/kingbase/bin/sys_backup.conf invalid.
原因:指明配置文件具有无效的配置内容
解决:请根据模板,确认配置文件的内容
5、ERROR: Configured repo-path [/home/kingbase/kbbr_repo] be NOT accessable by current user
原因:当前数据库用户不能有效访问配置文件指定的repo-path目录
解决:通过高权限用户比如ROOT去修改目标目录的权限,或重新指定目录
6、ERROR: Configured repo-retention-full invalid.
原因:配置文件中的repo-retention-full不是有效的数字
解决:该配置项repo-retention-full需要大于0的数字
7、ERROR: Configured crond-full-days invalid.
原因:配置文件中的crond-full-days不是有效的数字
解决:该配置项crond-full-days需要大于或等于0的数字
8、ERROR: Configured crond-diff-days invalid.
原因:配置文件中的crond-diff-days不是有效的数字
解决:该配置项crond-diff-days需要大于或等于0的数字
9、ERROR: Configured crond-incr-days invalid.
原因:配置文件中的crond-incr-days不是有效的数字
解决:该配置项crond-incr-days需要大于或等于0的数字
10、ERROR: Configured crond-full-hour invalid.
原因:配置文件中的crond-full-hour不是有效的数字
解决:该配置项crond-full-hour需要大于0
11、ERROR: Configured crond-diff-hour invalid.
原因:配置文件中的crond-diff-hour不是有效的数字
解决:该配置项crond-diff-hour需要大于0
12、ERROR: Configured crond-incr-hour invalid.
原因:配置文件中的crond-incr-hour不是有效的数字
解决:该配置项crond-incr-hour需要大于0
13、ERROR: sys_backup.sh init must executed firstly
原因:尚未初始化工具的环境
解决:执行其他命令之前,执行init初始化命令
14、ERROR: sys_backup.sh must be executed by db-specify user
原因:本脚本不能由非数据库OS用户执行
解决:使用数据库关联的OS用户执行
15、ERROR: repo_ip must located in local, and sys_backup.sh be executed at REPO host.
原因:配置文件sys_backup.conf指定的repo_ip不存在于本地
解决:初始化动作必须在REPO本机执行
16、ERROR: local ssh-keygen fail,please check /tmp/ssh-keygen.log
原因:REPO节点与数据库节点的SSH免密配置失败
解决:检查日志文件,确认系统原因
17、ERROR: config file ‘/home/kingbase/cluster/project/cluster/kingbase/etc/repmgr.conf’ does not exist
原因:不能找到需要的第三方工具配置文件repmgr.conf
解决:确认目录下存在repmgr.conf文件
18、ERROR: ‘/home/kingbase/cluster/project/cluster/kingbase/etc/repmgr.conf’ at ‘192.168.28.121’ invalid"
原因:在数据库节点192.168.28.121上的repmgr.conf文件内容有误
解决:确认此节点上的repmgr文件
19、ERROR: sys_backup.sh init must be executed by db-specify user ‘kingbase’
原因:初始化命令只能由数据库关联用户执行
解决:使用数据库关联用户执行
20、ERROR: can not connect to db at 192.168.28.37,please check /home/kingbase/cluster/project/cluster/kingbase/data/sys_log/
原因:不能访问节点的数据库服务
解决:检查本信息给出的日志目录,确认原因
21、ERROR: at 192.168.28.37, user ‘kingbase’ can not access the repo-path [/home/kingbase/kbbr_repo]
原因:在数据节点上,指定OS用户不能有效访问repo-path
解决:在此节点,确保指定OS用户的访问权限。
22、ERROR: create stanza failed, check log file /tmp/sys_rman_stanza-create.log
原因:创建stanza失败
解决:检查本信息给出的日志文件
23、ERROR: check stanza failed, check log file /tmp/sys_rman_check.log
原因:创建后的隐式check命令失败
解决:检查本信息给出的日志文件
24、ERROR: full backup failed, check log file /tmp/sys_rman_backup.log
原因:创建后的隐式第一次全量备份失败
解决:检查本信息给出的日志文件
25、ERROR: [050]: unable to acquire lock on file ‘/tmp/sys_rman/kbbr-backup.lock’:
原因:有另外的sys_rman进程在本地环境中运行或上一个进程没有正常退出
解决:删除 /tmp/sys_rman/ *.lock
26、ERROR: [082]: WAL segment 000000010000000000000001 was not archived before the 60000ms timeout HINT: check the archive_command to ensure that all options are correct (especially --stanza). HINT: check the Kingbase server log for errors.
原因之一:可能在互相ssh认证中,需要首次执行一遍YES/NO以过StrictHostKeyChecking的检测。 The authenticity of host ‘10.10.11.xxx (10.10.11.xxx)’ can’t be established. ECDSA key fingerprint is SHA256:dpXDPJcv1S0J8Iy1hpwk2jYi1z5ZxI5eCyKa72LnrYo. Are you sure you want to continue connecting (yes/no)?
解决:要求管理员在数据库节点与外部备份节点之间,以相应的OS用户,互相进行SSH登录,以验证SSH登录场景。
原因之二:可能此时数据库业务量较大,造成的WAL日志文件很多,导致WAL日志文件归档超时(默认60s)
解决:在所有节点的_repo_path/sys_rman.conf文件内的[global]下新增一行“archive-timeout=600”,增大超时时间
27、ERROR:Uncaught FileMissingError: unable to open missing file ‘/home/kingbase/kbbr_repo/backup/kingbase/20201022-141202F/backup.manifest’ for read
原因:因为上一次备份被意外中断,导致上一次备份的某些文件没有正常规整。
解决:进入此错误信息所示目录,找到backup.manifest.copy文件,重新命名为backup.manifest即可再次备份。
28、ERROR: Configured repo-path [/backup/kbbr_repo] already exists
原因:sys_backup.conf内repo-path目录设置不变时,不允许多次执行init操作
解决:将现有的repo-path目录删除(请确认无重要备份数据可以删除)或重命名或移动到其他位置,或者更改sys_backup.conf内repo-path目录设置
29、ERROR: [029]: new backup label ‘20210713-182300F_20210713-144328I’ is not later than latest backup label ‘20210713-182300F_20210713-225102I.manifest.gz’ HINT: has the timezone changed? HINT: is there clock skew?
原因:可能是集群节点时钟不同步
解决:集群中所有节点必须做时钟同步,系统时间需保持一致(要求至少误差范围在2s以内)
30、WARN: unable to check kb-1: [DbConnectError] unable to connect to ‘dbname=‘test’ port=54321 user=‘system’’: FATAL: database “test” does not exist
ERROR: [056]: unable to find primary cluster - cannot proceed
原因:可能是执行sys_rman备份等操作时连接的数据库(默认为test库)不存在,或者是 --kb1-database 参数指定了不存在的数据库
解决:重新创建test库 create database test ,或执行备份等操作时通过 --kb1-database 指定一个存在的数据库,例如: --kb1-database=test1
31、WARN: unable to check kb-1: [DbConnectError] unable to connect to ‘dbname=‘test’ port=54321 user=‘system’’: FATAL: database “test” does not exist
ERROR: [027]: no database found
原因:可能是执行sys_rman check等操作时连接的数据库(默认为test库)不存在,或者是 --kb1-database 参数指定了不存在的数据库
解决:重新创建test库 create database test ,或执行check等操作时通过 --kb1-database 指定一个存在的数据库,例如: --kb1-database=test1
32、ERROR: [055]: sys_control must be present in all online backups HINT: is something wrong with the clock or filesystem timestamps?
原因:可能是sys_control文件自上次备份后一直未被更新导致的,正常情况下,该文件应被频繁地或周期性地修改,对于集群的场景,可能是主节点异常导致备节点上sys_control停止更新
解决:确认sys_control文件的最后修改时间,并调查sys_control停止更新的原因,如问题发生在备节点上,请检查集群状态是否正常,在集群状态正常后再次进行备份
33、FATAL: hot standby is not possible because max_connections = 100 is a lower setting than on the master server (its value was 200)
原因:生成备份集后某时刻又将max_connections等参数改大;sys_rman restore将其还原成原小值,在hot_standby=on的场景下执行sys_ctl start启动重放WAL日志时禁止将max_connections等参数重放成一个更大的值,导致数据库无法启动,sys_log目录下日志显示以上报错
解决:启动数据库前,手动把max_connections等报错的参数改大后再启动数据库;此外,修改配置后即时备份可预防此类报错