前言

walminer工具可以帮助dba挖掘wal日志中的内容,看到某时间对应数据库中的具体操作。例如挖掘日志后可以看到数据库某时间有哪些dml语句。

walminer的限制与约束

  • WalMiner工具的使用必须以数据库超级用户执行。
  • 数据库能正常运行。
  • full_page_writes必须为开启状态。
  • 拥有完整连续的WAL日志。
  • 能导出正常使用的数据字典。
  • 解析过程中,日志所需数据字典没有发生改变。
  • 不支持DDL的解析。

解析wal日志

测试环境为KESV8R6C007

1.解析本库WAL日志无需添加日志和数据字典

创建扩展
TEST=# create extension walminer;
CREATE EXTENSION 按时间范围解析
TEST=# select walminer_by_time('2023-04-09 11:27:00', '2023-04-10 11:37:00');
NOTICE: Add wal from current pg_wal directory, do not suggest use this way in produce
NOTICE: Switch wal to 000000010000000100000078 on time 2023-04-10 15:54:17.088751+08
walminer_by_time
---------------------
pg_minerwal success
(1 row) 普通解析
TEST=# select walminer_all(); LSN范围解析
select walminer_by_lsn('0/010000A0', '0/016E6578'); 单表解析
select walminer_by_time('2023-09-08 11:27:00', '2023-09-08 11:37:00', 'false', 16452); 查看分析结果:
TEST=# select * from walminer_contents;
sqlno | xid | topxid | sqlkind | minerd | timestamp | op_text | undo_text |
complete | schema | relation | start_lsn | commit_lsn
-------+------+--------+---------+--------+-------------------------------+-------------------------------------------------------------------------------+--------------------------------------------------+
----------+--------+----------+------------+------------
1 | 1516 | 0 | 1 | t | 2023-03-31 15:22:05.701811+08 | INSERT INTO public.u1(id ,info) VALUES(1 ,'ec79d8fc388c6aadb81c04890efcb587') | DELETE FROM public.u1 WHERE id=1 |
t | public | u1 | 1/7898B1F8 | 1/78991750 结束分析:
select walminer_stop(); 结束分析后还可以查到walminer_contents视图中相关记录,如果以后不需要查看可以truncate该视图。

异地解析wal日志的限制

1.执行了删除表、truncate表、更改表的表空间、更改表字段的类型、vacuum full,这样的DDL语句后,发生DDL语句之前的此表相关的DML语句不会再被解析。

应对措施:建议在执行表结构变更之前,先保存一份数据字典,用来保证可以解析历史wal日志。

2.解析结果依赖于数据字典。(举例:创建表t1,所有者为user1,但是中间将所有者改为user2。那解析结果中,所有t1相关操作所有者都将标示为user2)

应对措施:建议在执行表结构变更之前,先保存一份数据字典,用来保证可以准确解析历史wal日志。

3.只能解析与数据字典时间线一致的wal文件

4.不建议使用walminer解析大量copy语句(在同一个事务中插入大量数据行)产生的wal日志,

这会导致解析过程中的效率低下。

