开启tidb_general_log时,什么情况下不记录SQL语句

【 TiDB 使用环境】生产环境
【 TiDB 版本】5.4.1
【遇到的问题】请教下: 在开启特定tidb-server时,什么样的SQL或者什么情况下,SQL语句不被记录到 general_log 中 ?

【复现路径】
DBA用脚本访问 zabbix 服务,而zabbix 又连接到某个tidb-server实例来存储和操作其元数据。具体是通过脚本访问zabbix service API来达到间接删除某个表中的某些记录的效果,但是在该 tidb-server 上已经开启 tidb_general_log 的情况下,并没有记录到 特定表的 delete from 语句,而只记录到select语句。
说明: 大致逻辑:
(1) 脚本是先间接做某个字段的模糊查询 (SELECT someid… FROM t LIKE …语句被记录到general_log条目):
select xid,name,ipset from twhere ipset like ‘%$ip%’;
(2) 然后再按照查询到的表的主键值 来删除 (没有记录到general_log条目)
这一步是在zabbix server端向tidb-server 发送并执行一个 delete 操作。
【问题现象及影响】
主要是对tidb-server产生疑惑,也看到了记录general_log 有个条件 InRestrictedSQL 变量要是 false,但是这个路径似乎太多了,从tidb代码里无法直接 快速 推断。故而请教:什么情况下会不记录SQL语句到已开启的general_log中。

【附件】

请提供各个组件的 version 信息,如 cdc/tikv,可通过执行 cdc version/tikv-server --version 获取。

tidb_general_log

启用方式是按照 tidb 节点 来配置的,若只配置了一个节点,只有那一个节点会记录 SQL,其他未配置的,则不生效

简单的设置方式:

# 开启 general log
curl -X POST -d "tidb_general_log=1" http://{TiDBIP}:10080/settings
# 关闭 general log
curl -X POST -d "tidb_general_log=0" http://{TiDBIP}:10080/settings

这里有详细的说明
https://docs.pingcap.com/zh/tidb/stable/system-variables#tidb_general_log

描述中没看到 InRestrictedSQL 相关的信息

1 个赞

谢谢啊。
同步一下:

  1. 后来问题解决了,是因为有一个tidb-server结点上 mv/rm tidb.log文件后没有更新文件句柄的问题,是操作上的问题导致漏掉而没看到有general_log产生。记录日志本身没有问题。
  2. 代码里确实这个变量,大致用途是为了标记一些 不应该记录到general_log 的SQL/操作,诸如 系统内部的SQL操作 (对系统表或者系统元数据)。基于1,也就消除了我们当初误以为的逻辑矛盾。

这个变量的介绍跟使用帮忙发一下吧,没有找到这个参数的说明,谢谢

https://docs.pingcap.com/zh/tidb/stable/system-variables#tidb_general_log

是说 InRestrictedSQL 这个变量吗? 如果是,那么这个是tidb代码里的,不是tidb面向用户的变量。
具体可以搜下tidb代码~

此话题已在最后回复的 60 天后被自动关闭。不再允许新回复。