Author:Walker@MS509

项目地址:
https://github.com/J0hnWalker/MysqlMonitor

前言

网上其实有很多类似的MysqlSql语句监控工具,肯定有人问为什么要造轮子。
很简单,因为在平时的代码审计中,需要一个跨平台友好、功能简单实用、并且可以支持监控错误SQL语句的小工具。
拒绝臃肿,拒绝依赖多余的工具(比如tail.exe)。

实现

我所知道的有两种方式来做到Mysql执行记录监控

  1. 简单的方式,打开mysql general_log,实现类似tail的功能,循环读取日志文件。

  2. 专业的方式,建立一个proxy,监测client与mysql的通信。

此工具选择第一种简单的方式

功能

  1. 输出Mysql所有的SQL语句执行记录,关键点循环读取日志文件利用
    org.apache.commons.io.input Tailer类https://commons.apache.org/proper/commons-io/apidocs/org/apache/commons/io/input/Tailer.html
  2. 高亮显示报错语句,这点在审计中寻找注入点很有必要,具体实现利用

druid SQL语法校验https://github.com/alibaba/druid/wiki/SQL-Parser

使用

mysql 高版本 general_log 不会记录执行错误的SQL语句到日志,需要在配置文件中[mysqld]中设置log-raw=1

本地测试了三个mysql版本

  • mysql5.5 不需要log-raw

  • mysql7.5 需要log-raw

  • mysql8.0.16 需要log-raw

mysql≥ 8.0.19 可以通过系统变量log_raw设置

**log_raw**

**正常语句**

**高亮报错语句**