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

san*_*lto 5 mysql

我正在尝试计算 MySQL 服务器中的每个 SELECTS、UPDATES、INSERTs 查询。主要思想是说,在一天结束时,“我们今天有 x 个查询,x1 个选择,x2 个插入等”。

我该怎么做?

谢谢!!

Rya*_*nch 7

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

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

根据您运行的 MySQL 版本,您应该使用 '--log' 选项或 '--general-log' 和 '--general_log_file' 选项,以启用常规查询日志并控制在哪里它写到。文档有更多细节:

如果通用查询日志的运行时间惩罚太高,您可以考虑二进制日志(binlog)是否可以满足您的需求。binlog 跟踪任何可以更新数据或架构的语句,但不会跟踪诸如 SELECT 之类的只读语句。但是 binlog 真的很快而且磁盘效率很高,它也可以用于复制、备份/恢复等。

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


小智 5

MySQL 已经维护了内部计数器:

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

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