KingbaseES V8R6备份恢复案例之---sys_waldump解析wal日志PITR恢复

news2024/11/25 18:27:42

案例说明:
复现用户删除表(drop table)误操作,通过wal日志解析找到误操作时间点,执行基于时间点的恢复(PITR)。适用版本: KingbaseES V8R6

一、模拟业务现场操作

1、查看当前对象信息

prod=# \d
               List of relations
 Schema |        Name         | Type  | Owner
--------+---------------------+-------+--------
 public | dual                | view  | system
 public | sys_stat_statements | view  | system
 public | t_centerprises      | table | system
 public | t1                  | table | system
 public | TB1                 | table | system
 public | tb2                 | table | system
 public | tbl_test            | table | system
(7 rows)

2、执行事务操作

prod=# select count(*) from t1;
 count
-------
 10000
(1 row)

prod=# insert into t1 values(generate_series(1001,2000),'usr'||generate_series(1001,2000));
INSERT 0 1000
prod=# select count(*) from t1;
 count
-------
 11000
(1 row)

# 当前wal对应lsn
prod=# select sys_current_wal_lsn();
 sys_current_wal_lsn
---------------------
 0/3D000058
(1 row)

prod=# insert into t1 values(generate_series(11001,20000),'usr'||generate_series(11001,20000));
INSERT 0 9000

prod=# select count(*) from t1;
 count
-------
 20000
(1 row)

# 查看数据库当前wal日志文件
prod=# select pg_current_wal_lsn(),pg_walfile_name(pg_current_wal_lsn()),pg_walfile_name_offset(pg_current_wal_lsn());
 pg_current_wal_lsn |     pg_walfile_name      |      pg_walfile_name_offset
--------------------+--------------------------+-----------------------------------
 0/3D0A5090         | 00000001000000000000003D | (00000001000000000000003D,675984)
(1 row)

# 用户误删除表
prod=# drop table t1;
DROP TABLE

二、查看当前数据库的物理备份

如下图所示:以下是用户误操作时间点之前的物理备份。

三、sys_waldump解析wal日志(查看误操作准确时间点)Tips:
对于用户的误操作,要执行PITR的恢复,需要找到误操作的准确时间点,在生产环境中,可以根据误操作大概的时间点,对时间点前后的归档及在线日志进行解析,本案例为了简化操作,只解析了一个wal日志。[kingbase@node102 sys_wal]$ /opt/Kingbase/ES/V8R6_C6/Server/bin/sys_waldump 00000001000000000000003D -s '0/3D000058'

1、Insert操作日志解析

prod=#  select oid,relname from sys_class where oid=16500;
  oid  | relname
-------+---------
 16500 | t1
(1 row)

2、更新pg_statistic系统表日志

prod=#  select oid,relname from sys_class where oid=2696 or oid=2619;
 oid  |             relname
------+----------------------------------
 2619 | pg_statistic
 2696 | pg_statistic_relid_att_inh_index
(2 rows)

3、drop table日志解析

# drop table 将清理系统表中对象的信息
prod=#  select oid,relname from sys_class where oid=2608;
 oid  |  relname
------+-----------
 2608 | pg_depend
(1 row)

=如上图所示,从wal日志中可以解析到‘drop table’事务commit的时间点,“COMMIT 2022-09-27 11:09:45.005736 CST”,可以以此时间点作为PITR恢复的时间点,来恢复用户误删除的表。=

四、执行基于时间点(PITR)恢复

Tips:
对于生产环境可以异地恢复,在另外的实例执行PITR的恢复,将恢复出的数据,再导入到生产实例中。本案例是从本实例恢复,需要将数据库服务关闭。

1、关闭数据库服务并备份数据库文件

[kingbase@node102 bin]$ ./sys_ctl stop -D /data/kingbase/v8r6_c6/data
[kingbase@node102 v8r6_c6]$ mv data data.bk

2、执行PIRT恢复

[kingbase@node102 bin]$ /opt/Kingbase/ES/V8R6_C6/Server/bin/sys_rman --config=/home/kingbase/kbbr7_repo/sys_rman.conf --stanza=king  --type=time --target='2022-09-27 11:09:45'  restore

