在 mac 上找不到 mysql 慢速查询日志文件

cannot find mysql slow query log file on mac

我试图在 mysql 上启用 slow_query_log,但我在 mac 上找不到它。 我在 MySQL 5.7 Documentation 中读到

By default, the server writes files for all enabled logs in the data directory.

当我在 mysql shell 中写入 show variables like '%slow_query%'; 时,我看到以下内容:

但我在数据目录中看不到 McBook-Pro-6-slow.log。这是我在数据目录中看到的所有内容:

  1. 有人可以告诉我为什么我看不到慢日志文件吗?
  2. 为了启用 slow_query_log,我在这里读到我应该将 slow-query-log=1 添加到 my.cnf。在这里,我的问题是我不确定 Mac 上的 mysql 配置文件在哪里。我在 usr/local/mysql/support-files/ 中找到了一个 my-default.cnf,在 /etc 中找到了另一个 my.cnf 文件。我应该修改哪一个??

谢谢,

参考这个 Whosebug 问题 MySQL 'my.cnf' location?,它与 Mac OS 有关。如您所见,位置的排列很多,通常由不同的发行版和 MAMP XAMP WAMP 捆绑包和 Home Brew 混合在一起。一个盒子上有 2 个 mysql 守护进程并且自己都不知道的情况并不少见。

这就是为什么在评论中我建议查看 select @@basedir 的输出以查找 my.ini(Windows)或 my.cnf(Linux/Mac).这并不是说配置文件会在那里,但如果存在配置文件,那应该是在那里。没有它,将使用内置的默认值。通常会有一个存根,一个建议的文件,以不同的方式命名(如 my-default),等待您的调整和重命名或复制到适当的文件名 my.inimy.cnf.

还有一个名为 slow_query_log_file 的系统变量,如果通过 SELECT @@slow_query_log_file; 设置它的值可见。现在对我来说它的值为 GUYSMILEY-slow.log 因为我没有在我的 ini 中设置它 (Windows) 并且它默认为计算机名 +"-slow.log"。

这是没有路径的文件名。文件实际写入的位置在 datadir 中,在 select @@datadir;.

的输出中看到

在我的系统上这意味着(通过 @@basedir

C:\Program Files\MySQL\MySQL Server 5.6\my.ini 

将有一个设置,最终写入此绝对路径中的慢日志文件(由 @@datadir 帮助):

C:\ProgramData\MySQL\MySQL Server 5.6\data\GUYSMILEY-slow.log

并且该日志文件中的片段可能显示如下内容:

Ini 和 cnf 更改需要 MySQL 守护程序重新启动。在该配置文件中,有一个类似于 (my 5.6)

的部分
[mysqld]
basedir=C:\Program Files\MySQL\MySQL Server 5.6\
datadir=C:\ProgramData\MySQL\MySQL Server 5.6\Data\
port=3306
log_warnings = 2

和(我的 5.7)

[mysqld]
basedir=C:\Program Files\MySQL\MySQL Server 5.7\
datadir=C:\ProgramData\MySQL\MySQL Server 5.7\Data\
port=3307
log_error_verbosity=2

以上内容在 [mysqld] 部分中用于设置。我的建议是使用 log_error_verbosity(5.7.2 及更高版本)或类似的无害设置来玩这个部分,保存它。重新启动守护程序并确定变量是否(如 Rick James 所说的设置,因为大多数实际上是不可动态设置的)。因此,select @@log_error_verbosity(5.7.2 及更高版本)的健全性检查可以确认更改已被接受。如果是,宾果游戏,你做对了。

手册页 Server System Variables 描述了变量(设置)以及它们是否可以在配置文件通过命令加载后动态 set/changed。守护程序重新启动时将恢复动态更改。

动态更改变量的方式可能如下所示:

SET GLOBAL log_error_verbosity=2;

同样,只有某些变量在某些 MySQL 版本中可用,例如以上,在旧版本中不可用。

还要注意服务器上同时存在 MySQL 运行 的多个版本。我有 5.6.31 和 5.7.14。要通过命令行工具访问不同的一个,请使用类似 -P 3307 开关的东西指向端口 3307 上的一个 运行。注意大写 P 而不是小写(这意味着提示输入密码)。

判断是否有多个实例运行。我使用

等端口检查
sudo netstat -tulpn  (Linux)
netstat -aon | more  (Windows, the top part, State=LISTENING)

不幸的是,这些类型的更改和反复试验需要时间并且非常令人沮丧。抱歉,我无法快速轻松地回答所有情况。

附录

此处与评论相关的注释。在下面,w-x-y-z 是经过编辑的 IP 地址。

On a Linux box (amazon ec2 redhat btw):
select @@slow_query_log;
-- 0 (so it is turned off)
SELECT @@slow_query_log_file;
-- /var/lib/mysql/ip-w-x-y-z-slow.log
select @@version;
-- 5.7.14

set global slow_query_log=1;
Error Code: 1227. Access denied; you need (at least one of) the SUPER privilege(s) for this operation   0.094 sec

(ok I was in MySQL Workbench as a dummied down user, off to do it as root via MySQL cmd line ...
mysql> set global slow_query_log=1;
Query OK, 0 rows affected (0.01 sec)

mysql> select @@slow_query_log;
+------------------+
| @@slow_query_log |
+------------------+
|                1 |
+------------------+
1 row in set (0.00 sec)

btw Workbench user can confirm the above `1`

at shell as linux user:
[ec2-user@ip-w-x-y-z ~]$ cd /var/lib/mysql
[ec2-user@ip-w-x-y-z mysql]$ sudo ls -la
(there were many files, only one needed to show you below)
-rw-r-----.  1 mysql mysql      179 Sep 19 01:47 ip-w-x-y-z-slow.log

[ec2-user@ip-w-x-y-z mysql]$ sudo vi ip-w-x-y-z-slow.log

(Header stub, the entire contents, no slow queries yet, log seen below):

/usr/sbin/mysqld, Version: 5.7.14 (MySQL Community Server (GPL)). started with:
Tcp port: 3306  Unix socket: /var/lib/mysql/mysql.sock
Time                 Id Command    Argument

SHOW VARIABLES LIKE 'log_output'; 验证它设置为 FILEFILE,TABLE.