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

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

【问题讨论】:

    标签: mysql configuration


    【解决方案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 工作台 (stackoverflow.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】:

          我发现这真的很有用:

          1. Control Panel -> Administration Tools下的Services中找到MySQL进程
          2. 鼠标右键选择Properties
          3. 点击并选择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

                  【讨论】:

                    猜你喜欢
                    • 2018-02-09
                    • 1970-01-01
                    • 2011-01-29
                    • 2010-10-09
                    • 2021-07-25
                    • 1970-01-01
                    • 1970-01-01
                    • 1970-01-01
                    • 2010-11-18
                    相关资源
                    最近更新 更多