目录
基础备份与时间线都是为了时间点恢复。
-
基础备份
基础备份的目的是备份当前的数据库集簇的快照,结合归档日志一起可以恢复至任意的时间点。
- 基础备份通过pg_start_backup命令开始为基础备份做准备,它会:
- 强制进行整页写入模式、
- 切换到当前的WAL段文件、
- 执行检查点,以便在制作基础备份的开始时刻显式创建一个重做点(那么后面就可以从该重做点开始,重放WAL归档日志,以恢复到该重做点之后的任意时间),该检查点的位置保存在非pg_control文件中。
- 新建backup_label文件,保存检查点位置、WAL开始位置(流复制用)、备份方法(如pg_start_backup)、备份来源(主/备库)、时间戳、开始时间线等。
在恢复时,从backup_label文件中,获取检查点位置,在归档日志中读取检查点,从检查点中获取重做点,并从重做点开始重放日志。
- 使用任意归档命令获取数据库集簇的快照,可以备份到远程机器上。
- 执行pg_stop_backup命令完成备份,该命令执行以下步骤:
- 关闭整页写入模式
- 写入一条备份结束的XLOG记录
- 切换WAL段文件
- 创建一个备份历史记录文件,将backup_label的内容复制进来,并加上当前的时间戳,删除原来的backup_label文件。
-
时间点恢复
当pg启动时,如果数据库集簇中存在recovery.conf文件和backup_label文件时,进入恢复模式,与常规恢复模式的区别是:1.时间点恢复从archive_command中设置的归档目录中获取归档日志进行恢复;2.检查点位置从backup_label中获取。
当重放的xlog日志中的时间戳超过目标时间戳时,则时间点恢复完成。并在pg_wal目录与归档目录下生成时间线历史文件。
-
时间线
pg使用不同的时间线来区分原始数据库与恢复生成的数据库(就像word异常关闭,会生成多个版本的word让你选)。
第九章中的WAL段文件名的前8位就是该WAL所属的时间线标识。
时间线历史文件至少包含一行,该行包括:原时间线标识(本时间线标识体现在文件名上)、发生WAL段切换的LSN、恢复目标等。对于多次恢复,会生成多个时间线历史文件,尽管后面的文件包含了前面文件中的数据。
在跨时间线进行恢复时,系统会依据不同的时间线历史文件,读取各条时间线上发生WAL段切换的LSN到恢复目标之间的合适的归档日志中读取XLOG并重放。如下: