在 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
。这是我在数据目录中看到的所有内容:
- 有人可以告诉我为什么我看不到慢日志文件吗?
- 为了启用 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.ini
或 my.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';
验证它设置为 FILE
或 FILE,TABLE
.
我试图在 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
。这是我在数据目录中看到的所有内容:
- 有人可以告诉我为什么我看不到慢日志文件吗?
- 为了启用 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.ini
或 my.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';
验证它设置为 FILE
或 FILE,TABLE
.