.......
2022-09-27 13:34:05.234 P00   INFO: Restore Process: FILE: 2605 / 2605 100%       SZIE: 105160230 bytes / 105160230 bytes 100.3MB / 100.3MB 100%
2022-09-27 13:34:05.239 P00   INFO: write updated /data/kingbase/v8r6_c6/data/kingbase.auto.conf
2022-09-27 13:34:05.244 P00   INFO: restore global/sys_control (performed last to ensure aborted restores cannot be started)
2022-09-27 13:34:05.245 P00   INFO: restore size = 100.3MB, file total = 2605
2022-09-27 13:34:05.246 P00   INFO: restore command end: completed successfully (2308ms)

3、查看恢复后的数据1)查看kingbase.auto.conf配置

[kingbase@node102 data]$ cat kingbase.auto.conf
# Do not edit this file manually!
# It will be overwritten by the ALTER SYSTEM command.

# Recovery settings generated by sys_rman restore on 2022-09-27 13:39:58
restore_command = '/opt/Kingbase/ES/V8R6_C6/KESRealPro/V008R006C006B0013/Server/bin/sys_rman --config=/home/kingbase/kbbr7_repo/sys_rman.conf --stanza=king archive-get %f "%p"'
recovery_target_time = '2022-09-27 11:09:45'

2)启动数据库服务[kingbase@node102 bin]$ ./sys_ctl start -D /data/kingbase/v8r6_c6/data

3)查看sys_log日志

4)查看恢复后的数据

5)清理kingbase.auto.conf文件后重启数据库

[kingbase@node102 bin]$ ./sys_ctl restart -D /data/kingbase/v8r6_c6/data

四、总结
对于归档模式的数据库在数据库备份及wal日志(归档和在线)保存完整的情况下,可以通过基于时间点的恢复操作,恢复用户的误操作丢失的数据。对于用户误操作的时间点,可以借助wal日志的解析获取到准确的事务操作的时间点。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/84104.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

R语言逻辑回归预测分析付费用户

对于某企业新用户,会利用大数据来分析该用户的信息来确定是否为付费用户,弄清楚用户属性,从而针对性的进行营销,提高运营人员的办事效率。 相关视频:R语言逻辑回归(Logistic回归)模型分类预测病…

javaScript内存管理及监控

1.1 内存定义 内存由可读写单元组成,表示一片可操作空间,开发者主动申请空间、使用空间、释放空间。内存主要存储变量等数据,局部变量当程序执行结束,且没有引用的时候就会随着消失,全局对象会始终存活到程序运行结束。…

【简单项目实战】用C++实现学生成绩管理系统

目录 ●功能介绍 ●案例 ●代码展示 ●结果展示 ●功能介绍 用 C设计一个程序,能提供下列功能: 1. 录入学生成绩信息。按照学号,姓名,语文,数学,英语的格式录入学生的成绩。 2.展示目前录入学生的成绩信息。以…

MeterSphere使用mock基础

目录 一、添加mock数据 1、进入页面添加 2、 添加单个mock 3、添加多个mock数据 二、运行mock 1、选择设置接口的TEST 2、选择mock环境 3、设置定义的mock参数运行 一、添加mock数据 1、进入页面添加 在接口定义页面,按下图1-2-3顺序添加 2、 添加单个mock…

[附源码]Nodejs计算机毕业设计基于JAVA人事管理系统Express(程序+LW)

该项目含有源码、文档、程序、数据库、配套开发软件、软件安装教程。欢迎交流 项目运行 环境配置: Node.js Vscode Mysql5.7 HBuilderXNavicat11VueExpress。 项目技术: Express框架 Node.js Vue 等等组成,B/S模式 Vscode管理前后端分…

如何利用TL431设计一个可调电压源

TL431是一个三脚电压可控的稳压器件,常用的封装有TO-92,SOT-23,SOT-89,电路符号是这个, TL431常被用在参考电压/基准电压电路,用来替代稳压管 其中1脚是reference,2脚是Anode,3脚是Cathode TL4…

基于微信小程序的校园二手交易-计算机毕业设计

项目介绍 随着我国经济迅速发展,人们对手机的需求越来越大,各种手机软件也都在被广泛应用,但是对于手机进行数据信息管理,对于手机的各种软件也是备受用户的喜爱,校园二手交易被用户普遍使用,为方便用户能…

最新版网络组件包:Rebex Total Pack for .NET

