我正在尝试在mysql上启用slow_query_log,但我无法在我的mac上找到它。 我在MySQL 5.7 Documentation中读到"
默认情况下,服务器为数据目录中的所有已启用日志写入文件。
当我在mysql shell中编写show variables like '%slow_query%';
时,我看到以下内容:
但我无法在数据目录中看到McBook-Pro-6-slow.log
。以下是我在数据目录中可以看到的所有内容:
slow-query-log=1
添加到my.cnf。在这里,我的问题是我不确定我的Mac上的mysql配置文件在哪里。我在my-default.cnf
中找到了usr/local/mysql/support-files/
,在my.cnf
找到了另一个/etc
文件。我应该修改哪一个?? 谢谢,
答案 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.ini
或my.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
并且该日志文件中的片段可能会显示如下内容:
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';
验证其是否已设置为FILE
或FILE,TABLE
。