一片荷叶 2019-11-03
【问题1】
目前sdb 的backupOffline 方法,支持增量备份时,不阻塞数据库的读写请求。
如果有如下场景
1 昨天的备份lsn 为 1000
2 今天执行增量备份时,lsn 为 1200
3 执行增量备份过程中,lsn 变为 1300
则本次增量备份,是备份了 lsn 从 1000 - 1200,还是 1000 - 1300?
【问题2】
目前backupOffline 方法,支持执行group 进行备份,也是支持全集群进行备份。
我自己理解,全集群备份和指定group 备份,都是由数据库找到每个group 的
master 节点进行相关的备份。
换言之,backupOffline 方法依赖 master 节点。
由于增量备份,需要依赖上一个备份点的lsn 号,所以如果用户在执行 本次增量备份时,某个group 的master 节点发生变化,数据库会如何表现?
如果在全集群做增量备份,假设有三个group, 只有其中一个group 的master 发生了切换,对于其余两个group 来说,是否会生成新的增量备份文件?还是会自动回滚?
【解决办法】
问题1:
执行增量备份过程中,如果数据库仍在进行操作,是有可能将一部分的操作备份成功的,也就是备份的lsn是备份1000~1300之间。
问题2:
1、执行增量备份过程中,节点切主并不会影响本次备份过程,备份的结果是原主节点产生增量备份。
2、在全集群做了全量备份的情况下,如group1/2/3均做了全量备份,即在每个group的主节点都做了全量备份,然后有一个group的主节点变动了,如group1的主节点从A机器切换到了B机器,此时进行全局的增量备份,其余两个group依旧是会备份成功的,只有切主的group1的主节点增量备份失败,因为其新主节点在进行增量备份时发现没有全量备份,会抛出-264错误,可以通过getLastErrObj()查看更详细的错误。
【问题补充】
解决方法2中提到:
有切主的group1的主节点增量备份失败,因为其新主节点在进行增量备份时发现没有全量备份
我想问一下是如何判断该节点是否有全量备份,是通过检查备份目录是否存在全量备份的文件吗?
【解决办法】
查看节点是否有全量备份可以通过db.listBackup()查看备份信息,如改节点的备份信息中有"EnsureInc": false,则该备份是全量备份文件。