WalMiner:开启 PostgreSQL 异构 CDC 之旅

本文整理于 HOW 2026 演讲内容,演讲者:李传成,中国联通数据库内核开发工程师。

前言

在数据库技术日益多元化的今天,PostgreSQL 凭借其强大的功能特性和活跃的开源生态,已成为众多企业的核心数据存储方案。然而,随着业务的发展,单一的关系型数据库往往难以满足所有场景的需求——实时数据分析、数据仓库建设、异构系统数据集成等场景,都对数据的实时同步提出了更高的要求。

WalMiner 正是为解决这一问题而生的工具。它基于 PostgreSQL WAL(Write-Ahead Log)日志的解码能力,不仅提供了高效的数据恢复方案,更构建了一套完整的全局逻辑复制体系,能够将 PostgreSQL 的数据实时同步到包括 Doris 在内的多种目标数据库。本文将系统介绍 WalMiner 的核心技术、全局逻辑复制的优势,以及如何将其运用于 PG 到 Doris 的同步实践。

一、WalMiner 是什么

1.png

WalMiner 的核心模块基于对 WAL 日志的解析处理。与传统的逻辑解码方案需要将 WAL 级别设置为 logical 不同,WalMiner 支持在 replica 级别进行解码。通过解码 WAL 日志,可以细致地观察 PostgreSQL 数据库的历史数据变化过程,为问题诊断和数据恢复提供可靠依据。

基于这一核心解码能力,WalMiner 实现了多项高级功能,服务于不同的业务痛点:

1. replica 级别的逻辑解码

WalMiner 支持在 replica 级别(而非 logical 级别)进行全局逻辑复制,有效减少了数据库 WAL 日志的积压问题。这一特性使得逻辑复制不再依赖 logical 级别的设置,降低了生产环境的配置门槛和潜在风险。

2. 多重更新识别

在数据库发生误操作后,如果后续又有正常的业务操作对数据进行了修改,WalMiner 能够识别出这种复杂的变更序列,帮助恢复出用户期望的数据状态。这一功能在数据恢复场景中具有极高的实用价值。

3. 集簇级解码

传统的 PostgreSQL 逻辑复制需要针对每个数据库单独进行解码——如果有多个数据库需要同步,就需要多次读取和解析 WAL 日志。WalMiner 实现了极速集解码能力,只需读取一遍 WAL 即可完成多个数据库的解码工作,显著降低了对数据库资源的消耗。

4. 无侵入式部署

原生逻辑解码需要占用数据库的网络、磁盘和 CPU 资源。而 WalMiner 将解码工作完全移至独立机器执行,对生产数据库不产生任何额外负载。

5. 多版本兼容

WalMiner 的最新版本可以适配所有 PostgreSQL 版本,用户无需针对特定的 PG 版本选择不同的工具版本。

基于上述核心技术,WalMiner 构建了两大类应用场景:CDC(变更数据捕获)相关功能和数据库恢复功能。在 CDC 方面,WalMiner 提供了表级别并行导入导出工具,实测比 pg_dump 快 8 倍,比原生 COPY 命令快 2 到 3 倍。

二、WalMiner 全局逻辑复制 vs PG 原生逻辑复制

2.png

2.1 PG 原生逻辑复制的局限

PostgreSQL 原生的逻辑复制虽然在许多场景下表现良好,但也存在一些明显的不足:

  • ​资源压力​:原生逻辑复制依赖 logical 级别,如果订阅端处理不及时,会导致主库 WAL 日志大量积压,可能耗尽磁盘资源,影响业务正常运行。
  • ​多次读取开销​:在多库场景下,需要对每个数据库分别进行 WAL 的读取和遍历,造成数据库资源的重复消耗。
  • ​故障转移困难​:当主库发生故障时,需要手动修改下游备库的连接配置才能继续复制,无法实现自动故障转移。
  • ​不支持 DDL 同步​:新建数据库或修改表结构等 DDL 操作,下游无法自动感知和同步。

2.2 WalMiner 全局逻辑复制的优势

WalMiner 采用独立部署架构,通过流复制协议从主库拉取 WAL 日志到本地进行解码。解码完成后,结果可以在本地暂存,并通过多种方式进行消费:

  • ​直接同步​:启动线程将数据直接应用到目标数据库。
  • ​服务化订阅​:通过 Java 或 Python 程序通过网络连接服务端,拉取解码结果进行消费。
  • ​灵活输出​:支持标准输出(便于测试验证)、文件存储、时间分片保存等多种输出方式。其中时间分片保存功能特别适用于网络不稳定或生产库无法直接连接目标库的隔离场景——解码结果可先暂存于本地,待网络恢复或通过移动存储介质再行传输。

