openGauss/MogDB 学习笔记之 -- PITR 恢复

概念描述

背景信息

当数据库崩溃或希望回退到数据库之前的某一状态时,MogDB 的即时恢复功能(Point-In-Time Recovery,简称 PITR)可以支持恢复到备份归档数据之后的任意时间点。

说明

PITR 仅支持恢复到物理备份数据之后的某一时间点。 仅主节点可以进行 PITR 恢复,备机需要进行全量 build 达成与主机数据同步。

前提条件

基于经过物理备份的全量数据文件。 基于已归档的 WAL 日志文件。

PITR 恢复流程

将物理备份的文件替换目标数据库目录。 删除数据库目录下 pg_xlog/中的所有文件。 将归档的 WAL 日志文件复制到 pg_xlog 文件中(此步骤可以省略,通过配置 recovery.conf 恢复命令文件中的 restore_command 项替代)。 在数据库目录下创建恢复命令文件 recovery.conf,指定数据库恢复的程度。 启动数据库。 连接数据库,查看是否恢复到希望预期的状态。 若已经恢复到预期状态,通过 pg_xlog_replay_resume()指令使主节点对外提供服务。

恢复目标设置(四选一)

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 日志点。

测试验证

1、环境准备(gs_baasebackup 备份)

[omm@db1 db1]$ gs_basebackup -U em_ljc -W -h ... -p 26000 -D /home/omm/gs_pitr

Password:

INFO: The starting position of the xlog copy of the full build is: 4/EA000028. The slot minimum LSN is: 0/0.

[2022-10-29 14:18:24]:begin build tablespace list

[2022-10-29 14:18:24]:finish build tablespace list

[2022-10-29 14:18:24]:begin get xlog by xlogstream

[2022-10-29 14:18:24]: check identify system success

[2022-10-29 14:18:24]: send START_REPLICATION 4/EA000000 success

[2022-10-29 14:18:24]: keepalive message is received

[2022-10-29 14:18:24]: keepalive message is received

[2022-10-29 14:18:27]: keepalive message is received

[2022-10-29 14:18:30]: keepalive message is received

[2022-10-29 14:18:30]: keepalive message is received

[2022-10-29 14:18:33]: keepalive message is received

[2022-10-29 14:18:36]: keepalive message is received

[2022-10-29 14:18:36]: keepalive message is received

[2022-10-29 14:18:39]: keepalive message is received

[2022-10-29 14:18:42]: keepalive message is received

[2022-10-29 14:18:42]: keepalive message is received

[2022-10-29 14:18:45]: keepalive message is received

[2022-10-29 14:18:47]: keepalive message is received

[2022-10-29 14:18:50]: keepalive message is received

[2022-10-29 14:18:53]: keepalive message is received

[2022-10-29 14:18:56]: keepalive message is received

[2022-10-29 14:18:59]: keepalive message is received

[2022-10-29 14:18:59]: keepalive message is received

[2022-10-29 14:19:02]: keepalive message is received

[2022-10-29 14:19:05]: keepalive message is received

[2022-10-29 14:19:05]: keepalive message is received

[2022-10-29 14:19:08]: keepalive message is received

[2022-10-29 14:19:11]: keepalive message is received

[2022-10-29 14:19:11]: keepalive message is received

[2022-10-29 14:19:14]: keepalive message is received

[2022-10-29 14:19:17]: keepalive message is received

[2022-10-29 14:19:17]: keepalive message is received

[2022-10-29 14:19:20]: keepalive message is received

[2022-10-29 14:19:23]: keepalive message is received

[2022-10-29 14:19:23]: keepalive message is received

[2022-10-29 14:19:29]:gs_basebackup: base backup successfully

[omm@db1 db1]$

2、创建测试数据(还原点 recovery_target_name )

miao=> create table t1 (id int,tm timestamp,LSN varchar(20));

insert into t1 values(1,now(),'Started');

select * from t1;

select * from pg_switch_xlog();

