您有一个生产数据库服务器,并且您无法启用查询日志记录...那么您如何看待针对数据库执行的查询?

答案:使用修改后的网络嗅探器解析MySQL数据包并对其进行解码。你必须做一点编译,但这是值得的。请注意,这通常不适用于本地连接,但欢迎您尝试。

首先,您需要安装libpcap-dev,它是允许应用程序嗅探网络数据包的开发库。

sudo apt-get install libpcap-dev

现在让我们创建一个目录,下载源代码并进行编译

mkdir mysqlsniffer

cd mysqlsniffer

wget hackmysql.com/code/mysqlsniffer.tgz

tar xvfz mysqlsniffer.tgz

gcc -O2 -lpcap -o mysqlsniffer mysqlsniffer.c packet_handlers.c misc.c

此时,我们在源目录中有一个名为mysqlsniffer的闪亮新可执行文件。您可以将它复制到任何您喜欢的地方(路径中的某个地方会很有用)

要运行mysqlsniffer,您需要指定MySQL正在侦听的网络接口。对我来说,这是eth0。

sudo /path/to/mysqlsniffer eth0

大量的东西开始飞过...让我们过滤掉它,这样我们就可以得到查询而不是所有多余的数据。

$ sudo /path/to/mysqlsniffer –no-mysql-hdrs eth0 | grep COM_QUERY

192.168.73.1.2622 > server: COM_QUERY: SELECT @@sql_mode192.168.73.1.2622 > server: COM_QUERY: SET SESSION sql_mode=”192.168.73.1.2622 > server: COM_QUERY: SET NAMES utf8192.168.73.1.1636 > server: COM_QUERY: SELECT @@SQL_MODE192.168.73.1.1636 > server: COM_QUERY: SHOW FULL COLUMNS FROM `db2842_howto`.`wp_users`

啊,现在我们有...各种查询信息,无需重启MySQL。

以下是该命令的完整选项:

用法:mysqlsniffer [OPTIONS] INTERFACE

选项:-port N在端口号N上侦听MySQL(默认为3306)-verbose显示额外的数据包信息-tcp-ctrl显示TCP控制包(SYN,FIN,RST,ACK)-net-hdrs显示主要的IP和TCP标头值-no-mysql-hdrs不显示MySQL头(包ID和长度)-state显示状态-v40 MySQL服务器是4.0版-dump以十六进制转储所有数据包-help打印此

原始源代码和更多信息:http://hackmysql.com/mysqlsniffer

如果您在开发服务器上运行,那么打开查询日志记录会更容易。

重要提示:
编辑点评: