TiDB 如何分析有没有执行过DML语句 类似mysql 里面的mysqlbinlog 分析binlog 输出执行过的sql语句

【 TiDB 使用环境】生产环境
【 TiDB 版本】 v5.2.1
【复现路径】
【遇到的问题:问题现象及影响】
咨询下TiDB 如何分析有没有执行过某些DML语句 具体什么时间执行的 类似mysql 里面的mysqlbinlog 分析binlog 输出执行过的sql语句这种功能

  1. 商业版本的可以开启审计功能
  2. 社区版本的可以开启tidb_general_log参数,然后到对应的tidb.log去查日志
  3. 生产环境开启tidb_general_log可能影响比较大,可以用proxysql的审计功能
  4. 持续抓网络包分析

TiDB 有一个类似于 MySQL 中的 mysqlbinlog 的特性,叫做 TiCDC(TiDB Change Data Capture)。 TiCDC 实时捕获并复制对 TiDB 集群所做的 DML(数据操作语言)更改到下游数据库或消息队列。 TiCDC 的工作原理是解析 TiDB 的 binlog 并从中提取 DML 语句。

TiCDC 提供了一个命令行界面(CLI),可用于配置和管理复制任务。 通过使用cdc cli capture命令,您可以捕获特定时间点的binlog,并输出从该时间点开始执行的DML语句。

下面是一个示例命令,您可以使用它来捕获二进制日志并输出 DML 语句:

cdc cli capture --pd-endpoints=pd1:2379,pd2:2379,pd3:2379 \
    --start-ts=425091232384233219 \
    --target-dir=/path/to/output_dir \
    --log-file=/path/to/log_file

这个ticdc 知道的,但他只是个增量同步工具,只能分析不落地的changelog,主要是需要tidb 能保留tikv 的change log 为文件,否则这个不落地 过了 gc时间就没法事后分析了

tidb_general_log 这个开启能记录日志,可以单独开个tidbserver来处理这个

tidb_general_log 记录的是包括select在内的所有语句,即使短时间开启量也会非常大,不推荐长期开启。
想要类似mysql 里面的mysqlbinlog 分析binlog的话。首先,要使用 TiDB Binlog 中的 Drainer 将 binlog 按照 protobuf 格式输出到文件,然后使用 Reparo 解析文件中的 binlog,dest-type参数选择print将binlog 的内容打印出来。

TiKV Raft 日志用于存储对 TiKV 中数据所做的更改。 Raft 日志是复制的日志,存储在集群中的每个节点上。 Raft日志用于保持节点间的一致性,保证所有节点的数据相同。 Raft 日志被 TiCDC 用于捕获变化并发送到 TiDB Binlog。 一旦更改被捕获并写入 TiDB Binlog,TiDB 可以分析 TiDB Binlog 以确定执行了哪些 DML 语句。

ticdc 不是binlog 的升级版本么? 这个日志还是不落地成文件啊 没有mysqlbinlog 的分析方式,没法事后分析的啊 比如过去的一个时间段内有没有人修改过某张表 具体修改的 是哪些字段 从什么值修改成什么值了

可以开的binglog ,然后把binlog 输出到file,这样可以对binlog 进行分析。
具体可以参数官方文档:https://docs.pingcap.com/zh/tidb/v5.4/tidb-binlog-overview

在 TiDB 中,可以使用 TiDB Binlog 来分析已经执行过的 DML 语句以及执行时间。 TiDB Binlog 是一种捕获对数据库所做的更改并以结构化格式记录它们的功能。

使用 TiDB Binlog 分析已执行的 DML 语句及其执行时间,请按照以下步骤操作:

开启 TiDB Binlog:确保你的 TiDB 集群开启了 TiDB Binlog 功能。 这可以通过在 TiDB 配置文件(tidb.toml)中将 enable-binlog 配置参数设置为 true 来完成。

Configure Binlog Settings:设置 TiDB Binlog 的相关配置选项,例如 binlog-format 和 binlog-socket。 这些设置决定了 binlog 数据的格式和目的地。

启动 TiDB Binlog:在进行必要的配置更改以启用 TiDB Binlog 后重启 TiDB 服务器。

使用 TiDB Binlog 工具:TiDB 提供了 tidb-binlog 工具来处理和分析 binlog 数据。 您可以使用此工具从 binlog 文件中提取 DML 语句及其执行时间。

示例:tidb-binlog -s binlog.000001 > executed_dml_statements.sql

该命令从binlog.000001中提取binlog数据,并将执行的DML语句输出到文件executed_dml_statements.sql。

请注意,您需要指定正确的 binlog 文件名或使用通配符 (*) 来处理多个 binlog 文件。

分析执行的 DML 语句:在文件中提取提取的 DML 语句后,您可以使用各种方法对其进行分析,例如直接查看文件或将其加载到数据库或其他工具中以进行进一步分析。

需要注意的是,TiDB Binlog 主要是为复制目的而设计的,而不是一般的审计或分析。 如果您需要对执行的 DML 语句进行详细的审计或分析,您可以考虑使用专门的工具或在您的应用程序层中实现自定义日志记录或审计机制。

此外,请注意启用 TiDB Binlog 对性能的影响,因为它会给集群带来额外的开销。 正确配置和监控 binlog 设置以确保在您的特定用例中获得最佳性能。

原来真有,我也找呢

请问tidb-binlog有下载链接吗?谢谢。