如何读取PostgreSQL的WAL日志内容?使用Walminer提高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日志中搜索数据,以期尽量挽回数据。

一、如何安装

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

movead/WalMiner

将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();
如何读取PostgreSQL的WAL日志内容?使用Walminer提高wal日志的可读性

执行日志解析函数

select walminer_all();

查看解析内容

select * from walminer_contents;
如何读取PostgreSQL的WAL日志内容?使用Walminer提高wal日志的可读性

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

select walminer_stop();

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

原创文章,作者:奋斗,如若转载,请注明出处:https://blog.ytso.com/237356.html

(0)
上一篇 2022年1月25日 22:10
下一篇 2022年1月25日 22:14

相关推荐

发表回复

登录后才能评论