我的编程空间,编程开发者的网络收藏夹
学习永远不晚

pg数据库日志挖掘WalMiner

短信预约 信息系统项目管理师 报名、考试、查分时间动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

pg数据库日志挖掘WalMiner

pg数据库日志挖掘WalMiner

WalMiner是从PostgreSQL的WAL(write ahead logs)日志中解析出执行的SQL语句的工具,并能生 成出对应的undo SQL语句。

referenceXlogMiner renamed to WalMiner XlogMiner Enhancements Released and Renamed to WalMinerPosted on 2019-02-22 by Highgo Software

reference XLogMiner reference WalMiner

注意:walminer是Highgo开源的一款软件。HGDB所有版本均支持walminer。

walminer安装

reference WalMiner

1 配置要求

需要将数据库日志级别配置需要大于minimal

创建归档路径

mkdir /home/hgdb565/archive/ -p

必须设置如下三个参数,据库日志级别配置需要大于minimal wal_level minimal, archive, hot_standby, or logical ,若想做最完整的日志挖掘,建议设 置为logical。

alter system set wal_level = "logical";
alter system set archive_mode = on;
alter system set archive_directory = "/home/hgdb565/archive";

修改后重启数据库生效。

2 版本查看

查看本机环境数据库版本

select kernel_version();
or
select version();

PG版本支持 PG9.5.0之前的版本没有做过测试 PG9.5.0~PG10.X版本使用WalMiner_10_X PG11之后的版本使用WalMiner_11_X

3 编译安装

download and reaad README.md.or read online README.md

unzip movead-XLogMiner-WalMiner_10_0_1.zip
cp -rpi ./XLogMiner/walminer/ ./postgresql-10.6/contrib/
cd ./postgresql-10.6/contrib/walminer
make && make install


 make install
/bin/mkdir -p "/opt/pg106/lib/postgresql"
/bin/mkdir -p "/opt/pg106/share/postgresql/extension"
/bin/mkdir -p "/opt/pg106/share/postgresql/extension"
/bin/install -c -m 755  walminer.so "/opt/pg106/lib/postgresql/walminer.so"
/bin/install -c -m 644 ./walminer.control "/opt/pg106/share/postgresql/extension/"
/bin/install -c -m 644 ./walminer--1.0.sql  "/opt/pg106/share/postgresql/extension/"

note 将walminer目录放置到编译通过的PG源码的"../contrib/"目录下

hgdb无源码编译目录。可在对应版本的pg中编译好,再将文件拷贝到hgdb的目录下。


cd /opt/pg106/share/postgresql/extension/
scp wal* hgdb565@192.168.6.10:/opt/HighGo5.6.5/share/postgresql/extension
cd /opt/pg106/lib/postgresql
scp walminer.so hgdb565@192.168.6.10:/opt/HighGo5.6.5/lib/postgresql/

4 创建扩展

创建walminer的extension

create extension walminer;

注意HGDBV5之前为: create extension xlogminer;

===========

场景一:从WAL日志产生的数据库中直接执行解析

1. 创建walminer的extension

create extension walminer;

2. Add wal日志文件

-- 增加wal文件:
select walminer_wal_add("/opt/HighGo5.6.5/data/pg_wal");
-- 注:参数可以为目录或者文件

3. Remove wal日志文件

-- 移除wal文件:
select walminer_wal_remove("/opt/HighGo5.6.5/data/pg_wal");
-- 注:参数可以为目录或者文件

4. List wal日志文件

-- 列出wal文件:
select walminer_wal_list();

5. 执行解析