2.解析其他数据库的WAL日志
解析其他库的日志暂不支持解析自定义数据类型,如果其他库的WAL日志中存在自定义数据类型,而本库没有对应的数据类型则会解析失败。 从其他数据库导出数据字典
select walminer_build_dictionary('/home/kingbase/dict');
导出的数据字典名称为:dict
将生成的数据字典和需要解析的wal日志放到其他库可以获取的路径。
导入其他数据库的数据字典
-- 导入数据字典
select walminer_load_dictionary('/home/kingbase/dict/dict');
添加日志文件
select walminer_wal_add('/home/kingbase/sys_wal/000000010000000000000001');
日志解析,同本地wal解析方式相同,包括普通解析,时间范围解析, LSN范围解析,单表解析
-- 查看分析结果
select * from walminer_contents;
-- 结束分析,结束分析会删除分析过程中生成的中间文件、导入的数据字典、WAL日志文件以及分析结果
select walminer_stop();
3.本地wal加密方式使用walminer
wal加密后使用walminer解析时,不需要打开透明存储加密的钱夹功能,不需要加密密钥。 TEST=# CLOSEUP WALLET WITH PASSWORD "654321";
CLOSE WALLET alter system set wal_encryption to true;
select sys_reload_conf(); TEST=# show wal_encryption ;
wal_encryption
----------------
on
(1 row) TEST=# create extension walminer ;
CREATE EXTENSION
TEST=#
TEST=# select walminer_all();
NOTICE: Add wal from current pg_wal directory, do not suggest use this way in produce
NOTICE: Switch wal to 000000010000000100000078 on time 2023-04-10 16:38:12.105553+08
walminer_all
---------------------
pg_minerwal success
(1 row) TEST=#
TEST=# select * from walminer_contents;
sqlno | xid | topxid | sqlkind | minerd | timestamp | op_text | undo_text |
complete | schema | relation | start_lsn | commit_lsn
-------+------+--------+---------+--------+-------------------------------+-------------------------------------------------------------------------------+--------------------------------------------------+
----------+--------+----------+------------+------------
1 | 1516 | 0 | 1 | t | 2023-03-31 15:22:05.701811+08 | INSERT INTO public.u1(id ,info) VALUES(1 ,'ec79d8fc388c6aadb81c04890efcb587') | DELETE FROM public.u1 WHERE id=1 |
t | public | u1 | 1/7898B1F8 | 1/78991750

总结

在KingbaseESV8R6C7中支持walminer日志挖掘,此功能插件有些功能限制需要注意,例如支持DDL语句的挖掘。

在本地测试加密wal日志不需要对应解密密钥就可以使用walminer挖掘日志。

KingbaseES V8R6 中walminer的使用的更多相关文章

  1. KingbaseES V8R6集群维护案例之---停用集群node_export进程

    案例说明: 在KingbaseES V8R6集群启动时,会启动node_exporter进程,此进程主要用于向kmonitor监控服务输出节点状态信息.在系统安全漏洞扫描中,提示出现以下安全漏洞: 对 ...

  2. KingbaseES V8R6集群维护案例之---将securecmdd通讯改为ssh案例

    案例说明: 在KingbaseES V8R6的后期版本中,为了解决有的主机之间不允许root用户ssh登录的问题,使用了securecmdd作为集群部署分发和通讯的服务,有生产环境通过漏洞扫描,在88 ...

  3. KingbaseES V8R6兼容Oracle的exp-imp导出导入工具使用

    说明: KingbaseES V8R6版本中的兼容Oracle的exp-imp导入导出工具,支持完全模式.用户模式和表模式的导出功能. 本次案例数据库版本: test=# select version ...

  4. KingbaseES V8R6集群管理运维案例之---repmgr standby switchover故障

    案例说明: 在KingbaseES V8R6集群备库执行"repmgr standby switchover"时,切换失败,并且在执行过程中,伴随着"repmr stan ...

  5. KingbaseES V8R6备份恢复案例之---同一数据库创建不同stanza备份

    案例说明: 在生产环境,有的应用需要调用数据库的sys_rman做备份,为了区分数据库自身的sys_rman备份和应用的备份,可以使用不同的stanza name创建备份.本案例介绍了,如何在King ...

  6. KingbaseES V8R6备份恢复案例之--删除test数据库后sys_backup.sh备份

    案例说明: KingbaseES V8R6通过sys_backup.sh执行物理备份,默认sys_backup.sh执行备份初始化时,需要连接test数据库进行身份的认证:在一些生产环境为了安全需求, ...

  7. KingbaseES V8R6集群维护案例之--单实例数据迁移到集群案例

    案例说明: 生产环境是单实例,测试环境是集群,现需要将生产环境的数据迁移到集群中运行,本文档详细介绍了从单实例环境恢复数据到集群环境的操作步骤,可以作为生产环境迁移数据的参考. 适用版本: Kingb ...

  8. KingbaseES V8R6集群维护案例之--修改securecmdd工具服务端口

    案例说明: 在一些生产环境,为了系统安全,不支持ssh互信,或限制root用户使用ssh登录,KingbaseES V8R6可以使用securecmdd工具支持主机之间的通讯.securecmdd工具 ...

  9. KingbaseES V8R6集群维护之--修改数据库服务端口案例

    ​ 案例说明: 对于KingbaseES数据库单实例环境,只需要修改kingbase.conf文件的'port'参数即可,但是对于KingbaseES V8R6集群中涉及到多个配置文件的修改,并且在应 ...

  10. KingbaseES V8R6单实例外部备份案例

    案例说明: 本案例采用sys_backup.sh执行物理备份,备份使用如下逻辑架构:数据库主机采用CentOS 7系统,repo采用kylin V10 Server. 单实例+外部备份服务器 备份逻辑 ...

