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()
会返回等效的内容,并且调用者负责将该文件写入目标节点的数据目录。
源代码
backup label 的文件名定义在 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 月的博客文章