在恢复过程中,用户可以通过使用recovery.conf文件来指定恢复的各个参数,如下:
-
归档恢复设置
- restore_command:用于获取一个已归档段的XLOG日志文件的命令
- archive_cleanup_command:清除不在需要的XLOG日志文件的命令
- recovery_end_command:归档恢复结束后执行的命令
-
恢复目标设置(默认情况下,数据库将会一直恢复到 WAL 日志的末尾)
- recovery_target = ’immediate’:在从一个在线备 份中恢复时,这意味着备份结束的那个点
- recovery_target_name (string):这个参数指定(pg_create_restore_point()所创建)的已命名的恢复点,将恢复到该恢复点
- recovery_target_time (timestamp):这个参数指定恢复到的时间戳
- recovery_target_xid (string):这个参数指定恢复到的事务 ID
- recovery_target_inclusive (boolean):指定是否在指定的恢复目标之后停止(true),或者在恢复目标之前停止 (false);适用于recovery_target_time或者recovery_target_xid被指定的情况;这个设置分别控制事务是否有准确的目标提交时间或 ID 是否将被包括在该恢复中;默认值为 true
- recovery_target_timeline (string):指定恢复到一个特定的时间线
- recovery_target_action (enum):指定在达到恢复目标时服务器应该立刻采取的动作,包括pause(暂停)、promote(接受连接)、shutdown(停止服务器),其中pause为默认动作
-
备库参数设置
- standby_mode(boolean):为on表示作为一个备库,否则不为备库
- primary_conninfo (string):指定备库连接主库的连接字符串
- primary_slot_name (string):通过流复制指定主库的一个复制槽来复制主库数据,如果没有设置primary_conninfo,则此参数无效
- trigger_file (string):指定一个触发器文件,该文件存在可以结束备库的恢复,即升级备库为一个独立的主库
- recovery_min_apply_delay (integer):这个参数允许将恢复延迟一段固定的时间,如果没有指定单位则以毫秒为单位。
如果recovery.conf中同时指定了recoveryTargetXid、recoveryTargetName、recoveryTargetTime时,PostgreSQL会按照RECOVERY_TARGET_XID> RECOVERY_TARGET_NAME > RECOVERY_TARGET_TIME的优先级来获取最终的目标恢复位点。
如果在recovery.conf指定recovery_targetTimeLine为latest,则可以基于当前TimeLineID为起点寻找最新时间线:
- 寻找当前TimeLineID的时间线历史文件“XXX.history”,如果存在则继续寻找,否则错误退出
- TimeLineID是线性增长的,将当前TimeLineID自增1寻找是否存在时间线历史文件,直到不存在对应的时间线历史文件为止,即可找到最新的时间线。