使用Walminer提高wal日志的可读性

作者:杭州美创科技有限公司

如何读取PostgreSQL的WAL日志内容?这是我们脑海中思考过却不知道如何动手操作的一个想法,因为wal日志是二进制格式的文件

在PostgreSQL中,wal日志是保证数据完整性的一种标准方法,WAL的中心概念是数据文件(存储着表和索引)的修改必须在这些动作被日志记录之后才被写入,即在描述这些改变的日志记录被刷到持久存储以后。简单来说,wal日志记录了数据的变更操作,你对数据的操作都会被记录到其中,由于wal日志是二进制格式的文件,人类不易读,但是如果遇到wal日志增长的情况,并且我们还不知道是什么样的数据变更引起的大量的wal日志增长,我们就会想办法知道wal日志到底记录了什么信息,那么walminer工具你需要了解一下。

WalMiner是从PostgreSQL的WAL(write ahead logs)日志的解析工具,能够挖掘wal日志所有的有用信息,从而提供PG的数据恢复支持。目前主要有如下功能:

  • 从waL日志中解析出SQL,包括DML和少量DDL
  • 解析出执行的SQL语句的工具,并能生成对应的undo SQL语句。与传统的logical
    decode插件相比,walminer不要求logical日志级别且解析方式较为灵活。
  • 数据页挽回
  • 当数据库被执行了TRUNCATE等不被wal记录的数据清除操作,或者发生磁盘页损坏,可以使用此功能从wal日志中搜索数据,以期尽量挽回数据。

一、如何安装

安装下载源码包,源码包下载链接:

https://gitee.com/movead/XLogMiner.git

将walminer目录放置到编译通过的PG工程的"…/contrib/"目录下,再进去walminer目录执行编译安装命令

# make && make install

同样的用安装扩展的方式在数据库中安装walminer扩展

为了防止在生产库中误操作,我们就不选择在生产库进行解析了,在生产库和测试库都安装好walminer插件

# create extension walminer;

在生产库中我们指定一个目录下生成一个数据字典

select walminer_build_dictionary('/opt/proc/store_dictionary');

拷贝生成的数据字典到测试库环境上,同时将需要解析的wal日志文件也拷贝过去

进入到测试库中,加载数据字典以及添加需要被解析的wal日志

select walminer_load_dictionary('/opt/test/store_dictionary');
select walminer_wal_add('/data/walfile/ 000000010000000E00000084 ');

查看当前加入解析队列的wal日志

select walminer_wal_list();

在这里插入图片描述

执行日志解析函数

select walminer_all();

查看解析内容

select * from walminer_contents;

在这里插入图片描述

最后需要结束日志分析,该函数作用为释放内存

select walminer_stop();

从某一个方面讲,既然walminer记录了相应的SQL语句,那么当进行误操作的时候,也能以此为切入点解析误操作的SQL语句以达到恢复数据的效果了。

  • 0
    点赞
  • 0
    评论
  • 1
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值