金仓数据库KingbaseES中WalMiner接口使用

WalMiner的限制与约束

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

一、创建扩展

在对应的database下安装walminer扩展。

mydb=>create extension walminer;

CREATE EXTENSION

二、添加日志

添加日志时,可以添加文件夹或文件,可以多次添加多个不同的目录,WalMiner会自动根据日志文件名称进行排序和去重。比如可以同时添加在线日志目录和归档日志目录。添加文件时,会对文件进行判断,如果不是WAL日志,则会报错。

如下,添加了wal和归档两个目录下的日志

mydb=# select walminer_wal_add('sys_wal');

walminer_wal_add


5 file add success

(1 row)

mydb=# select walminer_wal_add('/Kingbase/arch');

walminer_wal_add


3 file add success

(1 row)

三、展示日志列表

mydb=# select walminer_wal_list();

walminer_wal_list


(/Kingbase/arch/00000001000000000000000A)

(/Kingbase/arch/00000001000000000000000B)

(/Kingbase/arch/00000001000000000000000C)

(/Kingbase/ES/V9/data/sys_wal/00000001000000000000000D)

(/Kingbase/ES/V9/data/sys_wal/00000001000000000000000E)

(/Kingbase/ES/V9/data/sys_wal/00000001000000000000000F)

(/Kingbase/ES/V9/data/sys_wal/000000010000000000000010)

(/Kingbase/ES/V9/data/sys_wal/000000010000000000000011)

(8 rows)

#删除已经添加的日志,可以删除单个文件,也可以删除文件夹,可以多次执行

select walminer_wal_remove('sys_wal/000000010000000000000011');

或者

select walminer_wal_remove('sys_wal');

四、数据解析

1. 普通解析

walminer_al会解析已加入的所有WAL日志,如果没有添加WAL日志,则解析data/sys_wal目录下所有WAL日志,解析过程中遇到WAL日志错误、或WAL日志不连续,会在错误或不连续的地方停止解析。

mydb=# select walminer_all();

walminer_all


sys_miner success

(1 row)

2. 时间范围解析

根据时间范围解析,在add的WAL日志中查找对应时间范围的WAL记录。

select walminer_by_time('2026-01-08 15::30', '2026-01-08 16:10:00');

在时间范围解析中,如果开始时间设置为空,则从已加入的WAL日志列表中第一个日志的第一个LSN开始解析。

3. LSN范围解析

根据LSN范围解析,在add的WAL日志中查找对应LSN范围的WAL记录。

select walminer_by_lsn('0/010000A0', '0/016E6578');

4. 单表解析

--开始时间/LSN --结束时间/LSN 是否精准解析 --表OID。单表解析时,必须指定是否为精准解析。

select walminer_by_time('2026-01-08 15::30', '2026-01-08 16:10:00','false', 16452);

解析完成后会自动删除生成的中间文件、已添加的WAL日志、已导入的数据字典等。

五、查看解析结果

mydb=# select * from walminer_contents;

walminer_contents表字段描述信息:

|------------|--------------------------|-------------------------------|
| 字段名称 | 字段类型 | 字段描述 |
| sqlno | integer | SQL语句在事务里的编号 |
| xid | bigint | 当前事务的xid |
| topxid | bigint | 父事务的xid |
| sqlkind | integer | SQL语句类型(INSERT/DELETE/UPDATE) |
| minerd | boolean | 是否能解析 |
| timestamp | timestamp with time zone | 事务提交时间 |
| op_text | text | redo语句 |
| undo_text | text | undo语句 |
| complete | boolean | 事务是否已完成 |
| schema | text | 模式名 |
| relation | text | 表名 |
| start_lsn | sys_lsn | 事务开始的LSN号 |
| commit_lsn | sys_lsn | 事务提交时的LSN号 |

最终,结束解析,结束解析时,会清空解析过程中生成的中间文件。

六、释放内存和临时资源

mydb=# select walminer_stop();

walminer_stop


walminer stoped!

(1 row)

七、解析其他数据库的WAL日志

解析其他库的日志暂不支持解析自定义数据类型,如果其他库的WAL日志中存在自定义数据类型,而本库没有对应的数据类型则会解析失败。

1. 从其他数据库导出数据字典

复制代码
-- 导出数据字典

kingbase=# select walminer_build_dictionary('/kingbase/dict');

walminer_build_dictionary


Dictionary build success!

(1 row)

导出的数据字典名称为:dict

kingbase@opengaussdb Kingbase\]$ ll /Kingbase/dict total 1292 -rw------- 1 kingbase kingbase 1322744 Jan 8 14:42 dictionary.d #### **2. 导入其他数据库的数据字典** ``` -- 导入数据字典 ``` kingbase=# select walminer_load_dictionary('/kingbase/dict'); walminer_load_dictionary -------------------------- Dictionary load success! (1 row) 导入其他数据库的wal日志解析,除了增加本章节1、2步骤导出导入数据字典步骤外,其他步骤与第1、2、3、4、5、6章节相同,不再重复赘述。 ### **总结** Walminer是一个功能强大的工具,用于解析和分析数据库的wal日志文件,以提取有用的事务信息和数据操作,无论是故障恢复、数据版本控制还是数据分析,Walminer接口都是一个强大的工具。

相关推荐
Mahir083 小时前
Redis 与 MySQL 数据同步:一致性保证的完整解决方案
数据库·redis·mysql·缓存·面试·数据一致性
2301_769340673 小时前
如何在 Vuetify 中可靠捕获 Chip 关闭事件(包括键盘触发).txt
jvm·数据库·python
AC赳赳老秦3 小时前
供应链专员提效:OpenClaw自动跟踪物流信息、更新库存数据,异常自动提醒
java·大数据·服务器·数据库·人工智能·自动化·openclaw
灵犀学长4 小时前
基于 Spring ThreadPoolTaskScheduler + CronTrigger 实现的动态定时任务调度系统
java·数据库·spring
北秋,4 小时前
PostgreSQL(Postgres)数据库基础用法 + 数字型 + 字符型 完整联合注入实战
数据库·postgresql·开源
m0_596749095 小时前
JavaScript中手动实现一个new操作符的底层逻辑
jvm·数据库·python
多加点辣也没关系5 小时前
Redis 的安装(详细教程)
数据库·redis·缓存
数据库小学妹6 小时前
数据库连接池避坑指南:告别“连接超时”与“资源耗尽”,让系统跑得更快!
数据库·redis·sql·mysql·缓存·dba
dishugj6 小时前
HANA 数据库备份与恢复
数据库·oracle
前进的李工6 小时前
EXPLAIN输出格式全解析:JSON、TREE与可视化
开发语言·数据库·mysql·性能优化·explain