随机推荐

  1. Spring Boot图书管理系统项目实战-7.借阅图书

    导航: pre:  6.图书管理 next:8.续借图书 只挑重点的讲,具体的请看项目源码. 1.项目源码 需要源码的朋友,请捐赠任意金额后留下邮箱发送:) 2.页面设计 2.1 bookBorrow ...

  2. C++ 快速加载 Dll 里的 API

    最近项目里要重新编写程序加载器,也就是编译出一个可执行文件,在 Windows 上是 .exe 为什么要程序加载器? 个人理解是,可执行文件大小最好是越小越好,功能都可以由 dll 文件执行 而程序加 ...

  3. 【libGDX】使用Mesh绘制立方体

    1 前言 ​ 本文主要介绍使用 Mesh 绘制立方体,读者如果对 Mesh 不太熟悉,请回顾以下内容: 使用Mesh绘制三角形 使用Mesh绘制矩形 使用Mesh绘制圆形 ​ 在绘制立方体的过程中,主 ...

  4. Qt实用技巧:QCustomPlot做北斗GPS显示绝对位置运动轨迹和相对位置运动轨迹图的时,使图按照输入点顺序连曲线

    需求   使用QCustomPlot绘制多个目标的北斗运行轨迹图,包括累计绝对位置图和记录时刻的相对位置图.  当前绘制存在问题:    交付客户前,公司内部自测流程发现的问题.  实际预期效果为:  ...

  5. 网络通信部分之bs/cs架构,网络概念,osi七层网络模型,TCP/UDP协议---day27

    1.网络开发的两大架构c/s,b/s # ### 1.网络开发的两大架构 a文件 -> b文件 借助c文件 a文件和b文件进行数据交流,借助c文件中转数据 a文件把数据放在c文件中,b文件从c文 ...

  6. django学习第十五天-modelform的补充

    基于form组件和modelform组件改造图书管理系统 详情可以去图书管理系统分类中查看 基于form组件和modelform组件改造图书管理系统 modelform的补充 class BookMo ...

  7. 【Azure 应用服务】App Service for Linux 环境中为Tomcat页面修改默认的Azure 404页面

    问题描述 在App Service Linux环境中,如部署Tomcat 应用后,如果访问的页面找不到,应用会返回一个由Azure生成的404页面,那么是否可以修改它呢? PS: 如果是App Ser ...

  8. Android switch语句报错Constant expression required

    方案一 :可以用 if来替代  如下 原因:在Android Studio中使用JDK17以上版本,会出现switch语句报错"Constant expression required&qu ...

  9. SQL之基本查询

    提纲 记录查询 使用列别名 查询语句执行顺序 数据分页 子句执行顺序 结果集排序 PS: 排序注意 多个排序字段 子句执行顺序 结果集去除重复数据 注意: 条件查询 比较运算符 注意 子句执行顺序

  10. Scriban语言手册中文版

    Scriban是一个快速.强大.安全且轻量级的模板引擎,同时兼容liquid语法规则. 项目地址:https://github.com/scriban/scriban 这个文档是语言语法的中文翻译 原 ...