TiDB 是否有官方的 WAL 导出工具

【 TiDB 使用环境】TiUP 搭建的测试集群
【 TiDB 版本】v6.1.0
【遇到的问题:问题现象及影响】
之前使用的是 YugabyteDB,有提供一个 log-dump 工具,可以直接查看系统中每个表的 WAL 日志。
例如,我创建了这样一张表

CREATE TABLE txn1 (k INT PRIMARY KEY, v INT);

会打印出这样的内容,来指示表属性。

Header:
major_version: 1
minor_version: 0
unused_tablet_id: "a4d569a98bf3489eab7c822ddf29e580"
sequence_number: 1
schema {
  columns {
    id: 0
    name: "k"
    type {
      main: INT32
    }
    is_key: true
    is_hash_key: true
    is_nullable: false
    is_static: false
    is_counter: false
    sorting_type: 0
    order: 1
    pg_type_oid: 23
  }
  columns {
    id: 1
    name: "v"
    type {
      main: INT32
    }
    is_key: false
    is_nullable: true
    is_static: false
    is_counter: false
    sorting_type: 0
    order: 2
    pg_type_oid: 23
  }
  table_properties {
    contain_counters: false
    is_transactional: true
    consistency_level: STRONG
    use_mangled_column_name: false
    is_ysql_catalog_table: false
    retain_delete_markers: false
    partitioning_version: 1
  }
  colocated_table_id {
  }
  pgschema_name: "public"
}
schema_version: 0

而如果我执行一段事务

BEGIN;
UPDATE txn1 SET v=400 WHERE k=3;
COMMIT;

将会有这样对应的内容,包括

  • 事务 ID
  • 事务写操作 key-value pairs 信息
  • 事务开始时间戳
  • 事务提交时间戳
Entry:
type: REPLICATE
replicate {
  id {
    term: 1
    index: 6
  }
  hybrid_time: 6854731322153586688
  op_type: WRITE_OP
  write {
    unused_tablet_id: ""
    write_batch {
      write_pairs {
        key: "G\374\240H\200\000\000\003!!K\201"
        value: "H\000\000\001\220"
      }
      transaction {
        transaction_id: "0:Q\220\231q@\246\222\247Z\370\'\221;\347"
        isolation: SNAPSHOT_ISOLATION
        status_tablet: "d8d35f601a36483ba4e6746c25e94e90"
        priority: 4621407376379158149
        start_hybrid_time: 6854731233537978368
        locality: GLOBAL
      }
      DEPRECATED_may_have_metadata: true
      table_schema_version {
        schema_version: 0
      }
    }
    client_id1: 13782638009204925153
    client_id2: 992683026222397848
    request_id: 11
    min_running_request_id: 11
    batch_idx: 0
  }
  committed_op_id {
    term: 1
    index: 5
  }
  monotonic_counter: 0
}
Entry:
type: REPLICATE
replicate {
  id {
    term: 1
    index: 7
  }
  hybrid_time: 6854731334443716608
  op_type: UPDATE_TRANSACTION_OP
  committed_op_id {
    term: 1
    index: 6
  }
  monotonic_counter: 0
  transaction_state {
    transaction_id: "0:Q\220\231q@\246\222\247Z\370\'\221;\347"
    status: APPLYING
    tablets: "d8d35f601a36483ba4e6746c25e94e90"
    commit_hybrid_time: 6854731334443175936
    sealed: false
    aborted {
    }
  }
}

YugabyteDB 和 TiDB 底层都是基于 RocksDB 做的存储,也都是支持分布式事务的数据库,我想请问一下 TiDB 生态中有单独的,显式分析 WAL 日志的工具吗?最近 TiCDC 在社区中做宣传,查了一些相关资料,TiCDC 上下游用的是 kv change log 来做的,这部分是属于 WAL 日志的一部分还是 raft log 的一部分还是第三者呢?
尽管 TiCDC 似乎是个答案,但是也是需要部署的,不方便直接对日志进行分析。
刚接触 TiDB 不久,如果有比较粗浅的认知错误,还请见谅,谢谢~

ticdc不是用的wal,是从tikv中写数据的时候抓到的changelog的(细节不清楚)
据我所知,tidb没有wal分析工具。

TiCDC 的 kv change log 来源是 raft log,包含了对 RocksDB 的 key value 添加和删除操作。

TiKV 中的 raft log 可以近似理解为 RocksDB WAL,两者包含的信息基本一致。

谢谢,其实就是手动对 TiKV 底层 RocksDB 数据的主动解析是吧,十分感谢!