MySQL 开启慢查询日志的方法

yizhihongxing

MySQL 慢查询日志是用来记录执行时间较长的 SQL 语句的。通过分析慢查询日志,可以找出性能问题并进行优化。本文将介绍如何开启 MySQL 的慢查询日志,并且会给出两个示例。

步骤一:编辑 MySQL 配置文件

首先,需要找到 MySQL 的配置文件 my.cnf 或者 my.ini。通常在 Linux 上,my.cnf 文件位于 /etc/mysql/ 目录中;Windows 上则位于 MySQL 安装目录。打开该文件,找到 [mysqld] 配置块,添加以下内容:

slow_query_log = 1
slow_query_log_file = /var/log/mysql/mysql-slow.log
long_query_time = 2
  • slow_query_log = 1:表示开启慢查询日志。0 表示关闭,默认为关闭状态。
  • slow_query_log_file:表示慢查询日志文件的存储路径。该路径必须有写权限。我们可以将日志文件保存在 /var/log/mysql/ 目录下。
  • long_query_time:表示执行时间达到多少秒的 SQL 查询会被记录到慢查询日志中。这里设置为 2 秒。

完成修改后,保存文件并重启 MySQL 服务,让设置生效。

步骤二:测试慢查询日志

为了测试慢查询日志是否生效,我们创建一张名为 users 的表,并向其中插入 100 万条数据:

CREATE TABLE users (
  id INT(11) NOT NULL AUTO_INCREMENT,
  name VARCHAR(50) NOT NULL,
  email VARCHAR(50) NOT NULL,
  PRIMARY KEY (id)
);

INSERT INTO users (name, email)
SELECT CONCAT('user', i), CONCAT('user', i, '@example.com')
FROM (SELECT 1 AS i UNION SELECT 2 UNION SELECT 3 UNION SELECT 4) sub1,
     (SELECT 1 AS i UNION SELECT 2 UNION SELECT 3 UNION SELECT 4) sub2,
     (SELECT 1 AS i UNION SELECT 2 UNION SELECT 3 UNION SELECT 4) sub3,
     (SELECT 1 AS i UNION SELECT 2 UNION SELECT 3 UNION SELECT 4) sub4;

接着,执行一个执行时间达到 5 秒的查询:

SELECT COUNT(*) FROM users u1, users u2, users u3, users u4, users u5;

我们可以通过以下命令检查慢查询日志文件的内容:

sudo tail /var/log/mysql/mysql-slow.log

可以看到输出结果如下:

# Time: 2021-09-06T08:05:42.543792Z
# User@Host: root[root] @ localhost []  Id:     3
# Query_time: 5.000064  Lock_time: 0.000119 Rows_sent: 1  Rows_examined: 1099511627776
SET timestamp=1630920342;
SELECT COUNT(*) FROM users u1, users u2, users u3, users u4, users u5;

可以看到我们执行的查询被记录到了慢查询日志中,并且查询时间超过了我们所设定的阈值。

示例二:手动记录慢查询

有时候我们需要手动记录某个查询语句到慢查询日志中,可以通过 MySQL 提供的 /*!50000 */ 注释来实现。

例如,我们想手动将下面这个查询加入到慢查询日志中:

SELECT * FROM users WHERE name LIKE '%john%';

只需要在该查询语句前加上 /*!50000 */ 注释:

/*!50000 SELECT * FROM users WHERE name LIKE '%john%'; */

接下来会将这个查询语句记录到慢查询日志中。

结束语

开启 MySQL 的慢查询日志有助于我们找出性能瓶颈,并进行优化。通过本文,你已经了解了如何开启慢查询日志,并且也学会了如何手动记录某个查询到日志中。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:MySQL 开启慢查询日志的方法 - Python技术站

(0)
上一篇 2023年5月19日
下一篇 2023年5月19日

相关文章

  • 详解使用Python写一个向数据库填充数据的小工具(推荐)

    下面详细讲解如何使用Python写一个向数据库填充数据的小工具。 1.准备工作 在开始编写代码之前,我们需要准备以下工具和环境: 安装好Python编译器(推荐使用Python3.x版本) 安装好Python的MySQL库(安装命令:pip install mysql-connector-python) 安装好MySQL数据库,并创建需要填充数据的数据表 2…

    database 2023年5月22日
    00
  • IDEA无法连接mysql数据库的6种解决方法大全

    IDEA无法连接mysql数据库的6种解决方法大全 问题描述 当使用IntelliJ IDEA开发Java项目时,连接MySQL数据库时可能会遇到无法连接的问题。此时,需要采取一些措施来解决问题。 以下是6种常见的解决方法: 方法一: 检查MySQL服务是否启动 首先,需要检查MySQL服务是否已经启动。可以在命令行中输入以下命令来检查: net start…

    database 2023年5月18日
    00
  • Linux Shell 生成随机数和随机字符串的方法示例

    下面我将详细讲解一下关于“Linux Shell 生成随机数和随机字符串的方法”的完整攻略。 生成随机数 有时我们需要生成随机数,可以使用 Shell 内置的 $RANDOM 变量。它可以返回一个介于0~32767之间的随机数。 下面是一个 $RANDOM 的示例: #!/bin/bash for i in {1..10} do echo "第 $…

    database 2023年5月22日
    00
  • springmvc+mybatis 做分页sql 语句实例代码

    下面我将为您详细讲解如何使用SpringMVC和MyBatis实现分页查询。 1. 创建分页类 在开始之前需要先创建一个分页类,用来存放分页查询所需的参数,如下: public class PageInfo { // 当前页码,默认为第一页 private int pageNum = 1; // 每页显示的记录数,默认为10 private int page…

    database 2023年5月21日
    00
  • php扩展redis链接失败,返回false

    刚开始接触redis,发现一直返回false,其实只要关闭防火墙就可以连接成功了。 关闭selinux操作   方法1:修改grub.conf将参数selinux=1修改为等于selinux=0,这个将比较测彻底的关闭它。   方法2:修改selinux配置文件/etc/selinux/config中的SELINUX参数修改为SELINUX=disabled…

    Redis 2023年4月11日
    00
  • mysql主从配置和galera集群

    mariadb主从 主从多用于网站架构,因为主从的同步机制是异步的,数据的同步有一定延迟,也就是说有可能会造成数据的丢失,但是性能比较好,因此网站大多数用的是主从架构的数据库,读写分离必须基于主从架构来搭建 mysql主从配置 yum配置 [mariadb] name=MariaDB baseurl=http://mirrors.ustc.edu.cn/ma…

    MySQL 2023年4月16日
    00
  • swagger+jwt+shiro+redis

    swagger+jwt+shiro+redis 一、前言 最近在项目中想整合swagger+jwt+shiro+redis过程中遇到诸多问题和困难,现重新写一个demo并记录解决步骤。存在的问题: shiro默认的拦截跳转都是跳转url页面,而前后端分离后,后端并无权干涉页面跳转。 shiro默认的登录拦截校验机制是使用的session。 参考资料:Spri…

    Redis 2023年4月11日
    00
  • MySQL学习之数据库备份详解

    MySQL学习之数据库备份详解 什么是数据库备份? 数据库备份就是将数据库中的数据和结构进行复制并保存在另一个地方,以便在需要的时候恢复数据。 为什么要进行数据库备份? 因为数据库中的数据是极其重要和珍贵的,一旦出现了数据丢失或者数据库崩溃等问题,就会对业务运营产生非常大的影响,甚至毁掉整个业务。 因此进行数据库备份是每一个数据库管理员必须要掌握的技巧之一。…

    database 2023年5月21日
    00
合作推广
合作推广
分享本页
返回顶部