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

Posted

技术标签:

【中文标题】确定正在使用哪个 MySQL 配置文件【英文标题】:Determine which MySQL configuration file is being used 【发布时间】:2010-10-09 11:34:56 【问题描述】:

是否有命令可以确定 mysql 5.0 当前使用的是哪个配置文件?

【问题讨论】:

【参考方案1】:

摘自 O'Reilly 出色的“高性能 MySQL”一书:

$ 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

【讨论】:

我假设列出的最后一个文件获胜? 这很奇怪。我检查了所有这些,但它们都是空的(在我的 Mac 上)。知道为什么吗? 这并没有给出加载的配置。相当可能的自定义配置可能会被加载 我认为这不会列出!includedir 指定的文件。我试图弄清楚为什么我的/etc/mysql/my.cnf 文件中的!includedir 指令不起作用。 为什么需要使用完整路径调用mysqld?!【参考方案2】:

如果您运行 mysql --verbose --help | less,它会告诉您第 11 行它将查找哪些 .cnf 文件。

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

【讨论】:

+1 因为这是 mysql 推荐的方法。对于 Windows,如果您想分析内容,一种简单的方法是将输出转储到文件中。 在 Windows 上,它告诉我一个位置列表,但不是正确的,而是我设法用 mysql 工作台 (***.com/a/17953456/1504300) 找到。 不确定这是否重要,但您可能想使用mysqld 而不是mysql 我仍然在 Windows 中体验到 my.ini 是从 ProgramData 目录中读取的,而这并未显示在此处建议的答案中。 赞成mysqld --print-defaults,当我在谷歌上搜索这个问题时,它给了我想要的东西。【参考方案3】:

如果您使用的是 Linux,则使用 strace 启动“mysqld”,例如 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

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

【讨论】:

如何在运行中的系统上做到这一点而不会搞砸任何事情? @MilanBabuškov 你应该运行ps auxf 并找到为 MySQL 执行的命令。通常它看起来像mysqld --basedir=/usr/local/mysql ... 之类的东西(注意...只是意味着命令中可能有更多标志,但我不会列出所有标志)一旦找到它,复制整个东西然后关闭 MySQL。如果您使用的是 Linux,则为 /etc/init.d/mysqld stopmysqladmin -u root -p shutdown。然后使用您复制的 mysql 命令运行strace。所以它看起来像这样:strace mysqld --basedir=/usr/local/mysql 我没有open(... 行。相反,我有 4 行以 = -1 Err#2 结尾。我怎么知道现在加载了哪个文件? fwiiw,在 Mac 上,您可以使用 dtruss 代替 strace:sudo dtruss mysqld 2>&1|grep my.cnf@mgPePe,该输出可能意味着没有找到任何文件,因此没有打开任何文件。【参考方案4】:

我在 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【参考方案5】:

另一种方法是使用

mysqladmin variables

【讨论】:

它实际上并没有说明 cnf 文件在我的变量中的位置。我目前正在运行 MySQL 5.5.20。但是,我可以说从前这确实有效,正如我之前在变量中看到的那样。自从迁移到 5.5 后,可能发生了一些变化。【参考方案6】:

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

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

关于它的真正好文章:

How to find MySQL configuration file?

【讨论】:

【参考方案7】:

刚刚在ubuntu上做了一个快速测试:

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

mysqld --verbose --help | 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 --verbose --help | grep -A 1 "默认选项"

【讨论】:

【参考方案8】:

使用 MySQL Workbench,它将显示在“服务器状态”下:

【讨论】:

【参考方案9】:

我发现这真的很有用:

    Control Panel -> Administration Tools下的Services中找到MySQL进程 鼠标右键选择Properties 点击并选择Path to executable,看看它是否包含my.ini/my.cfg的路径

【讨论】:

这对我的 Server 2008 安装很有用,谢谢。【参考方案10】:

有些服务器安装和配置了多个 MySQL 版本。确保您处理的是在 Unix 上运行的正确版本 命令:

ps -ax | grep mysql

【讨论】:

【参考方案11】:

对于将 mysql 作为服务运行 windows 服务器的人,找出您正在运行的配置文件的简单方法是打开服务控制面板,找到您的 mysql 服务(在我的情况下为“MYSQL56”),右键单击并单击属性。然后从这里你可以检查“可执行文件的路径”,它应该有一个defaults-file 开关,它指向你的配置文件所在的位置。

【讨论】:

【参考方案12】:

如果您正在运行 ma​​c,也可以通过以下方式实现:

sudo dtruss mysqld 2>&1 | grep cnf

【讨论】:

【参考方案13】:

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

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

很明显,mysql是依次搜索配置文件列表的。就我而言,它成功找到了C:\mysql-5.7.19-winx64\my.cnf,所以它正在使用这个。

【讨论】:

这基本上相当于 Windows 的最佳答案。谢谢。【参考方案14】:

我安装了mysql使用brew install mysql

mysqld --verbose --help | less

它显示:

【讨论】:

【参考方案15】:

在 CentOS 和 MariaDB 上,您可以在以下位置找到 MariaDB 服务器配置设置: /etc/my.cnf.d/server.cnf

【讨论】:

以上是关于确定正在使用哪个 MySQL 配置文件的主要内容,如果未能解决你的问题,请参考以下文章

确定MySQL在Linux系统中配置文件的位置

centos 7 nginx 1.7配置文件是哪个目录

Centos7查看Mysql配置文件

确定在 AIX 上配置了哪个 TLS 版本

mysql会在没有配置文件时,自动检测安装目录和数据文件目录

经验之谈-MySQL配置文件读取顺序问题!