select walminer_start(’START_TIMSTAMP’,’STOP_TIMESTAMP’,’START_XID’,’STOP_XID’)
---如果分析全部日志:
select walminer_start("null","null",0,0);
---将系统表修改结果输出到$PGDATA/walminer/temp下:
select walminer_start("null","null",0,0,true);
  • START_TIMESTAMP:指定输出结果中最早的记录条目,即从该时间开始输出分析数据;若该参数值为空,则以分析日志列表中最早数据开始输出;若该参数值指定时间没有包含在所分析xlog列表中,即通过分析发现全部早于该参数指定时间,则返回空值。
  • STOP_TIMESTAMP:指定数据结果中最晚的记录条目,即输出结果如果大于该时间,则停止分析,不需要继续输出;如果该参数值为空,则从START_TIMESTAMP开始的所有日志都进行分析和输出。
  • START_XID:作用与START_TIMESTAMP相同,指定开始的XID值;
  • STOP_XID:作用与STOP_TIMESTAMP相同,指定结束的XID

:warning: 两组参数只能有一组为有效输入,否则报错。

6. 解析结果查看

select * from walminer_contents;

7. 结束walminer操作

该函数作用为释放内存,结束日志分析,该函数没有参数。

select walminer_stop();

场景二:从非WAL产生的数据库中执行WAL日志解析

:warning: 要求执行解析的PostgreSQL数据库和被解析的为同一版本

于生产数据库

1.创建walminer的extension

create extension walminer;

2.生成数据字典

select walminer_build_dictionary("/opt/HighGo5.6.5/store_dictionary");
-- 注:参数可以为目录或者文件

于测试数据库

1. 创建walminer的extension

create extension walminer;

将字典文件和日志传输到测试数据库

将父目录创建出来
mkdir -p /opt/pg106/data/archive_hgdb565

cd /opt/pg106/
scp pg10@192.168.6.12:/opt/HighGo5.6.5/store_dictionary .

copy wal or archive
cd /opt/pg106/data/archive_hgdb565
scp pg10@192.168.6.12:/opt/HighGo5.6.5/data/pg_wal/0* .

2. load数据字典

select walminer_load_dictionary("/opt/pg106/store_dictionary");
-- 注:参数可以为目录或者文件

如出现一下错误,将父目录创建出来即可

postgres=# select walminer_load_dictionary("/opt/pg106/store_dictionary");
ERROR:  It is failed to create dictionary "/opt/pg106/data/walminer/temp".

将父目录创建出来
mkdir -p /opt/pg106/data/walminer

3. add wal日志文件

-- 增加wal文件:
select walminer_wal_add("/opt/pg106/data/archive_hgdb565");
-- 注:参数可以为目录或者文件

4. remove wal日志文件

-- 移除wal文件:
select walminer_wal_remove("/opt/test/wal");
-- 注:参数可以为目录或者文件

5. list wal日志文件

-- 列出wal文件:
select walminer_wal_list();
-- 注:参数可以为目录或者文件

6. 执行解析

select walminer_start(’START_TIMSTAMP’,’STOP_TIMESTAMP’,’START_XID’,’STOP_XID’)

select walminer_start("null","null",0,0);
  • START_TIMESTAMP:指定输出结果中最早的记录条目,即从该时间开始输出分析数据;若该参数值为空,则以分析日志列表中最早数据开始输出;若该参数值指定时间没有包含在所分析xlog列表中,即通过分析发现全部早于该参数指定时间,则返回空值。
  • STOP_TIMESTAMP:指定数据结果中最晚的记录条目,即输出结果如果大于该时间,则停止分析,不需要继续输出;如果该参数值为空,则从START_TIMESTAMP开始的所有日志都进行分析和输出。
  • START_XID:作用与START_TIMESTAMP相同,指定开始的XID值;
  • STOP_XID:作用与STOP_TIMESTAMP相同,指定结束的XID值 两组参数只能有一组为有效输入,否则报错。

7. 解析结果查看

select * from walminer_contents;


select timestamptz,record_user,op_type,op_text,op_undo from walminer_contents where timestamptz >= "2020-05-12 14:10:00"::timestamp and timestamptz <= "2020-05-12 14:20:00"::timestamp and op_type="DELETE";
          timestamptz          | record_user | op_type |                                          op_text                                           |                                           op_undo          
                                 
