pg备份恢复插件 | 您所在的位置:网站首页 › 虎课解析插件 › pg备份恢复插件 |
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 实验室设备网 版权所有 |