作者:瀚高PG实验室 (Highgo PG Lab)
目录
文档用途
详细信息
学习和使用数据库挖掘工具XlogMiner/WalMiner。
详细信息
1、介绍
WalMiner是从PostgreSQL的WAL(write ahead logs)日志中解析出执行的SQL语句的工具,并能生
成出对应的undo SQL语句。
reference[XlogMiner renamed to WalMiner](https://www.postgresql.org/about/news/1919/)
XlogMiner Enhancements Released and Renamed to WalMinerPosted on 2019-02-22 by Highgo Software
reference [XLogMiner](https://github.com/HighgoSoftware/XLogMiner)
reference [WalMiner](https://gitee.com/movead/XLogMiner)
> 注意:walminer是Highgo开源的一款软件。
2、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(); |
PG版本支持
PG9.5.0之前的版本没有做过测试
PG9.5.0~PG10.X版本使用WalMiner_10_X
PG11之后的版本使用WalMiner_11_X
3)编译安装
下载软件,读README.md参考安装和使用步骤。
下载地址:
[WalMiner](https://gitee.com/movead/XLogMiner)
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/'
|
> 注意:将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;
2、使用方法
场景一:从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**值
注意:两组参数只能有一组为有效输入,否则报错。
6. 解析结果查看
select * from walminer_contents; |
7 结束walminer操作
该函数作用为释放内存,结束日志分析,该函数没有参数。
select walminer_stop(); |
场景二:从非WAL产生的数据库中执行WAL日志解析
注意:要求执行解析的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('null','null',0,0); |
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'); ......
|
更多详细信息请登录【瀚高技术支持平台】查看 https://support.highgo.com/#/index/docContentHighgo/80e1bd6302e1223a
转载:https://blog.csdn.net/pg_hgdb/article/details/113103821