如何排除 MySQL 查询故障

在某些数据库系统中,包括MySQL,查询陈述必须以半栏(;)结束,以便查询完成,如下示例中所示:

1SHOW * FROM table_name;

如果您未能在查询的末尾包含一个半栏,请求将继续在新行,直到您通过输入一个半栏并按输入来完成查询。

一些用户可能会发现他们的查询非常缓慢. 找出哪个查询声明导致了放缓的方法之一是启用并查看MySQL的缓慢查询日志. 要做到这一点,请打开您的mysqld.cnf文件,用于配置MySQL服务器的选项。

1sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf

滚动文件,直到你看到以下行:

1[label /etc/mysql/mysql.conf.d/mysqld.cnf]
2. . .
3#slow_query_log         = 1
4#slow_query_log_file    = /var/log/mysql/mysql-slow.log
5#long_query_time = 2
6#log-queries-not-using-indexes
7. . .

这些被评论的指令为慢查询日志提供了MySQL的默认配置选项,具体来说,以下是它们中的每一个要做的事情:

  • slow-query-log: 将此设置为 1 允许慢查询日志。
  • slow-query-log-file: 这定义了 MySQL 会登录任何慢查询的文件。 在这种情况下,它指向 /var/log/mysql-slow.log 文件。
  • long_query_time: 通过将此指令设置为 2,它配置 MySQL 来登录需要超过 2 秒的时间的任何查询。
  • log_queries_notusing_indexes: 这也告诉 MySQL 登录没有索引的任何查询到 /var/log/mysql-slow.log 文件。 这种设置不需要

通过删除领先的磅符号(#)来消除这些行中的每一行。

1[label /etc/mysql/mysql.conf.d/mysqld.cnf]
2. . .
3slow_query_log = 1
4slow_query_log_file = /var/log/mysql-slow.log
5long_query_time = 2
6log_queries_not_using_indexes
7. . .

<$>[注] 注: 如果您正在运行MySQL 8+,这些评论的行将不会在mysqld.cnf文件默认情况下。

1[label /etc/mysql/mysql.conf.d/mysqld.cnf]
2. . .
3slow_query_log = 1
4slow_query_log_file = /var/log/mysql-slow.log
5long_query_time = 2
6log_queries_not_using_indexes

美元

启用慢查询日志后,保存并关闭文件,然后重新启动 MySQL 服务:

1sudo systemctl restart mysql

有了这些设置,您可以通过查看缓慢查询日志来找到有问题的查询陈述。

1sudo less /var/log/mysql_slow.log

一旦您确定了导致放缓的查询,您可能会在 如何在VPS上优化MySQL和MariaDB中的查询和表上找到我们的指南,以帮助优化它们。

此外,MySQL还包含了EXPLAIN声明,该声明提供了有关MySQL如何执行查询的信息。

对于了解基本查询结构的帮助,请参阅我们的 介绍MySQL查询

Published At
Categories with 技术
comments powered by Disqus