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. Codeforces Round 770 (Div. 2)(数学异或奇偶性)

    B. Fortune Telling 拿到题目看数据范围之后就知道暴力显然是来不及的. 那么只能找性质. \(考虑x和x+3的不同 \quad 奇偶性不同\) \(然后考虑两种操作对于一个数的奇偶性的 ...

  2. Java多线程转账

    Java多线程转账 关键词:多线程,Java 以前的一道面试题,要求是使用Java多线程,实现一个转账业务.不考虑数据库,不考虑其他第三方系统.只考虑当前Java程序内各个账户进行转账,保证转账金额正 ...

  3. Android MaterialButtonToggleGroup使用

    原文地址: Android MaterialButtonToggleGroup使用 - Stars-One的杂货小窝 觉得单选框不好看,发现了一个Material里的单选按钮组,感觉UI还不错,记下使 ...

  4. 教你一招,解决Github图片不显示问题(2021.1.20测试可用)

    本文提供的是windows系统解决方法,linux系统和mac系统可以参考原理,修改DNS的ip地址为阿里云或者是修改hosts文件 问题 可能有些朋友和我遇到同样的问题,逛Github的时候会发现, ...

  5. Java线上诊断神器Arthas:常用命令详解!

    有关Arthas基本介绍.安装部署.arthas idea插件在上篇文章已经介绍过,这里就不在重述. 文章地址:Java诊断工具Arthas:开篇之watch实战 上篇重点讲了 watch 命令.这篇 ...

  6. FFmpeg命令行之ffmpeg调整音视频播放速度

    FFmpeg对音频.视频播放速度的调整的原理不一样.下面简单的说一下各自的原理及实现方式: 一.调整视频速率 视频的倍速主要是通过控制filter中的setpts来实现,setpts是视频滤波器通过改 ...

  7. getClass()方法----getName()方法

    public class Test { public static void main(String[] args) { Person p = new Person(1,"刘德华" ...

  8. 记录--7 个沙雕又带有陷阱的 JS 面试题

    这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 为了保证的可读性,本文采用意译而非直译. 在 JS 面试中,经常会看到一些简单而又沙雕的题目,这些题目包含一些陷阱,但这些在我们规范的编码 ...

  9. 原生js实现table的增加删除

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  10. C# OpenCvSharp MatchTemplate 多目标匹配

    效果 项目 代码 using System; using System.Collections.Generic; using System.ComponentModel; using System.D ...