Rebex Total Pack for .NET 组件包: Rebex 的所有 .NET 组件都在一个包中:SFTP、FTP、HTTPS、IMAP、POP3、SMTP、EWS、SNTP/Time/Daytime、Mail、MSG、TLS、SSH Shell、Telnet、终端仿真、安全、Syslog、WebSocket、 ZIP 压缩,SFTP/SSH 服务…

Java之final相关内容详解【面试题】

1、final关键字除了修饰类之外,还有哪些用法呢? (1)final修饰的变量,一旦赋值,不可重新赋值; (2) 如果引用为引用数据类型,比如对象、数组,则该对…

生成模型(二):VAE

自动编码器的发明是为了重建高维数据(这可能不是变异自动编码器的真实情况)。一个很好的副产品是降维:瓶颈层捕获了一个压缩的潜在编码。这样的低维表示可以作为各种应用中的嵌入向量(如搜索),帮助数据压缩…

计算机研究生就业方向之大厂销售(营销)

我一直跟学生们说你考计算机的研究生之前一定要想好你想干什么,如果你只是转码,那么你不一定要考研,至少以下几个职位研究生是没有啥优势的: 1,软件测试工程师(培训一下就行) 2,前…

世界杯---人生就是一届又一届世界杯

注意:下面有视频看到文章会有声音,如果打扰到您非常抱歉,视频在文章最下面,还望观众老爷们不要在意,蟹蟹理解~ 🚀write in front🚀 📝个人主页:认真写博客的夏目浅石. &a…

OTP语音芯片是用什么软件来编程,以及如何烧录的?

目录 OTP语音芯片的开发环境: 也就是一般的客户想自己开发,基本不可能了,因为前期的培训成本、工具成本都是比较高的 OTP语音芯片的烧录方法: 第1步,是开发编译好程序之后,生成了对应的bin文件&#xf…

15、Redis集群

文章目录15、Redis集群15.1 问题15.2 什么是集群15.3 删除持久化数据15.4 制作6个实例15.4.1 配置基本信息15.4.2. redis cluster配置修改15.4.3. 修改好redis6379.conf文件,拷贝多个redis.conf文件15.4.4 使用查找替换修改另外5个文件15.4.5 启动6个redis服务15.5 …

MySQL innodb引擎架构分析- Double Write Buffer

文章目录系列文章目录前言一、Double Write Buffer是什么?二、Double Write Buffer步骤步骤对性能的影响总结系列文章目录 1. MySQL innodb引擎架构分析-Buffer Pool 2. MySQL innodb引擎架构分析-Redo log 3. MySQL innodb引擎架构分析- Double Write Buffer 前言…

java基于ssm+vue+elementUI实验报告管理系统

BS的实验报告管理系统是针对目前大学推广与交流的实际需求,从实际工作出发,对过去的实验报告管理系统存在的问题进行分析,完善用户的使用体会。采用计算机系统来管理信息,取代人工管理模式,查询便利,信息准…

鸡血篇:网络工程师为什么要学Python,如何学Python

两个多月之前写了一篇“送给打算考IE,正在学网络,纠结要不要转行学网络的你们”的文章,意外地收到了不少小伙伴的私信,大多咨询如何学习网络工程,以及什么方向的IE更有前景之类的问题。其实IE的话题我不想再多说&#…

Redis缓存一致性问题

目录 1、背景 2、缓存读写模式 2.1、Cache-Aside Pattern(旁路缓存模式) 2.2、Read-Through/Write-Through(读写穿透模式) 2.3、Write Behind Pattern(异步缓存写入) 3、数据不一致的几种场景 3.1、先删缓存,再更新数据库 3.2、先更新…

豆瓣评分9.1!据说入门Python的人都读过

前言 你是否正在寻找一本适合初学者入门Python的书籍呢? 如果是,那你来对地方了,以我个人经验,开始学习一门新的编程语言是相当困难和耗时的,这也是我今天要和大家分享这本书的原因,不卖关子了&#xff0…

算法竞赛入门【码蹄集进阶塔335题】(MT2051-2075)

算法竞赛入门【码蹄集进阶塔335题】(MT2051-2075) 文章目录算法竞赛入门【码蹄集进阶塔335题】(MT2051-2075)前言为什么突然想学算法了?为什么选择码蹄集作为刷题软件?目录1. MT2051 矩阵01变2. MT2052 矩形3. MT2053 切蛋糕4. MT…