一个**backup_label
** 是一个在源节点数据目录的顶层创建的文件,当使用pg_start_backup()
启动独占备份时,或者在目标节点的数据目录中通过流复制协议进行备份时创建。它包含有关备份的元信息,特别是备份开始的LSN,以便备份的服务器知道何时开始应用WAL,以首次启动。
当执行pg_stop_backup()
时,源节点上的backup_label
文件会被删除,并且在服务器成功启动后,目标节点上的文件会被重命名为backup_label.old
。
backup_label 和独占备份的注意事项
如果独占备份正在进行中,并且发生崩溃情况,则backup_label
文件的存在意味着PostgreSQL无法确定它是在作为备份启动还是没有,并且会尝试从文件中记录的检查点位置恢复,该位置可能引用不再可用的WAL文件。
因此,非独占备份(自PostgreSQL 9.1开始由复制协议支持,自PostgreSQL 9.6开始由pg_start_backup()
支持)是进行备份的首选方法。
backup_label 和非独占备份
如果备份是通过流复制协议的BASE_BACKUP
命令(进行非独占备份)进行的,则backup_label
文件将包含在流式数据中。
如果在非独占备份模式下调用pg_start_backup()
,则不会写入backup_label
文件;相反,pg_start_backup()
将返回等效的内容,并且调用者负责将文件写入目标节点的数据目录。
源代码
备份标签文件名在src/include/access/xlog.h中定义
access/xlog.h:#define BACKUP_LABEL_FILE "backup_label"
access/xlog.h:#define BACKUP_LABEL_OLD "backup_label.old"
示例
在使用SELECT pg_start_backup('test backup')
启动独占备份后,将在$PGDATA/backup_label
中创建以下文件
START WAL LOCATION: 0/2000028 (file 000000010000000000000002) CHECKPOINT LOCATION: 0/2000098 BACKUP METHOD: pg_start_backup BACKUP FROM: primary START TIME: 2020-11-05 11:11:02 UTC LABEL: test backup START TIMELINE: 1
有用链接
- 我真的需要那个 backup_label 文件吗? - Robert Haas 于 2023 年 5 月发表的博文