【发布时间】:2011-01-03 15:06:04
【问题描述】:
有什么方法可以监控/记录 MySQL 用户和他/她运行的查询?我不得不使用以下查询关闭常规日志:
SET GLOBAL general_log = 'OFF';
因为否则日志文件将无法被文本编辑器处理。我正在寻找一种方法来为我想要监视的某些用户打开此日志,但它似乎并没有那样工作。
还有其他方法可以了解特定用户在我的数据库上运行的所有内容吗?
提前致谢。
【问题讨论】:
有什么方法可以监控/记录 MySQL 用户和他/她运行的查询?我不得不使用以下查询关闭常规日志:
SET GLOBAL general_log = 'OFF';
因为否则日志文件将无法被文本编辑器处理。我正在寻找一种方法来为我想要监视的某些用户打开此日志,但它似乎并没有那样工作。
还有其他方法可以了解特定用户在我的数据库上运行的所有内容吗?
提前致谢。
【问题讨论】:
我可以推荐几种方法。
SELECT * FROM information_schema.PROCESSLIST WHERE USER="someuser"; 现在由您决定使用什么。编写一个 cronjob (linux) 将其存储到一个文件中或编写一个 MySQL 事件将其输入到一个 mysql 表中。 但是如果你不习惯写命令行linux命令你可以使用mk-query-digest甚至可以配置自定义监控工具如nagios、cacti等。但我个人更喜欢MONyog,两者兼得1 和 2 完美,最重要的是它有一个 GUI。
【讨论】:
details on logging administration
MySQL Server 可以创建许多不同的日志文件来帮助您查看正在发生的活动。请参阅第 5.2 节,“MySQL 服务器日志”。但是,您必须定期清理这些文件,以确保日志不会占用太多磁盘空间。
在其他系统上,您必须自己安装一个短脚本,从 cron(或其等效项)开始处理日志文件。
您可以通过刷新日志来强制 MySQL 开始使用新的日志文件。当您发出 FLUSH LOGS 语句或执行 mysqladmin flush-logs、mysqladmin refresh、mysqldump --flush-logs 或 mysqldump --master-data 命令时,会发生日志刷新。
【讨论】:
看看 maatkit 的 mk-query-digest 工具,它或许可以做一些你想要的事情。至少,如果您必须再次启用它,它应该能够帮助您解析通用查询日志:
【讨论】: