确定正在使用哪个 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 stop
或 mysqladmin -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】:如果您正在运行 mac,也可以通过以下方式实现:
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 配置文件的主要内容,如果未能解决你的问题,请参考以下文章