CREATE TABLE

miao=> insert into t1 values(1,now(),'Started');

INSERT 0 1

miao=> select * from t1;

id | tm | lsn

----+----------------------------+---------

1 | 2022-10-29 14:22:52.273009 | Started

(1 row)

miao=> select * from pg_switch_xlog();

pg_switch_xlog

4/EC0029F8

(1 row)

miao=>

-- 创建一个还原点 restore_point_1

miao=> select pg_create_restore_point('restore_point_1');

pg_create_restore_point

4/ED00EF40

(1 row)

3、第 2 次插入数据(时间 recovery_target_time )

miao=> insert into t1 values(2,now(),'First Insert');

INSERT 0 1

miao=> select * from t1;

id | tm | lsn

----+----------------------------+--------------

1 | 2022-10-29 14:22:52.273009 | Started

2 | 2022-10-29 14:26:10.55628 | First Insert

(2 rows)

miao=> select pg_switch_xlog();

select now();

pg_switch_xlog

4/ED017848

(1 row)

miao=> select now();

now

2022-10-29 14:26:10.754567+08

(1 row)

4、第 3 次插入数据(LSN recovery_target_lsn )

miao=> insert into t1 values(3,now(),'Second Insert');

INSERT 0 1

miao=> select * from t1;

id | tm | lsn

----+----------------------------+---------------

1 | 2022-10-29 14:22:52.273009 | Started

2 | 2022-10-29 14:26:10.55628 | First Insert

3 | 2022-10-29 14:31:13.220708 | Second Insert

(3 rows)

miao=> select pg_switch_xlog();

select * from pg_current_xlog_location();

pg_switch_xlog

4/EE0230C0

(1 row)

miao=>

miao=> select * from pg_current_xlog_location();

pg_current_xlog_location

4/EF000148

(1 row)

5、模拟故障删除目录