-------------------------------+-------------+---------+--------------------------------------------------------------------------------------------+------------------------------------------------------------
---------------------------------
 2020-05-12 14:14:49.189156+08 | highgo      | DELETE  | DELETE FROM "public"."test_t" WHERE "id"=1 AND "name"="4e4ff1685131a4cdc6643b523620e10f";  | INSERT INTO "public"."test_t"("id", "name") VALUES(1, "4e4f
f1685131a4cdc6643b523620e10f");
 2020-05-12 14:14:49.189156+08 | highgo      | DELETE  | DELETE FROM "public"."test_t" WHERE "id"=2 AND "name"="126ce4b149a49d1a68f6c2a0af4b2bdd";  | INSERT INTO "public"."test_t"("id", "name") VALUES(2, "126c
e4b149a49d1a68f6c2a0af4b2bdd");
 2020-05-12 14:14:49.189156+08 | highgo      | DELETE  | DELETE FROM "public"."test_t" WHERE "id"=3 AND "name"="dc65893ca95dee5e6547854d3fd4f505";  | INSERT INTO "public"."test_t"("id", "name") VALUES(3, "dc65
893ca95dee5e6547854d3fd4f505");
 2020-05-12 14:14:49.189156+08 | highgo      | DELETE  | DELETE FROM "public"."test_t" WHERE "id"=4 AND "name"="f04daec7b38fe12ced141b1c6a01346a";  | INSERT INTO "public"."test_t"("id", "name") VALUES(4, "f04d
aec7b38fe12ced141b1c6a01346a");
 2020-05-12 14:14:49.189156+08 | highgo      | DELETE  | DELETE FROM "public"."test_t" WHERE "id"=5 AND "name"="05bba4c686505ec88bd65ddc8ff42498";  | INSERT INTO "public"."test_t"("id", "name") VALUES(5, "05bb
a4c686505ec88bd65ddc8ff42498");
 2020-05-12 14:14:49.189156+08 | highgo      | DELETE  | DELETE FROM "public"."test_t" WHERE "id"=6 AND "name"="a8fa80d0188d37629e057aa6a52fe8d8";  | INSERT INTO "public"."test_t"("id", "name") VALUES(6, "a8fa
80d0188d37629e057aa6a52fe8d8");
......

8.结束walminer操作

该函数作用为释放内存,结束日志分析,该函数没有参数。

select walminer_stop();

:warning: 注意:walminer_contents是walminer自动生成的临时表,因此当session断开再重新进入或其他session中解析数据不可见。这么做主要是基于安全考虑。 如果希望保留解析结果,可利用create xxx as select * from walminer_contents;写入普通表中。

  1. 本版本只解析DML语句,不处理DDL语句
  2. 执行了删除表、truncate表、更改表的表空间、更改表字段的类型、vacuum full,这样的DDL语句后,发生DDL语句之前的此表相关的DML语句不会再被解析。
  3. 解析结果依赖于数据字典。(举例:创建表t1,所有者为user1,但是中间将所有者改为user2。那解析结果中,所有t1相关操作所有者都将标示为user2)
  4. wal日志如果发生缺失,在缺失的wal日志中发生提交的数据,都不会在解析结果中出现
  5. 解析结果中undo字段的ctid属性是发生变更“当时”的值,如果因为vacuum等操作导致ctid发生变更,这个值将不准确。对于有可能存在重复行的数据,我们需要通过这个值确定undo对应的tuple条数,不代表可以直接执行该undo语句。
  6. 执行了表字段drop的DDL语句后,发生DDL语句之前的这个字段相关的值都会被解析为encode("AD976BC56F",hex)的形式,另外自定义类型也会解析为这种形式
  7. 只能解析与数据字典时间线一致的wal文件
  8. 不建议使用walminer解析大宗copy语句(在同一个事务中插入大量数据行)产生的wal日志,这会导致解析过程中的效率低下和内存占用过高

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

pg数据库日志挖掘WalMiner

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

pg数据库日志挖掘WalMiner

WalMiner是从PostgreSQL的WAL(write ahead logs)日志中解析出执行的SQL语句的工具,并能生成出对应的undo SQL语句。referenceXlogMiner renamed to WalMinerXlogMiner Enh
pg数据库日志挖掘WalMiner
2018-05-22

如何优化数据库的数据挖掘

优化数据库的数据挖掘可以通过以下几个方面来实现:数据清洗:在进行数据挖掘之前,首先需要对数据进行清洗,包括去除重复数据、处理缺失值、处理异常值等,以确保数据的质量和准确性。数据预处理:在数据挖掘之前,可以对数据进行预处理,包括数据变换、数据
如何优化数据库的数据挖掘
2024-07-03

数据库日志中的宝藏,如何从中挖掘出有价值的信息

数据库日志是一种记录数据库操作历史的机制,它详细记录了数据库中发生的事件,例如,连接、查询、插入、更新、删除等。这些日志文件包含了大量有价值的信息,我们可以从中挖掘出许多有用的信息。
数据库日志中的宝藏,如何从中挖掘出有价值的信息
2024-02-04

数据挖掘和数据仓库之间的区别

当人们听到“数据挖掘”这个词时,“数据仓库”这个词怎么样?找出数据挖掘和数据仓库之间的确切区别。

操作系统日志分析的艺术:从数据海洋中挖掘宝藏

操作系统日志是计算机系统运行过程中产生的记录,包含了丰富的系统信息和事件记录。通过对操作系统日志进行分析,可以发现系统存在的问题、性能瓶颈,甚至可以追踪安全事件。本文介绍了操作系统日志分析的艺术,帮助读者从数据海洋中挖掘宝藏。
操作系统日志分析的艺术:从数据海洋中挖掘宝藏
2024-02-06

数据库OLAP:揭秘数据挖掘的终极利器

数据库OLAP技术是数据挖掘领域的重要工具,能够高效处理海量数据,从复杂的数据中快速提取出有价值的信息,帮助企业做出更明智的决策。
数据库OLAP:揭秘数据挖掘的终极利器
2024-02-12

数据挖掘和数据仓库之间的区别介绍

数据挖掘和数据仓库是两个不同的概念,分别用于不同的数据处理和分析目的。下面是它们之间的区别介绍:1. 定义:- 数据挖掘是指从大量的数据中发现隐藏的模式、关联、趋势和其他有价值的信息,并将其应用于实际问题的过程。数据挖掘主要关注的是发现新的
2023-09-21

数据库和数据挖掘如何重塑医疗保健

数据挖掘是信息处理的一个复杂方面,在医疗数据分析的广阔领域中发挥着关键作用。这项技术以复杂的算法和统计技术为基础,具有揭示隐藏在巨大数据集中的微妙模式和深刻见解的非凡能力。数据挖掘过程是一个结构化的进程,包含几个相互关联的阶段。

挖掘非结构化数据潜能 —— 向量数据库的探索之路

IDC 预测,到 2025 年,中国的数据量将增长到 48.6ZB,80% 是非结构化数据,并且将成为全球最大的数据圈。在我们的日常生活中,非结构化数据的查询使用场景也越来越多见,比如以图搜图、视频搜索等等。 随着非结构化数据应用的增加,此

使用SQL分析,挖掘产品市场数据库的价值

虽然具体指标的相关性取决于业务模型、行业和增长阶段,但下述示例清楚地展示了SQL在提供业务洞察方面的强大和多功能性。
SQL数据库2024-11-30

深入挖掘数据库事务隔离级别:揭秘数据库一致性的奥秘

数据库事务隔离级别是数据库中一个重要的概念,它决定了在并发环境中事务的执行顺序和可见性,从而影响了数据库的一致性。本文深入探讨了数据库事务隔离级别,揭示了数据库一致性的奥秘。
深入挖掘数据库事务隔离级别:揭秘数据库一致性的奥秘
2024-02-10

编程热搜

目录