0

我正在尝试在 mysql 上启用 slow_query_log,但在我的 mac 上找不到它。我在MySQL 5.7 文档中读到“

默认情况下,服务器将所有已启用日志的文件写入数据目录中。

当我在 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 配置文件在哪里。我在 .in 中找到了一个my-default.cnfinusr/local/mysql/support-files/和另一个my.cnf文件/etc。我应该修改哪一个??

谢谢,

4

2 回答 2

2

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

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

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

那是没有路径的文件名。文件实际写入的位置在datadir.seen 的输出中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 守护程序重新启动。在该配置文件中有一个类似于(我的 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 将调用设置,因为大多数确实不是动态可设置的)。因此(5.7.2 及更高版本)的健全性检查select @@log_error_verbosity可以确认更改已被拾取。如果是,宾果游戏,你做对了。

手册页服务器系统变量描述了变量(设置)以及它们是否可以在通过命令加载配置文件后动态设置/更改。重新启动守护程序时会恢复动态更改。

如何动态更改变量可能如下所示:

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
于 2016-09-18T15:23:39.770 回答
1

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

于 2016-09-18T23:45:14.747 回答