管理 MySQL 慢查询日志
MySQL 数据库服务器可以将执行时间超过配置阈值的查询记录在 MySQL 慢查询日志中,这些日志有助于轻松排查与应用程序缓慢相关的问题。通常情况下,MySQL 数据库查询的阈值为 1 秒,执行时间超过 1 秒的查询将被记录为慢查询。
Site24x7 全面的日志管理解决方案默认支持 MySQL 慢查询日志的监控。它根据主机、查询时间、锁定时间、发送行数和检查行数等字段对日志进行分类,让您可以通过这些日志快速进行故障排除。您还可以在仪表板中根据查询时间、锁定时间、检查行数和返回行数等不同参数查看前 10 条慢查询。
启用 MySQL 慢查询日志
登录安装了 MySQL 数据库的机器。从 Linux 机器打开终端,或从 Windows 机器打开命令提示符,然后执行以下命令。
对于 MySQL 5.1.6 及以上版本:
set global slow_query_log = 'ON';
set global slow_query_log_file ='/var/log/mysql/slow-query.log';
set global long_query_time = 10; (Unit seconds)
FLUSH LOGS;
Restart MySQL.
对于 MySQL 5.1.6 以下版本:
编辑 /etc/my.cnf 文件,并在 [mysqld] 部分添加以下行。
您可以在终端中使用 vi 命令直接编辑该文件。
log-slow-queries=/var/log/mysql/slow-query.log
long_query_time=20
日志管理入门
- 登录您的 Site24x7 账户。
- 在运行 MySQL 数据库的机器上下载并安装 Site24x7 服务器监控代理(Windows | Linux)。
- 进入 Admin > AppLogs > Log Profile,点击添加日志配置文件。
- 配置文件名称: 为您的日志配置文件输入名称。
- 选择日志类型: 从下拉菜单中选择 MySQL 慢查询日志。
- 日志来源: 从下拉菜单中选择本地文件。
- 搜索日志的文件列表: 添加 /var/log/mysql/slow-query.log。该路径基于 MySQL 中的配置。
- 选择服务器,点击保存。
日志模式
# User@Host: $User$ @ [$Host$]<NewLine># Query_time: $QueryTime:decimal$ Lock_time: $LockTime:decimal$ Rows_sent: $RowsSent:number$ Rows_examined: $RowsExamined:number$<NewLine>!use $Database$;<NewLine>!SET timestamp=$DateTime:date:unix$;<NewLine>$Query$;!<NewLine>$NormalizedQuery:word$!
这是 Site24x7 根据下方示例为解析 MySQL 慢查询日志定义的默认模式。
日志类型定义中有两个独立字段,分别为 Query 和 NormalizedQuery。
其中,Query 字段包含实际的原始查询,而 NormalizedQuery 字段包含条件值被掩码(XX)处理后的查询。
默认情况下,Query 字段将在代理端被忽略,因为它可能包含用户名和密码等敏感信息。您可以通过在字段配置中将在源端忽略此字段旁的切换按钮设置为否来收集原始查询。
日志示例
# User@Host: test[test] @ [192.168.1.2]<NewLine># Query_time: 31.896695 Lock_time: 0.000065 Rows_sent: 1023 Rows_examined: 196182<NewLine>use db100db;<NewLine>SET timestamp=1487758318;<NewLine>select USER_ID, EMAIL_ID from USER_ACCOUNT where USER_ID IN ( select USER_ID from USER_MAPPER where ID IN ( select RESOURCEID from appdetails where environment regexp '(.*)Microsoft Windows NT 5.2|Microsoft Windows NT 5.1|Microsoft Windows NT 5.0|Microsoft Windows NT 6.0(.*)'));
# User@Host: test[test] @ [192.168.1.2]<NewLine># Query_time: 31.896695 Lock_time: 0.000065 Rows_sent: 1000 Rows_examined: 196182<NewLine>use db100db;<NewLine>SET timestamp=1487758318;<NewLine>select USER_ID, EMAIL_ID from USER_ACCOUNT where USER_ID IN ( select USER_ID from USER_MAPPER where ID IN ( select RESOURCEID from appdetails where environment regexp '(.*)Microsoft Windows NT 5.2|Microsoft Windows NT 5.1|Microsoft Windows NT 5.0|Microsoft Windows NT 6.0(.*)'));
# User@Host: test[test] @ [192.168.1.2]<NewLine># Query_time: 31.896695 Lock_time: 0.000065 Rows_sent: 560 Rows_examined: 196182<NewLine>use db100db;<NewLine>SET timestamp=1487758318;<NewLine>select USER_ID, EMAIL_ID from USER_ACCOUNT where USER_ID IN ( select USER_ID from USER_MAPPER where ID IN ( select RESOURCEID from appdetails where environment regexp '(.*)Microsoft Windows NT 5.2|Microsoft Windows NT 5.1|Microsoft Windows NT 5.0|Microsoft Windows NT 6.0(.*)'));
上面的示例日志可分解为以下字段,每个字段将从这里获取对应的值,然后上传到 Site24x7。
| 字段名称 | 字段值 |
|---|---|
| User | test[test] |
| Host | 192.168.1.2 |
| Query time | 31.896695 |
| Lock time | 0.000065 |
| Rows sent | 1023 |
| Rows examined | 196182 |
| Database used | 100db |
| Timestamp | 1487758318 |
| Query | select USER_ID, EMAIL_ID from USER_ACCOUNT where USER_ID IN ( select USER_ID from USER_MAPPER where ID IN ( select RESOURCEID from appdetails where environment regexp '(.*)Microsoft Windows NT 5.2 |Microsoft Windows NT 5.1|Microsoft Windows NT 5.0|Microsoft Windows NT 6.0(.*)')) |
MySQL 慢查询日志仪表板
AppLogs 会为每种日志类型创建专属仪表板,并默认显示一些小组件。以下是 MySQL 慢查询日志仪表板中可用的小组件列表:
- 慢查询
- 最大查询时间
- 最大检查行数
- 最大发送行数
- 按锁定时间排序的前 10 条慢查询
- 随时间变化的慢查询
- 热门用户
- 热门主机
- 按查询时间排序的前 10 条慢查询
- 按锁定时间排序的前 10 条慢查询
- 按检查行数排序的前 10 条慢查询
- 按发送行数排序的前 10 条慢查询
- 前 10 个数据库
除默认小组件外,您保存的搜索也会自动添加到仪表板中。

