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

时间:2016-09-18 06:58:13

标签: mysql macos mysql-slow-query-log

我正在尝试在mysql上启用slow_query_log,但我无法在我的mac上找到它。 我在MySQL 5.7 Documentation中读到"

  

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

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

enter image description here

但我无法在数据目录中看到McBook-Pro-6-slow.log。以下是我在数据目录中可以看到的所有内容:

enter image description here

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

2 个答案:

答案 0 :(得分:2)

请参阅此与Mac OS相关的Stackoverflow问题MySQL 'my.cnf' location?。正如您所看到的,地点的排列很多,通常由不同的发行版和MAMP XAMP WAMP捆绑和Home Brew混合在一起。在一个盒子上有两个mysql守护进程并且甚至不知道它的情况并不少见。

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

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

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

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

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

会有一个设置,该设置以写入此绝对路径的slowlog文件结尾(由@@datadir帮助):

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

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

enter image description here

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及以上)或类似的无害设置来玩这个部分,保存它。重启deamon并确定是否变量(因为Rick James会调用设置,因为大多数都不能动态设置)。因此,对select @@log_error_verbosity(5.7.2及更高版本)的完整性检查可以确认更改已被取消。如果是,宾果游戏,那你做得对。

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

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

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

答案 1 :(得分:1)

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