云数据库RDS MySQL版实例中实时查询慢日志slow_log的方法

概述

本文主要介绍在使用云数据库RDS MySQL版实例时,实时查询慢日志slow_log的方法。

用户告知

  • 本文仅阐述实时查询slow_log的方法,文中的操作示例未通过where语句进行条件过滤,因此属于全表查询。建议您在操作时,通过where语句增加条件过滤,避免慢查询结果太多导致查询时间长等情况。
  • 云数据库RDS MySQL v5.5版实例不支持直接查询慢日志slow_log。您可以通过管理控制台查询慢日志,详情请参见查看慢日志明细通过控制台查询慢日志的章节。

详细信息

云数据库RDS MySQL版实例的版本不同,对应的查询方式不同,详情如下。

RDS MySQL v5.6版本

实时查询慢日志slow_log的步骤如下:

  1. 登录您的MySQL实例。关于如何登录MySQL实例,请参见连接MySQL实例
  2. 执行以下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字符集,操作步骤如下:

  1. 登录您的MySQL实例。关于如何登录MySQL实例,请参见连接MySQL实例
  2. 执行以下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实例的存储空间。

  1. 登录您的MySQL实例。关于如何登录MySQL实例,请参见连接MySQL实例
  2. 执行以下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为例。您可以根据现场实际情况调整该表的名称和所在数据库。
  3. 执行以下SQL语句,将slow_log表的数据导入slow_log_tmp表。
    INSERT INTO test.slow_log_tmp SELECT * FROM mysql.slow_log;
  4.  执行以下SQL语句,在新建的slow_log_tmp表查询慢日志slow_log。
    SELECT * FROM test.slow_log_tmp;

适用于

  • 云数据库RDS MySQL版