在故障转移方面,WalMiner 支持配置多个备库地址。当主库发生切换时,程序能够自动感知并连接新的主库,继续执行逻辑复制任务,实现了高可用架构下的无缝衔接。

在 DDL 支持方面,WalMiner 的全局逻辑复制能够捕获并同步 CREATE DATABASE、CREATE TABLE 等 DDL 变更,确保源端和目标端的结构一致性。

三、PG 到 Doris 的同步实践

将 PostgreSQL 数据同步到 Doris 等 AP 型数据库,是许多企业构建实时数仓的常见需求。WalMiner 提供了一套完整的解决方案。

3.1 流程概览

PG 到 Doris 的同步与 PG 到 PG 的同步遵循同一套逻辑框架,主要步骤包括:初始化配置、创建订阅、启动同步。区别在于目标数据库的连接串需要调整为 Doris 的连接参数。

3.2 初始化

通过 walminer pgto init 命令进行初始化,需要指定配置目录、源库连接串、目标库连接串,以及并行度等参数:

walminer pgto init -c /path/to/config \
    --source-connstr1='dbname=postgres host=localhost port=10070 ...' \
    --target-connstr='dbname=db1 host=localhost port=9030 username=root ...' \
    -t 2 -K 2

其中 -K 参数用于指定目标数据库的类型。Doris 有自己特定的取值,用户可通过 --help 查看最新支持的参数值。

3.3 创建订阅

通过 walminer pgto bind 命令创建订阅,指定需要同步的库和表:

walminer pgto bind -c /path/to/config -I '[sub1][db1.public.test_pgto_2][db1.db1.test_pgto2]'

需要注意的是,Doris 的库结构为两层(库和表),而 PostgreSQL 为三层(库、schema、表)。为保持兼容性,在配置映射时需要在 Doris 侧补充类似库名的映射处理。

3.4 启动同步与验证

执行 walminer pgto run 命令启动同步进程。同步启动后,在 PostgreSQL 源端插入的数据可以在 Doris 中即时查询到。跨库的数据同步同样可以正常完成。

四、AI 赋能:用大模型操作 WalMiner

WalMiner 作为命令行工具,拥有丰富的参数和帮助文档,天然适合被大语言模型(LLM)调用。通过将 WalMiner 的技能文档加载到 AI 系统中,用户可以用自然语言完成原本需要记忆复杂命令才能执行的操作。

4.1 误操作数据找回

用户只需告诉 AI“我需要恢复某个表的数据”,AI 即可自动生成并执行相应的 WalMiner 命令,完成数据恢复,无需用户记忆任何具体命令。

4.2 WAL 日志分析

AI 可以自主分析 WAL 日志,输出事务数量、操作时间点、LSN 位置、操作类型以及日志资源消耗等详细信息。如果用户有更具体的分析需求,只需在技能文档中补充描述,AI 便能据此执行定制化的分析任务。

4.3 自动化搭建逻辑复制

AI 可以端到端地完成全局逻辑复制的搭建:

  1. 根据环境变量解析源库和目标库的连接参数,生成并执行初始化命令。
  2. 自动绑定所有库和所有表,询问用户是否需要进行基础数据的全量同步。
  3. 调用 pg_dump 等工具完成元数据同步和基础数据同步。
  4. 启动逻辑复制进程,并持续监控同步速度、Gap 值和解码位点等信息。
  5. 自动生成测试数据,验证 DML 同步和跨库同步是否成功,并汇报测试结果。

通过 AI 的集成,WalMiner 的使用门槛被大幅降低——从配置、同步到监控、测试,整个流程都可以通过自然语言交互完成。

总结

WalMiner 通过创新的 WAL 日志解码技术,为 PostgreSQL 用户提供了一套高效、灵活、低侵入的全局逻辑复制方案。无论是在 PG 实例之间构建高可用复制架构,还是将数据实时同步到 Doris 等 AP 数据库以支撑实时分析场景,WalMiner 都展现出了优于原生逻辑复制的诸多特性。而与大模型的结合,更进一步降低了工具的使用门槛,让复杂的 CDC 任务可以通过自然语言即可完成。

在数据实时流动需求日益增长的今天,WalMiner 为 PostgreSQL 的数据同步与集成提供了一条值得探索的快捷路径。

posted @ 2026-09-28 14:38  IvorySQL  阅读(2)  评论(0)    收藏  举报