这是我们脑海中思考过却不知道如何动手操作的一个想法,因为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日志中搜索数据,以期尽量挽回数据。
一、如何安装
安装下载源码包,源码包下载链接:
将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语句以达到恢复数据的效果了。
原创文章,作者:奋斗,如若转载,请注明出处:https://blog.ytso.com/237356.html