postgresql的恢复
1、backup_label文件
#define BACKUP_LABEL_FILE "backup_label"
#define BACKUP_LABEL_OLD "backup_label.old"
在特定条件下,会有一个文件,名为 backup_label
在StartupXLOG执行时,通过 read_backup_label 函数来进行读取:
就是:pg_start_backup,会生成 backup_label文件。pg_stop_backup,会删除backup_label文件。
而如果StartupXLOG函数运行时,发现了backup_label文件,那么意味着它处正在从online backup中恢复的过程中。
backup_label文件包含什么内容:
CHECKPOINT LOCATION:记录此命令创建的检查点的LSN位置。
START WAL LOCATION:做恢复时用到的WAL日志文件的位置。不与PITR一起使用,而是与流式复制一起使用。它被命名为“START WAL LOCATION”,因为处于复制模式的备用服务器在初始启动时只读取一次该值。
BACKUP MET HOD:用于进行此基础备份的方法(pg_start_backup或pg_basebackup)。
BACKUP FROM:显示此备份是从主备份还是从备用备份。
START TIME:执行pg_start_backup时的时间戳。
LABEL:在pg_start_backup中指定的标签。
START TIMELINE:备份开始的时间线。这是为了进行健全性检查,并已在版本11中引入。
2、minRecoveryPoint
在archive recovery期间,为了防止重复回放redo日志,
typedef enum DBState
{
DB_STARTUP = 0,/*数据库启动*/
DB_SHUTDOWNED,/*数据库正常关闭*/
DB_SHUTDOWNED_IN_RECOVERY,/*数据库在恢复时关闭*/
DB_SHUTDOWNING,/*数据库启动到正常关闭过程中崩溃*/
DB_IN_CRASH_RECOVERY,/*数据库在恢复过程中崩溃*/
DB_IN_ARCHIVE_RECOVERY,/*数据库处于归档恢复*/
DB_IN_PRODUCTION/*数据库处于正常工作状态,等待接受事务处理*/
} DBState;
DB_STARTUP:表示数据库正在启动状态,实际上没有使用该状态。
DB_SHUTDOWNED:数据库实例正常关闭(非standby)控制文件写入的状态就是这个状态
DB_SHUTDOWNED_IN_RECOVERY:standby实例正常关闭,控制文件写入的状态是这个状态。是由CreateRestartPoint修改该状态。
DB_SHUTDOWNING:非standby实例在关闭时,做checkpoint:CreateCheckPoint,开始做时修改为该状态,做完后修改为DB_SHUTDOWNED状态。
DB_IN_CRASH_RECOVERY:实例异常关闭,重启后,恢复时需要将实例先置为该状态
DB_IN_ARCHIVE_RECOVERY:standby实例重启后置为该状态。
DB_IN_PRODUCTION:非standby实例正常重启后就是这个状态,standby是DB_IN_ARCHIVE_RECOVERY
- 点赞
- 收藏
- 关注作者
评论(0)