案例说明:
在KingbaseES V8R3集群主库执行sys_rman的全备时,出现‘backup_label does not exist in KINGBASE_DATA’的故障,如下图所示:
适用版本:
KingbaseES V8R3
一、问题现象
如下所示,数据库执行sys_rman物理备份:
[kingbase@node201 bin]$ ./sys_rman -U system -W 123456 -d test -B /home/kingbase/r3_bk -D /home/kingbase/cluster/R3HA/db/data1 -b full backup
ERROR: backup_label does not exist in KINGBASE_DATA.
二、问题分析
在主库上执行sys_rman后,在主库的数据目录下生成了一个backup_label文件,这时我们拷贝主库,拷贝出来的数据文件中就包括了backup_label文件。此文件在备份完成后从数据库data目录下删除,但是会保留在数据库的备份目录下。
如下所示,数据库物理备份目录:
[kingbase@node201 database]$ ls -lh
total 60K
-rw------- 1 kingbase kingbase 224 Oct 27 11:18 backup_label
-rw------- 1 kingbase kingbase 178 Oct 27 11:18 backup_label.old
drwx------ 10 kingbase kingbase 98 Oct 27 11:18 base
drwx------ 2 kingbase kingbase 4.0K Oct 27 11:18 global
-rw------- 1 kingbase kingbase 131 Oct 27 11:18 kingbase.auto.conf
-rw------- 1 kingbase kingbase 24K Oct 27 11:18 kingbase.conf
-rw-r--r-- 1 kingbase kingbase 194 Oct 27 11:18 recovery.done
drwx------ 2 kingbase kingbase 17 Oct 27 11:18 sys_clog
drwx------ 2 kingbase kingbase 6 Oct 27 11:18 sys_commit_ts
.......
backup_label文件内容:
[kingbase@node201 database]$ cat backup_label
START WAL LOCATION: 0/F1000028 (file 0000000300000000000000F1)
CHECKPOINT LOCATION: 0/F1000060
BACKUP METHOD: sys_start_backup
BACKUP FROM: master
START TIME: 2023-10-27 11:18:51 CST
LABEL: 2023-10-27 11:18:51 with sys_rman
三、问题复现
1、关闭数据库服务备份data目录
[kingbase@node201 db]$ cp -var data data1
2、启动数据库服务
如下所示,启动数据库服务后,指定的为data目录:
3、执行数据库物理备份
如下图所示,在备份时由于-D指定的数据库目录是data1,复现了以上错误:
由以上可知,数据库启动的数据目录是data,而对非数据库启动目录data1执行备份,sys_rman无法在data1下生成backup_label文件,在拷贝backup_label文件到备份目录下时缺失,因此出现了‘‘backup_label does not exist in KINGBASE_DATA’的故障。
4、问题解决
按照数据库服务启动指定的数据库路径备份。
四、总结
此次生产环境出现的此错误,是因为集群主库做过数据恢复,数据库当前的数据存储目录名不是data,集群启动后,数据库访问的路径是另外的目录。此时指定data目录备份,导致出现以上错误。应该是人为疏忽导致的错误。