pg备份恢复插件 您所在的位置:网站首页 虎课解析插件 pg备份恢复插件

pg备份恢复插件

2023-07-09 11:48| 来源: 网络整理| 查看: 265

walminer3.0使用方法简介

参考链接:https://www.cnblogs.com/zhangfx01/p/15587592.html#%E4%B8%BB%E8%A6%81%E5%8A%9F%E8%83%BD

1. Walminer工具简介

WalMiner是从PostgreSQL的WAL(write ahead logs)日志的解析工具,旨在挖掘wal日志所有的有用信息,从而提供PG的数据恢复支持,需要将数据库日志级别配置需要大于minimal。walminer3.0版本可以解析所有的DML语句与部分重要的DDL语句,从而可以提供数据恢复支持。

Walminer是从Xlogminer基础上进行开发的,Xlogminer需要wal_level为logical而且需要将用户表设定IDENTIFY FILL级别,这限制了工具的使用场景。Walminer第一个版本可以允许在非logical级别下进行wal解析,Walminer2.0实现了精确解析和替身解析,walminer3.0实现了DDL解析和数据也挽回功能。walminer3.0的开源地址。

2. Walminer3.0功能介绍 从waL日志中解析出SQL,包括DML和少量DDL

解析出执行的SQL语句的工具,并能生成对应的undo SQL语句。与传统的logical decode插件相比,walminer不要求logical日志级别且解析方式较为灵活。

数据页挽回

当数据库被执行了TRUNCATE等不被wal记录的数据清除操作,或者发生磁盘页损坏,可以使用此功能从wal日志中搜索数据,以期尽量挽回数据。

支持delete,drop table,truncate,vacuum full等操作后数据恢复

3.版本支持

walminer3.0支持PostgreSQL 10及其以上版本。(此版本放弃对9.x的支持)

4. Walminer3.0下载安装

#安装包下载地址 https://gitee.com/movead/XLogMiner/tree/master/ #编译安装 cd /home/postgres/ chown postgres:postgres /home/postgres/XLogMiner-walminer_3.0_stable.zip unzip XLogMiner-walminer_3.0_stable.zip su - root cd /home/postgres/XLogMiner-walminer_3.0_stable/walminer USE_PGXS=1 MAJORVERSION=14 make USE_PGXS=1 MAJORVERSION=14 make install cat >> /etc/profile 24614 新oid ->旧oid (1 row)

postgres=# select wal2sql(); NOTICE: Add wal from current pg_wal directory, do not suggest use this way in produce NOTICE: Switch wal to 000000010000000000000007 on time 2023-07-06 09:03:04.003758+08 NOTICE: Con not find relfilenode 24617 in dictionary, ignored related records NOTICE: Con not find relfilenode 24623 in dictionary, ignored related records NOTICE: Con not find relfilenode 24626 in dictionary, ignored related records

​ wal2sql

pg_minerwal success (1 row)

postgres=# select * from walminer_contents where schema=‘public’; sqlno | xid | topxid | sqlkind | minerd | timestamp | op_text | undo_text | c omplete | schema | relation | start_lsn | commit_lsn -------±----------±-------±--------±-------±------------------------------±----------------------------------------------------±---------------------------------------------------±- --------±-------±---------±-----------±----------- 1 | 140311525 | 0 | 1 | t | 2021-10-08 15:33:28.6956+08 | INSERT INTO public.test1(id ,info) VALUES(1 ,‘234’) | DELETE FROM public.test1 WHERE id=1 AND info=‘234’ | t | public | test1 | 7/43CCC9E8 | 7/43CCF430 1 | 140477839 | 0 | 1 | t | 2021-10-09 15:04:44.485147+08 | INSERT INTO public.test_a(id) VALUES(4) | DELETE FROM public.test_a WHERE id=4 | t | public | test_a | 7/455C7CE0 | 7/455C7F28 2 | 140477839 | 0 | 1 | t | 2021-10-09 15:04:44.485147+08 | INSERT INTO public.test_a(id) VALUES(5) | DELETE FROM public.test_a WHERE id=5 | t | public | test_a | 7/455C7DF8 | 7/455C7F28 3 | 140477839 | 0 | 1 | t | 2021-10-09 15:04:44.485147+08 | INSERT INTO public.test_a(id) VALUES(6) | DELETE FROM public.test_a WHERE id=6 | t | public | test_a | 7/455C7E78 | 7/455C7F28 1 | 140477844 | 0 | 3 | t | 2021-10-09 15:05:12.29125+08 | DELETE FROM public.test_a WHERE id=4 | INSERT INTO public.test_a(id) VALUES(4) | t | public | test_a | 7/455D0978 | 7/455D0A68 2 | 140477844 | 0 | 3 | t | 2021-10-09 15:05:12.29125+08 | DELETE FROM public.test_a WHERE id=5 | INSERT INTO public.test_a(id) VALUES(5) | t | public | test_a | 7/455D09B8 | 7/455D0A68 3 | 140477844 | 0 | 3 | t | 2021-10-09 15:05:12.29125+08 | DELETE FROM public.test_a WHERE id=6 | INSERT INTO public.test_a(id) VALUES(6) | t | public | test_a | 7/455D09F8 | 7/455D0A68 (7 rows)

–停止walminer select walminer_stop(); 能获取到delete 并且执行过vacuum full的数据 前面都是在源库执行的,也可以将wal日志和数据字典放到任意一个跟生产库配置相同的测试库解析

从非wal产生的数据库中执行wal日志解析

这种适用于不动生产环境,但是将wal日志在测试环境还原 生产库生成数据字典 –1、创建walminer扩展 create extension walminer; –2、生成数据字典 select walminer_build_dictionary(‘/home/postgres/store_dictionary’); – 注:参数可以为目录或者文件 会生成一个:store_dictionary的文件 测试数据库中加载数据字典

–1、创建walminer扩展 create extension walminer; –2、load数据字典 select walminer_load_dictionary(‘/home/postgres/store_dictionary’); –3、add wal日志文件 select walminer_wal_add(‘/data/pgdb/data5785/pg_wal’); –4、移除wal文件: select walminer_wal_remove(‘/data/pgdb/data5785/pg_wal’); –5、list wal日志文件 – 列出wal文件:注:参数可以为目录或者文件 select walminer_wal_list(); –6、 执行解析 select wal2sql(); –7、解析结果查看 select * from walminer_contents; –8、结束walminer操作,该函数作用为释放内存,结束日志分析,该函数没有参数。 select walminer_stop(); 注意:walminer_contents是walminer自动生成的unlogged表(之前是临时表,由于临时表在清理上有问题,引起工具使用不便,所以改为unlogged表),在一次解析开始会首先创建或truncate walminer_contents表。

注意事项 本版本解析DML语句。DDL语句解析功能正在不断开发。 只能解析与数据字典时间线一致的wal文件

当前walminer无法处理数据字典不一致问题,walminer始终以给定的数据字典为准,

对于无法处理的relfilenode,那么会丢弃这一条wal记录(会有一个notice在解析结果中没有体现)

complete属性只有在wallevel大于minimal时有效

xid解析模式不支持子事务

同时只能有一个walminer解析进程,否则会出现解析混乱



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有