当数据库崩溃或希望回退到数据库之前的某一状态时,openGauss的即时恢复功能( Point-In-Time Recovery,简称PITR )可以支持恢复到备份归档数据之后的任意时间点。
前提条件
基于物理备份的全量数据文件。 基于归档的WAL日志文件。
限制要求
PITR仅支持恢复到物理备份数据之后的某一时间点。 仅主节点可以进行PITR恢复,备机需要进行全量build达成与主机数据同步。
PITR恢复流程
- 将物理备份的文件替换目标数据库目录。
- 删除数据库目录下pg_xlog/中的所有文件。
- 将归档的WAL日志文件复制到pg_xlog文件中(此步骤可以省略,通过配置recovery.conf恢复命令文件中的restore_command项替代)。
- 在数据库目录下创建恢复命令文件recovery.conf,指定数据库恢复的程度。
- 启动数据库。
- 连接数据库,查看是否恢复到希望预期的状态。
- 若已经恢复到预期状态,通过pg_xlog_replay_resume()指令使主节点对外提供服务。
recovery.conf 文件配置介绍
#### 归档恢复配置 ####
restore_command = 'cp /gauss/bak/archive/%f %p' ## 该SHELL命令获取已归档的WAL文件。
archive_cleanup_command = 'pg_archivecleanup /gauss/bak/archive %r' ## 清理备库WAL归档日志的shell命令,每次重启时会执行
recovery_end_command = string ## (可选) 在恢复完成时执行的SHELL命令,为以后的复制或恢复提供一个清理机制
## 说明:
## %f即归档检索中的文件名,%p即复制目的地的路径名,%r最新可用重启点的文件名
## 如果多个备机从相同的归档路径恢复时,需要确保该路径存在所有备机恢复所需要的WAL文件。
#### 恢复目标设置(四选一) ####
recovery_target_name = 'restore_point_1' ## 还原到一个使用pg_create_restore_point()创建的还原点
recovery_target_time = '2020-01-01 12:00:00' ## 还原到一个指定时间戳
recovery_target_xid = '3000' ## 还原到一个事务ID
recovery_target_lsn = '0/0FFFFFF' ## 还原到日志的指定LSN点
recovery_target_inclusive = true ## 声明是否在指定恢复目标之后停止(true) 或 之前停止(false),不支持recovery_target_name 配置
## 注意:如果不配置任何恢复目标 或 配置目标不存在,则默认恢复到最新的WAL日志点。
物理备份(源库)并恢复(至目标库)
-- 源库物理备份
[omm@db1 ~]$ gs_basebackup -D /home/omm/gs_bak -h 192.168.0.225 -p 26000 -U omm -W
Password:
INFO: The starting position of the xlog copy of the full build is: 0/10000028. The slot minimum LSN is: 0/0.
begin build tablespace list
finish build tablespace list
begin get xlog by xlogstream
check identify system success
send START_REPLICATION 0/10000000 success
keepalive message is received
keepalive message is received
keepalive message is received
-- 在目标库物理恢复(物理恢复后暂不启动数据库)
mkdir /gauss1/data/db1
cp -r /home/omm/gs_bak/* /gauss1/data/db1/