我正在尝试计算 MySQL 服务器中所有 SELECTS、UPDATES、INSERT 查询。主要想法是说,在一天结束时,“我们今天有 x 个查询,即 x1 个 select、x2 个 insert,等等”。
我该怎么做?
谢谢!!
答案1
MySQL 已经维护了内部计数器:
mysqladmin ext | grep -e 'Com_\(update\|select\|insert\)'
不需要日志文件/表/tcpdumping/maatkit。
答案2
当前的 MySQL 版本支持两种不同类型的查询日志:
首先,通用查询日志会跟踪 MySQL 服务器上执行的所有语句,包括 SELECT。但它速度慢、效率低,并且很容易破坏生产数据库的性能,因此请谨慎使用它。
根据您运行的 MySQL 版本,您应该使用“--log”选项或“--general-log”和“--general_log_file”选项,以启用通用查询日志并控制其写入位置。文档有更多详细信息:
- http://dev.mysql.com/doc/refman/5.1/en/query-log.html
- http://dev.mysql.com/doc/refman/5.1/en/log-tables.html
如果通用查询日志的运行时惩罚太高,您可以考虑二进制日志 (binlog) 是否可以满足您的需求。binlog 跟踪任何可以更新数据或架构的语句,但不跟踪 SELECT 等只读语句。但 binlog 确实很快且节省磁盘空间,还可以用于复制、备份/恢复等。
启用 binlog 的基本选项是“--log-bin”,还有一些其他相关选项可以精确控制其工作方式。“mysqlbinlog”实用程序(核心 MySQL 服务器安装的一部分)可以将 binlog 的二进制格式解析回 SQL 语句,您可以将其传送到用于汇总查询的任何脚本或程序(例如。mysqlbinlog <BIN_LOG_FILENAME> | <YOUR_SCRIPT_NAME>
有关更多信息,请参阅相关文档页面:
- (binlog 文档)http://dev.mysql.com/doc/refman/5.0/en/binary-log.html
- (mysqlbinlog 翻译实用程序文档)http://dev.mysql.com/doc/refman/5.0/en/mysqlbinlog.html
答案3
答案4
除了上述两种解决方案(MySQL 查询日志和mk-query-digest
),你可能需要看看MySQL 代理可用于记录发送至您的查询mysqld
。