概述
本文主要介绍在使用云数据库RDS MySQL版实例时,实时查询慢日志slow_log的方法。
用户告知
- 本文仅阐述实时查询slow_log的方法,文中的操作示例未通过where语句进行条件过滤,因此属于全表查询。建议您在操作时,通过where语句增加条件过滤,避免慢查询结果太多导致查询时间长等情况。
- 云数据库RDS MySQL v5.5版实例不支持直接查询慢日志slow_log。您可以通过管理控制台查询慢日志,详情请参见查看慢日志明细中通过控制台查询慢日志的章节。
详细信息
云数据库RDS MySQL版实例的版本不同,对应的查询方式不同,详情如下。
RDS MySQL v5.6版本
实时查询慢日志slow_log的步骤如下:
- 登录您的MySQL实例。关于如何登录MySQL实例,请参见连接MySQL实例。
- 执行以下SQL语句,直接查询慢日志slow_log。
SELECT * FROM mysql.slow_log;
RDS MySQL v5.7版本和RDS MySQL v8.0版本
RDS MySQL v5.7版本和RDS MySQL v8.0版本中,慢日志slow_log表的sql_text列是blob类型。在查询时需要进行转换,操作方法有以下两种。
查询时通过CONVERT方法转换sql_text列的类型
查询慢日志slow_log时,通过CONVERT方法转换sql_text列为UTF-8字符集,操作步骤如下:
- 登录您的MySQL实例。关于如何登录MySQL实例,请参见连接MySQL实例。
- 执行以下SQL语句,查询慢日志slow_log。
SELECT start_time, user_host, query_time, lock_time, rows_sent, rows_examined, db, CONVERT(sql_text USING utf8) FROM mysql.slow_log;
通过中间表导入slow_log表的数据
创建一个UTF-8字符集的slow_log_tmp表,并设定sql_text列为varchar类型,导入slow_log表数据后进行查询。
说明:此方法等同于备份slow_log表,RDS不会自动清理新创建的slow_log_tmp表。因此,此方法会占用RDS实例的存储空间。
- 登录您的MySQL实例。关于如何登录MySQL实例,请参见连接MySQL实例。
- 执行以下SQL语句,在其他数据库下创建一个UTF-8字符集的slow_log_tmp表。创建该表时,设定sql_text列为varchar类型,其他列与slow_log表一致。
CREATE TABLE `test`.`slow_log_tmp` (
`start_time` timestamp(6) NOT NULL DEFAULT CURRENT_TIMESTAMP(6) ON UPDATE CURRENT_TIMESTAMP(6),
`user_host` mediumtext NOT NULL,
`query_time` time(6) NOT NULL,
`lock_time` time(6) NOT NULL,
`rows_sent` int(11) NOT NULL,
`rows_examined` int(11) NOT NULL,
`db` varchar(512) NOT NULL,
`last_insert_id` int(11) NOT NULL,
`insert_id` int(11) NOT NULL,
`server_id` int(10) unsigned NOT NULL,
`sql_text` varchar(2000) NOT NULL,
`thread_id` bigint(21) unsigned NOT NULL
) ENGINE=CSV DEFAULT CHARSET=utf8 COMMENT='Slow log tmp';说明:本文在test数据库新建名为slow_log_tmp为例。您可以根据现场实际情况调整该表的名称和所在数据库。
- 执行以下SQL语句,将slow_log表的数据导入slow_log_tmp表。
INSERT INTO test.slow_log_tmp SELECT * FROM mysql.slow_log;
- 执行以下SQL语句,在新建的slow_log_tmp表查询慢日志slow_log。
SELECT * FROM test.slow_log_tmp;
适用于
-
云数据库RDS MySQL版
文档内容是否对您有帮助?