[omm@db1 gs_pitr]$ cp /archivelog/* /home/omm/gs_pitr/archivelog/

[omm@db1 gs_pitr]$ gs_om -t stop

Stopping cluster.

Successfully stopped cluster.

End stop cluster.

[omm@db1 gs_pitr]$ rm -fr /mogdb/data/db1/

6、第一阶段恢复(按照还原点进行恢复)

[omm@db1 data]$ mkdir /mogdb/data/db1/

[omm@db1 db1]$ cp -fr /home/omm/gs_pitr/* /mogdb/data/db1/

[omm@db1 db1]$ vi recovery.conf

restore_command = 'cp /mogdb/data/db1/archivelog/%f %p'

recovery_target_name = 'restore_point_1' ## 恢复到指定的还原点restore_point_1,此时后面2条数据

recovery_target_inclusive = true

[omm@db1 db1]$ gs_om -t start

Starting cluster.

[SUCCESS] db1

2022-10-29 15:22:47.061 635cd4c6.1 [unknown] 140295007823424 [unknown] 0 dn_6001 01000 0 [BACKEND] WARNING: could not create any HA TCP/IP sockets

2022-10-29 15:22:47.064 635cd4c6.1 [unknown] 140295007823424 [unknown] 0 dn_6001 01000 0 [BACKEND] WARNING: Failed to initialize the memory protect for g_instance.attr.attr_storage.cstore_buffers (1024 Mbytes) or shared memory (1967 Mbytes) is larger.

Successfully started.

[omm@db1 db1]$ gsql -d miao -p 26000 -U dbmt -r

Password for user dbmt:

gsql ((MogDB 2.1.1 build b5f25b20) compiled at 2022-03-21 14:42:30 commit 0 last mr )

Non-SSL connection (SSL connection is recommended when requiring high-security)

Type "help" for help.

miao=> \d

List of relations

Schema | Name | Type | Owner | Storage

--------+--------------------------------+-------+-------+------------------------------------------------------

dbmt | b1921101_bak | table | dbmt | {orientation=row,compression=no,storage_type=ustore}

dbmt | cc_chx | table | dbmt | {orientation=row,compression=no,storage_type=ustore}

dbmt | cd_material | table | dbmt | {orientation=row,compression=no,storage_type=ustore}

dbmt | customer_me_degree_wbinfo | table | dbmt | {orientation=row,compression=no,storage_type=ustore}

dbmt | customer_me_degree_wbinfo_test | table | dbmt | {orientation=row,compression=no,storage_type=ustore}

dbmt | erp_i_contract_class | table | dbmt | {orientation=row,compression=no,storage_type=ustore}

dbmt | scm_warning_reauidt_detail | table | dbmt | {orientation=row,compression=no,storage_type=ustore}

dbmt | sm_filemanagerconfig | table | dbmt | {orientation=row,compression=no,storage_type=ustore}

dbmt | t_o | table | dbmt | {orientation=row,compression=no,storage_type=ustore}

dbmt | t_o_t | table | dbmt | {orientation=row,compression=no,storage_type=ustore}

dbmt | t_p_t | table | dbmt | {orientation=row,compression=no,storage_type=USTORE}

dbmt | temp1 | table | dbmt | {orientation=row,compression=no,storage_type=ustore}

dbmt | tiji_update | table | dbmt | {orientation=row,compression=no,storage_type=ustore}

dbmt | tmp_mis_code_zq | table | dbmt | {orientation=row,compression=no,storage_type=ustore}

dbmt | tmp_mul_stock_detail_20200614 | table | dbmt | {orientation=row,compression=no,storage_type=ustore}

dbmt | tmp_output_bill_20190821 | table | dbmt | {orientation=row,compression=no,storage_type=ustore}

dbmt | tmp_project_party | table | dbmt | {orientation=row,compression=no,storage_type=ustore}

dbmt | tmp_unit_vol | table | dbmt | {orientation=row,compression=no,storage_type=ustore}

dbmt | tmp_user_rep | table | dbmt | {orientation=row,compression=no,storage_type=ustore}

dbmt | ur_s_role | table | dbmt | {orientation=row,compression=no,storage_type=ustore}

dbmt | w_work_cooperate_gjback0721 | table | dbmt | {orientation=row,compression=no,storage_type=ustore}

dbmt | yang_tempate3 | table | dbmt | {orientation=row,compression=no,storage_type=ustore}

public | t1 | table | omm | {orientation=row,compression=no,storage_type=USTORE}

(105 rows)

miao=> select * from t1;

id | tm | lsn

----+----------------------------+---------

1 | 2022-10-29 14:22:52.273009 | Started

(1 row)

miao=>

7、 第二阶段恢复(按照时间进行还原)

[omm@db1 db1]$ vi recovery.conf

restore_command = 'cp /mogdb/data/db1/archivelog/%f %p'

recovery_target_time = '2022-10-29 14:26:44'

recovery_target_inclusive = true

~

"recovery.conf" [New] 3L, 137C written

[omm@db1 db1]$ gs_om -t start

Starting cluster.

[SUCCESS] db1

2022-10-29 15:22:47.061 635cd4c6.1 [unknown] 140295007823424 [unknown] 0 dn_6001 01000 0 [BACKEND] WARNING: could not create any HA TCP/IP sockets

2022-10-29 15:22:47.064 635cd4c6.1 [unknown] 140295007823424 [unknown] 0 dn_6001 01000 0 [BACKEND] WARNING: Failed to initialize the memory protect for g_instance.attr.attr_storage.cstore_buffers (1024 Mbytes) or shared memory (1967 Mbytes) is larger.

Successfully started.

[omm@db1 db1]$ gsql -d miao -U dbmt -p 26999 -r

failed to connect /opt/mogdb/tools/omm_mppdb:26999.

[omm@db1 db1]$ gsql -d miao -U dbmt -p 26000 -r

Password for user dbmt:

gsql ((MogDB 2.1.1 build b5f25b20) compiled at 2022-03-21 14:42:30 commit 0 last mr )

Non-SSL connection (SSL connection is recommended when requiring high-security)

Type "help" for help.

miao=> select * from t1;

id | tm | lsn

----+----------------------------+--------------

1 | 2022-10-29 14:22:52.273009 | Started

2 | 2022-10-29 14:26:10.55628 | First Insert

(2 rows)

8、 第三阶段恢复(按照 lsn 进行恢复)

restore_command = 'cp /mogdb/data/db1/archivelog/%f %p'

recovery_target_lsn = '4/EE0230C0'

recovery_target_inclusive = true

[omm@db1 archivelog]$ gs_om -t stop

Stopping cluster.

[omm@db1 db1]$ gs_om -t start

Starting cluster.

[SUCCESS] db1

2022-10-29 16:08:54.842 635cdf96.1 [unknown] 140627704972864 [unknown] 0 dn_6001 01000 0 [BACKEND] WARNING: could not create any HA TCP/IP sockets

2022-10-29 16:08:54.887 635cdf96.1 [unknown] 140627704972864 [unknown] 0 dn_6001 01000 0 [BACKEND] WARNING: Failed to initialize the memory protect for g_instance.attr.attr_storage.cstore_buffers (1024 Mbytes) or shared memory (1967 Mbytes) is larger.

Successfully started.

[omm@db1 db1]$ gsql -d miao -U dbmt -p 26000

Password for user dbmt:

gsql ((MogDB 2.1.1 build b5f25b20) compiled at 2022-03-21 14:42:30 commit 0 last mr )

Non-SSL connection (SSL connection is recommended when requiring high-security)

Type "help" for help.

miao=> select 8 from t1;

?column?

    8
8
8

(3 rows)

miao=> select * from t1;

id | tm | lsn

----+----------------------------+---------------

1 | 2022-10-29 14:22:52.273009 | Started

2 | 2022-10-29 14:26:10.55628 | First Insert

3 | 2022-10-29 14:31:13.220708 | Second Insert

(3 rows)

miao=>

9、 手动结束 PITR 状态

miao=> select pg_is_in_recovery();

pg_is_in_recovery

t

(1 row)

miao=> select pg_xlog_replay_resume();

pg_xlog_replay_resume

(1 row)

[omm@db1 db1]$ gsql -d miao -U dbmt -p 26000 -r

Password for user dbmt:

gsql ((MogDB 2.1.1 build b5f25b20) compiled at 2022-03-21 14:42:30 commit 0 last mr )

Non-SSL connection (SSL connection is recommended when requiring high-security)

Type "help" for help.

miao=> select pg_is_in_recovery();

pg_is_in_recovery

f

(1 row)

miao=>

openGauss/MogDB 学习笔记之 -- PITR恢复的更多相关文章

  1. MogDB 学习笔记之 -- PITR恢复

    # 概念描述## 背景信息当数据库崩溃或希望回退到数据库之前的某一状态时,MogDB的即时恢复功能(Point-In-Time Recovery,简称PITR)可以支持恢复到备份归档数据之后的任意时间 ...

  2. MogDB 学习笔记之 --exchange partition

    # 概念描述MogDB 提供了从分区交换的功能,如单表转化到一个分区中基本语法:ALTER TABLE...EXCHANGE PARTITION数据库版本# 测试验证## 1.环境准备``` miao ...

  3. RMAN_学习笔记3_RMAN Catalog恢复目录

    2014-12-23 Created By BaoXinjian

  4. git 学习笔记 —— 切换和恢复提交版本( git reset/reflog/tag 命令)

    记录一下关于 git 不同提交版本间切换的操作以及如何恢复至切换之前的版本. 切换到之前提交的版本 —— git reset --hard 笔者在使用 git 时,首先接触到了一个"黑魔法& ...

  5. Centos7安装gitlab11 学习笔记之备份恢复及邮箱配置

    一.备份 修改配置文件 vim /etc/gitlab/gitlab.rb 默认路径为 # gitlab_rails['backup_path'] = "/var/opt/gitlab/ba ...

  6. MogDB 学习笔记之 -- 索引失效

    [[toc]]# 概念描述哪些操作会导致分区表的全局索引失效(比如 move partition,drop partition ,truncate partition ,split partition ...

  7. MogDB 学习笔记之 -- truncate 属于dml语句

    # 概念描述验证create 语句.alter 语句.truncate语句.drop语句 是属于ddl 还是dml # 测试验证 1.环境准备 ```修改log_statement 参数miao=# ...

  8. Dynamic CRM 2013学习笔记(六)备份和恢复

      这节我们将讨论下怎么维护CRM,包括以下主要内容: 备份CRM DB 备份CRM 系统 恢复CRM DB 恢复 CRM 系统   一. 备份CRM DB 下面的步骤将为CRM DB创建一个维护计划 ...

  9. MongoDB学习笔记(三)--权限 && 导出导入备份恢复 && fsync和锁

    权限                                                                                             绑定内网I ...

  10. ucos实时操作系统学习笔记——操作系统在STM32的移植

    使用ucos实时操作系统是在上学的时候,导师科研项目中.那时候就是网上找到操作系统移植教程以及应用教程依葫芦画瓢,功能实现也就罢了,没有很深入的去研究过这个东西.后来工作了,闲来无聊就研究了一下这个只 ...

随机推荐

  1. 【Azure Developer】Windows中通过pslist命令查看到Java进程和线程信息,但为什么和代码中打印出来的进程号不一致呢?

    通过PSLIST查看Windwos中的进程信息及线程信息 一:下载PSLIST小工具:https://docs.microsoft.com/en-us/sysinternals/downloads/p ...

  2. 【Azure Spring Cloud】Azure Spring Cloud connect to SQL using MSI

    问题描述 在Azure Spring Cloud中,通过ActiveDirectoryMSI方式来连接到SQL Service,需要如何配置呢? 问题分析 在SQL Service中启用Active ...

  3. 如何设计一个高性能的图 Schema

    本文整理自青藤云安全工程师--文洲在青藤云技术团队内部分享,分享视频参考:https://www.bilibili.com/video/BV1r64y1R72i 图数据库的性能和 schema 的设计 ...

  4. UI自动化测试中图片验证码的处理?

    首先定位验证码image的元素,然后通过element.screenshot('a.png')截图保存到本地,通过第三方接口识别本地图片验证码

  5. acme.sh 免费泛解析证书生成

    环境准备 本篇文章使用的 ACME 客户端是基于 Docker 容器使用的,所以需要准备 Docker 运行环境.本文使用的是 CentOS 7.x 与 Docker CE - 19.03.13,且已 ...

  6. Ubuntu 离线安装软件包

    Ubuntu 离线安装软件包 关键词:apt-offline,Ubuntu,dpkg,.deb 本文使用的ubuntu20.04,当机器无法连接外网时,我们使用离线的方式安装软件包. 离线安装的软件包 ...

  7. 浅谈IT系统性能优化

    一个刚上线的IT系统,往往负载压力不大,所以不会存在什么性能问题.这时,人们大多只关心系统的功能性和用户体验.但是,随着时间推移,用户量和数据量都比刚上线的时候要多很多,高并发和大数据场景下,系统遇到 ...

  8. 封装TornadoFx常用控件库

    github:https://github.com/Stars-One/common-controls 为TornadoFx的封装的常用控件与工具,基于Jfoenix,借鉴Kfoenix 前言 这个开 ...

  9. day34-IO流01

    IO流01 1.文件基础知识 什么是文件? 文件,我们并不陌生.文件是保存数据的地方.比如大家经常使用的word文档,txt文件,excel文件等,都是文件.它既可以保存一张图片,也可以保存声音.视频 ...

  10. PAT 甲级考试【1003 Emergency】

    题目: As an emergency rescue team leader of a city, you are given a special map of your country. The m ...