查询 cluster_log 时,字段 time 支持时间函数吗?

1.查询指定时间段的日志
mysql> SELECT time,instance,left(message,150) FROM cluster_log WHERE message LIKE ‘%ddl%job%ID.80%’ AND type=‘tidb’ AND time > DATE_SUB(NOW(), INTERVAL 30 SECOND) AND time < now();
ERROR 1105 (HY000): denied to scan logs, please specified the start time, such as time > '2020-01-01 00:00:00'

2.如果换成时间串是 OK 的:
mysql> SELECT time,instance,left(message,150) FROM cluster_log WHERE message LIKE ‘%ddl%job%ID.80%’ AND type=‘tidb’ AND time > ‘2024-05-20 10:52:14’ AND time < ‘2024-05-20 10:52:44’;
±------------------------±---------------±-------------------------------------------------------------------------------------------------------------------------------------------------------+
| time | instance | left(message,150) |
±------------------------±---------------±-------------------------------------------------------------------------------------------------------------------------------------------------------+
| 2024/05/20 10:52:15.989 | 127.0.0.1:4000 | [conn.go:1152] [“command dispatched failed”] [conn=4276449321164997027] [connInfo="id:4276449321164997027, addr:127.0.0.1:49908 status:11, collation:u |
±------------------------±---------------±-------------------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.04 sec)

所以不支持直接使用时间函数?

select DATE_SUB(NOW(), INTERVAL 300 SECOND) 这个是可以得到时间的,暂时连不到数据库,看起来是时间没有解析执行出来。

手上只有mysql,带到表中对应时间字段可以执行出来

cluster_log 这张表中 time字段是个varchar(32)类型,这么对比肯定不对

了解。要么用字符串比较,要么是强制转化成时间后比较

CREATE TABLE CLUSTER_LOG (
TIME VARCHAR(32) DEFAULT NULL,
TYPE VARCHAR(64) DEFAULT NULL,
INSTANCE VARCHAR(64) DEFAULT NULL,
LEVEL VARCHAR(8) DEFAULT NULL,
MESSAGE LONGTEXT DEFAULT NULL
) ENGINE=INNODB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin
这是CLUSTER_LOG的表结构,你把他当成普通表就行

这种限制可能是由数据库管理员或系统设置强制实施的,目的是为了控制对日志数据的访问和减少对实时函数的依赖,从而提高性能和安全性。

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