【问题标题】:Unable to start mysqld using launchd plist under MacOS 10.15 Catalina无法在 MacOS 10.15 Catalina 下使用 launchd plist 启动 mysqld
【发布时间】:2020-02-07 23:45:54
【问题描述】:

升级到 MacOS 10.15 Catalina 后,我无法通过 mysql 5.6 的 mysqld_safe 启动 mysqld

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
  <dict>
    <key>RunAtLoad</key>         <true/>
    <key>KeepAlive</key>         <true/>
    <key>SessionCreate</key>     <true/>
    <key>LaunchOnlyOnce</key>    <false/>
    <key>ExitTimeOut</key>       <integer>600</integer>
    <key>Label</key>
    <string>com.mysql.mysqld</string>
    <key>ProgramArguments</key>
    <array>
    <string>/Users/owenbrunette/bin/mysqld_safe</string>
    </array>
  </dict>
</plist>

10.15 Catalina 升级之前的工作配置也有 user 参数,但我在上面删除了它,在进一步测试中,为简单起见,“mysql”的值是 mysqld_safe 中的默认用户强>。

10.14 的工作配置是:

<key>ProgramArguments</key>
<array>
<string>/usr/local/mysql/bin/mysqld_safe</string>
<string>--user=mysql</string>
</array>

两种配置都不起作用。我尝试从 plist 启动为 /bin/sh 。 mysqld_safe 和 mysqld 是 Apple 分发的 5.6 (mysql-5.6.19-osx10.7-x86_64),并且自 OSX 10.7 以来一直在机器上运行。

我可以从终端启动服务器:

export PATH=/usr/bin:/bin:/usr/sbin
sudo /usr/local/mysql/bin/mysqld_safe

在终端中启动一个进程并且不退出(不退出是预期的行为)。 然后可以从另一个终端关闭该进程:

mysqladmin --user=root --password=[MyAdminPassword] shutdown

在生成的 mysqld 日志中我发现:

Fatal error: Please read "Security" section of the manual to find out how to run mysqld as root!

此错误表明 mysqld 是作为用户 root 而不是用户 mysql 启动的。这与mysql_safe的本意背道而驰,我认为这是一个重要的线索。 msql_safe 中的某些行为可能出现异常。

在系统日志中我发现:

... com.apple.xpc.launchd[1] (com.apple.xpc.launchd.domain.system): Session adoption is only allowed in user domains.

这可能是公平的评论,mysql_safe 脚本不会退出并保持运行直到数据库服务器关闭。这在 10.14 下是一样的,但可能 10.15 有不同的看法。

在 Catalina release notes 我们被告知: “启动守护进程和启动代理引入了新的用户隐私保护”和“启动的属性列表可能无法按预期工作并阻止服务运行”。

【问题讨论】:

    标签: mysql macos-catalina


    【解决方案1】:

    我在启动时使用的 bash 脚本遇到了类似的问题。我的 Program 键指向我的用户文件夹中的 bash 脚本,我看到您的 ProgramArguments 键也指向您的用户文件夹。这似乎是不再允许的事情之一(正如您引用的发行说明中提到的那样),至少在没有我想避免的特权更改的情况下并非如此。

    Applications 文件夹似乎没有以同样的方式受到限制。我将我的 bash 脚本移动到 Applications 文件夹,更新了相关 plist 中的 Program 键以指向新位置,然后重新启动,它工作了。

    如果这对您的情况不起作用(或不可行),我与一位找到不同解决方案的 Redditor 交换了几条消息:https://www.reddit.com/r/MacOS/comments/dffpzj/launchd_agent_no_longer_functions_after_catalina/f34ykb6/

    【讨论】:

    • 我已经尝试过使用 /usr/local/mysql/bin/mysqld_safe/Users/owenbrunette/bin/mysqld_safe 这两个都不起作用。我没有意识到我在上面的示例中使用用户目录版本。这是我作为最后手段尝试的事情。我刚刚尝试将脚本放在 /Applications 中,不幸的是同样失败了。
    • 知道了。您是否尝试过链接的 Reddit 帖子中的方法?转到 System Preferences > Security & Privacy > Privacy > Full Disk Access 并添加脚本的路径(/usr/local/mysql/bin/mysqld_safe)。
    • 感谢您的全盘访问建议,这周我一直在使用几个应用程序这样做。但不幸的是没有运气。同样的错误。
    【解决方案2】:

    我在 macOS Mojave 10.14.5 上遇到了同样的问题。 我执行了以下操作来解决问题。

    操作1.删除plist文件

    cd /Library/LaunchDaemons/
    sudo rm homebrew.mxcl.mysql\@5.6.plist
    

    不需要这个文件。 删除此文件是安全的。 稍后将创建正确的文件(在操作 3 中)。

    操作 2. 重新启动计算机

    也许没有必要。我重新启动了计算机。

    动作3.启动mysql服务器

    在控制台中输入以下命令。不要使用 sudo(这很重要)。

    brew services start mysql@5.6
    

    在以下目录中创建了正确的文件。

    ~/Library/LaunchAgents/
    

    是的

    ~/Library/LaunchAgents/homebrew.mxcl.mysql@5.6.plist
    

    操作 4. 重新启动计算机

    也许没有必要。我重新启动了计算机。

    操作 5. 测试

    键入以下命令以查看 mysql 服务器正在运行。

    brew services list
    

    【讨论】:

      【解决方案3】:

      对于它的价值,我遇到了同样的问题并设法通过将 my.cnf 更改为添加来解决它:

      用户 = mysql

      (之前没有指定用户)

      这似乎已经解决了问题,因此 mysql 5.5 自动开始使用 /Library/LaunchDaemons/com.mysql.mysql.plist 中的以下内容:

      <?xml version="1.0" encoding="UTF-8"?>
      <plist version="1.0">
        <dict>
          <key>KeepAlive</key>
          <true />
          <key>Label</key>
          <string>com.mysql.mysqld</string>
          <key>ProgramArguments</key>
          <array>
            <string>/usr/local/mysql/bin/mysqld_safe</string>
            <string>--user=mysql</string>
          </array>        
        </dict>
      </plist>
      

      即似乎关键是要确保 my.cnf 指定与 plist 文件相同的用户。

      【讨论】:

        【解决方案4】:

        在我的案例中解决了一个不同但稍微相关的问题:

        系统偏好 > 安全和隐私 > 隐私 > 全盘访问 > 终端 kbd> > 打开它。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2020-02-02
          • 1970-01-01
          • 1970-01-01
          • 2020-09-19
          • 1970-01-01
          • 2019-11-24
          • 1970-01-01
          • 2020-04-17
          相关资源
          最近更新 更多