确定正在使用哪个MySQL配置文件


Answers:


60

如果您使用的是Linux,请使用来启动“ mysqld” strace,例如 strace ./mysqld

在所有其他系统调用中,您将发现类似以下内容:

stat64("/etc/my.cnf", 0xbfa3d7fc)       = -1 ENOENT (No such file or directory)
stat64("/etc/mysql/my.cnf", {st_mode=S_IFREG|0644, st_size=4227, ...}) = 0
open("/etc/mysql/my.cnf", O_RDONLY|O_LARGEFILE) = 3

因此,如您所见,.it列出了它尝试使用并最终使用的.cnf文件。


9
以及如何在运行的系统上做到这一点而又不会弄乱任何东西?
米兰·巴布斯科夫,2010年

5
@MilanBabuškov您应该运行ps auxf并找到针对MySQL执行的命令。通常,它看起来像这样的东西mysqld --basedir=/usr/local/mysql ...(请注意...只是意味着命令中可能会有更多标志,但我不会列出所有标志)找到后,复制整个内容,然后关闭MySQL。如果您使用的是Linux,则为/etc/init.d/mysqld stopmysqladmin -u root -p shutdown。然后strace使用复制的mysql命令运行。所以它看起来像这样:strace mysqld --basedir=/usr/local/mysql
Hengjie 2012年

我没有open(...电话。相反,我有4行以结尾 = -1 Err#2。您现在如何知道加载了哪个文件?
mgPePe 2014年

4
首先,在Mac上,您可以使用dtruss而不是strace:sudo dtruss mysqld 2>&1|grep my.cnf@mgPePe,该输出可能意味着未找到任何文件,因此未打开任何文件。
vitaly 2014年

268

摘自奇妙的“高性能MySQL” O'Reilly的书:

$ which mysqld
/usr/sbin/mysqld

$ /usr/sbin/mysqld --verbose --help | grep -A 1 "Default options"
Default options are read from the following files in the given order:
/etc/mysql/my.cnf ~/.my.cnf /usr/etc/my.cnf

2
而且我认为列出的最后一个文件胜出?
mlissner

5
这很奇怪..我检查了每个检查器,每个检查器都是空的(在我的mac电脑上)..知道为什么吗?
2013年

7
这不会提供已加载的配置。可能会加载的可能的自定义配置
mgPePe 2014年

4
我认为这不会列出所指定的文件!includedir。我试图弄清楚为什么文件中的!includedir指令/etc/mysql/my.cnf不起作用。
Buttle Butkus

2
您为什么需要mysqld使用完整路径进行呼叫?!
panepeter

65

如果运行mysql --verbose --help | less,它将告诉您有关第11行的.cnf文件。

您也可以mysql --print-defaults向您展示它将如何使用配置值。这对于确定正在加载哪个配置文件也很有用。


1
+1,因为这是mysql推荐的方法。对于Windows,如果您要分析内容,一种简单的方法是将输出转储到文件中。
kta

在Windows上,它告诉我一个位置列表,但没有列出正确的位置,而是我设法通过mysql工作台(stackoverflow.com/a/17953456/1504300)找到了。
realnice 2015年

3
不确定是否有问题,但您可能想使用它mysqld而不是mysql
nl-x

2
仍然在Windows中,我体验到my.ini是从ProgramData目录中读取的,这在此处建议的答案中没有显示。
nl-x

2
为投票mysqld --print-defaults,它为我提供了我在搜索此问题时想要的确切信息。
Per Lundberg

28

我在Windows上,并且已经安装了最新版本的MySQL Community 5.6

我要查看配置文件使用的是转到管理工具>服务> MySQL56>右键单击>属性,然后检查可执行文件的路径:

“ C:/ Program Files / MySQL / MySQL Server 5.6 / bin \ mysqld” --defaults-file =“ C:\ ProgramData \ MySQL \ MySQL Server 5.6 \ my.ini” MySQL56


这也适用于MySQL 5.7。C:\ProgramData\MySQL\MySQL Server 5.7\my.ini默认情况下处于启用状态。
Ryan Shillington

18

替代方法是使用

mysqladmin variables

2
它实际上并没有说cnf文件在我的变量中的位置。我当前正在运行MySQL 5.5.20。但是,我可以说曾经有一次,正如我之前在变量中看到的那样,它确实起作用了。自从移至5.5后,情况可能有所改变。
横街

13

mysqld --help --verbose很危险。您可以轻松覆盖运行实例的pidfile!与--pid-file = XYZ一起使用

哦,如果您有多个实例在运行,您将无法真正使用它。它只会显示默认值。

关于它的非常好的文章:

如何找到MySQL配置文件?


9

刚刚对ubuntu进行了快速测试:

  • 安装了mysql-server,它创建了/etc/mysql/my.cnf

  • mysqld-详细-帮助| grep -A 1“默认选项”

110112 13:35:26 [注意]插件“ FEDERATED”已禁用。
从给定的顺序从以下文件中读取默认选项:/etc/my.cnf /etc/mysql/my.cnf /usr/etc/my.cnf〜/ .my.cnf

  • 创建了/etc/my.cnf和/usr/etc/my.cnf,每个都有不同的端口号

  • 重新启动mysql-它使用的是/usr/etc/my.cnf中设置的端口号

同时,还找到了mysqld的--defaults-file选项。如果在此指定配置文件,则无论/ usr / sbin / mysqld返回的内容如何,​​都将仅使用该配置文件。grep -A 1“默认选项”



3

我发现这真的很有用:

  1. 在“服务”下找到MySQL进程 Control Panel -> Administration Tools
  2. 右键单击并选择 Properties
  3. 点击并选择,Path to executable然后查看其中是否包含指向my.ini/my.cfg

1
谢谢,这对我在Server 2008上的安装非常有用。
delliottg

2

一些服务器具有安装和配置的多个MySQL版本。确保您使用的Unix命令运行的版本正确:

ps -ax | grep mysql

1

对于使用mysql作为服务运行Windows Server的人们,找出正在运行的配置文件的一种简便方法是打开服务控制面板,找到mysql服务(在我的情况下为“ MYSQL56”),右键单击并单击属性。然后从此处可以检查“可执行文件的路径”,该路径应具有一个defaults-file指向您的配置文件位置的开关。


1

万一您运行的是mac,也可以通过以下方式实现:

sudo dtruss mysqld 2>&1 | grep cnf

1

如果您使用的是Windows,则可以使用Sysinternals procmon。打开它并配置过滤器设置,然后单击“添加”。现在procmon将监视mysqld。

在此处输入图片说明

现在正常启动您的mysql服务器。Procmon将捕获mysql的后台操作。搜索“我的”。在procmon结果窗格中,您会发现类似以下内容:

在此处输入图片说明

显然,mysql依次搜索配置文件列表。以我为例,它C:\mysql-5.7.19-winx64\my.cnf成功找到了,因此它正在使用它。


对于Windows,这基本上等于最佳答案。谢谢。
亚伦·瓦伦丁,

0

我安装了mysql使用brew install mysql

mysqld --verbose --help | less

它显示:

在此处输入图片说明

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.