金仓数据库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接口都是一个强大的工具。

相关推荐
weixin_520649871 小时前
数据库函数
数据库
Bert.Cai2 小时前
MySQL LPAD()函数详解
数据库·mysql
OnlyEasyCode3 小时前
Navicat 任务自动备份指定数据库
数据库
if else3 小时前
Redis 哨兵集群部署方案
数据库·redis
yejqvow123 小时前
Pandas 高效实现组内跨行时间戳匹配与布尔标记
jvm·数据库·python
了不起的云计算V3 小时前
从DeepSeek V4适配看国产算力的三个拐点
数据库·人工智能
qq_189807034 小时前
html标签如何提升可访问性_aria-label与title区别【指南】
jvm·数据库·python
norq juox4 小时前
MySQL 导出数据
数据库·mysql·adb
qq_349317484 小时前
mysql如何设置定时自动备份脚本_编写shell脚本与cron任务
jvm·数据库·python
952364 小时前
Spring IoC&DI
java·数据库·spring