【发布时间】:2010-10-09 11:34:56
【问题描述】:
是否有命令可以确定 MySQL 5.0 当前使用的是哪个配置文件?
【问题讨论】:
标签: mysql configuration
是否有命令可以确定 MySQL 5.0 当前使用的是哪个配置文件?
【问题讨论】:
标签: mysql configuration
摘自 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
【讨论】:
!includedir 指定的文件。我试图弄清楚为什么我的/etc/mysql/my.cnf 文件中的!includedir 指令不起作用。
mysqld?!
如果您运行 mysql --verbose --help | less,它会告诉您第 11 行它将查找哪些 .cnf 文件。
您也可以使用mysql --print-defaults 向您展示它将如何使用配置值。这对于识别它正在加载的配置文件也很有用。
【讨论】:
mysqld 而不是mysql
mysqld --print-defaults,当我在谷歌上搜索这个问题时,它给了我想要的东西。
如果您使用的是 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 文件。
【讨论】:
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 结尾。我怎么知道现在加载了哪个文件?
sudo dtruss mysqld 2>&1|grep my.cnf@mgPePe,该输出可能意味着没有找到任何文件,因此没有打开任何文件。
我在 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
【讨论】:
C:\ProgramData\MySQL\MySQL Server 5.7\my.ini。
另一种方法是使用
mysqladmin variables
【讨论】:
mysqld --help --verbose 很危险。您可以轻松覆盖 pidfile 以运行实例!与 --pid-file=XYZ 一起使用
哦,如果您有超过 1 个正在运行的实例,您将无法真正使用它。它只会显示默认值。
关于它的真正好文章:
【讨论】:
刚刚在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 "默认选项"
【讨论】:
我发现这真的很有用:
Control Panel -> Administration Tools下的Services中找到MySQL进程
Properties
Path to executable,看看它是否包含my.ini/my.cfg的路径
【讨论】:
有些服务器安装和配置了多个 MySQL 版本。确保您处理的是在 Unix 上运行的正确版本 命令:
ps -ax | grep mysql
【讨论】:
对于将 mysql 作为服务运行 windows 服务器的人,找出您正在运行的配置文件的简单方法是打开服务控制面板,找到您的 mysql 服务(在我的情况下为“MYSQL56”),右键单击并单击属性。然后从这里你可以检查“可执行文件的路径”,它应该有一个defaults-file 开关,它指向你的配置文件所在的位置。
【讨论】:
如果您正在运行 mac,也可以通过以下方式实现:
sudo dtruss mysqld 2>&1 | grep cnf
【讨论】:
如果您使用的是 Windows,则可以使用 Sysinternals procmon。打开它并像这样配置过滤器设置,然后单击“添加”。现在 procmon 将监视 mysqld。
现在正常启动你的mysql服务器。 Procmon 将捕获 mysql 的后台操作。搜索“我的”。在 procmon 结果窗格中,您会发现类似以下内容:
很明显,mysql是依次搜索配置文件列表的。就我而言,它成功找到了C:\mysql-5.7.19-winx64\my.cnf,所以它正在使用这个。
【讨论】:
在 CentOS 和 MariaDB 上,您可以在以下位置找到 MariaDB 服务器配置设置: /etc/my.cnf.d/server.cnf
【讨论】: