我如何跟踪我的MySQL服务器中的所有查询?

我试图计数我的MySQL服务器中的每个SELECTS,UPDATES,INSERTs查询。 主要的想法是,在一天结束的时候,“我们今天有x个查询,是x1select,x2插入等”。

我该怎么做?

谢谢!!

MySQL已经维护内部计数器:

mysqladmin ext | grep -e 'Com_\(update\|select\|insert\)'

不需要日志文件/表/ tcpdumping / maatkit。

当前的MySQL版本支持两种不同的查询日志:

首先,通用查询日志跟踪在MySQL服务器上执行的所有语句,包括SELECTs。 但是它速度慢,效率低下,并且很容易杀死生产数据库的性能,所以要小心。

根据你正在运行的是哪个版本的MySQL,你应该使用'–log'选项或'–general-log'和'–general_log_file'选项来启用一般查询日志和控制它写入。 该文件有更多的细节:

如果一般查询日志的运行时间损失过高,您可以考虑二进制日志(binlog)是否可以满足您的需求。 二进制日志跟踪任何可以更新数据或模式的语句,但不包括像SELECT这样的只读语句。 但是二进制日志实际上是非常快速和高效的磁盘,它也可以用于复制,备份/恢复等。

启用binlog的基本选项是'–log-bin',还有一些其他相关的选项可以控制它的工作方式。 'mysqlbinlog'实用程序(核心MySQL服务器安装的一部分)可以将二进制日志的二进制格式parsing回SQL语句中,您可以将它们传送到用于汇总查询的任何脚本或程序(例如, mysqlbinlog <BIN_LOG_FILENAME> | <YOUR_SCRIPT_NAME> 。请参阅相关文档页面了解更多信息:

日志都很好,很漂亮 – Irosa和Ryan提到的答案很棒,但是你可以完全被动地做到这一点,而不需要启用日志loggingfunction。 看看maatkit的 mk-query-digest 。 它不仅可以分析mysql日志,还可以分析使用tcpdump捕获的stream量。 和'免费'它会给你很好的查询types/执行时间等细分

编辑my.cnf并添加

login= /path/到/不pipe/文件/ you.want

并重新启动MySQL。

您将find您指定的文件中logging的所有查询。

除了上面提到的两个解决scheme(MySQL查询日志和mk-query-digest )之外,您可能还想看一下可以用来logging发送到您的mysqld的查询的MySQL代理 。