【 TiDB 使用环境】生产环境
【 TiDB 版本】 v5.2.1
【复现路径】
【遇到的问题:问题现象及影响】
咨询下TiDB 如何分析有没有执行过某些DML语句 具体什么时间执行的 类似mysql 里面的mysqlbinlog 分析binlog 输出执行过的sql语句这种功能
- 商业版本的可以开启审计功能
- 社区版本的可以开启tidb_general_log参数,然后到对应的tidb.log去查日志
- 生产环境开启tidb_general_log可能影响比较大,可以用proxysql的审计功能
- 持续抓网络包分析
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 的内容打印出来。