如何查询通用日志记录的某时间段内执行的DDL语句(CREATE/ALTER/DROP)
筛选通用日志中指定时间段DDL语句的方法
注意:操作前请确认通用日志的采集范围为全量查询,若配置了过滤规则、仅记录指定账号操作,筛选结果可能存在遗漏。
场景1:通用日志存储在MySQL系统表 mysql.general_log 中
直接执行以下SQL查询即可,注意替换语句中的时间范围为你需要的实际查询区间:
SELECT event_time, user_host, argument FROM mysql.general_log WHERE event_time BETWEEN '2024-01-01 00:00:00' AND '2024-01-07 23:59:59' AND command_type = 'Query' AND ( UPPER(TRIM(argument)) LIKE 'CREATE%' OR UPPER(TRIM(argument)) LIKE 'ALTER%' OR UPPER(TRIM(argument)) LIKE 'DROP%' ) ORDER BY event_time ASC;
相关参数说明:
UPPER(TRIM(argument))用于兼容SQL语句开头带空格、关键词大小写不统一的场景- 若需要排除系统自动执行的内置操作,可额外增加
user_host过滤条件剔除系统账号、运维账号的操作记录
场景2:通用日志以文本文件形式存储
Linux/macOS环境下可以用awk+grep组合命令精准筛选,示例如下:
# 先替换时间范围为你需要的查询区间 awk '$1 >= "2024-01-01" && $1 <= "2024-01-07" && $2 >= "00:00:00" && $2 <= "23:59:59"' /var/log/mysql/general.log | grep -iE '^( |\t)*(CREATE|ALTER|DROP)'
相关参数说明:
-i参数表示忽略大小写,兼容SQL关键词大小写混写的情况- 命令默认适配通用日志前两列为日期、时间的标准格式,若你的日志时间格式有自定义调整,需对应修改
awk的字段匹配规则 - Windows环境可以直接用文本编辑器的全局筛选功能,先匹配时间范围再搜索三类关键词即可
内容的提问来源于stack exchange,提问作者c_minn
相关产品推荐
相关产品推荐

