在MacOS 10.15 Catalina下无法使用启动的plist启动mysqld

时间:2019-10-10 13:45:44

标签: mysql macos-catalina

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

this.myForm.controls.listOptions.reset();

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

10.14的工作配置为:

<?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>

两种配置均无效。我尝试从plist作为/ bin / sh启动。 mysqld_safe 是,而mysqld是由Apple(mysql-5.6.19-osx10.7-x86_64)分发的5.6,自OSX 10.7起一直在计算机上运行。

我可以通过以下方式从终端启动服务器:

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

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

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

在生成的mysqld日志中,我找到:

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

此错误表明 mysqld 是以用户 root 而不是用户 mysql 启动的。这与 mysql_safe 的意图背道而驰,我认为这是一个重要的线索。 msql_safe 中可能出现意外情况。

在系统日志中,我发现:

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

这可能是一个合理的注释, mysql_safe 脚本不会退出并保持运行直到数据库服务器关闭。在10.14版本中是相同的,但也许10.15版本有不同的看法。

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

4 个答案:

答案 0 :(得分:1)

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

Applications文件夹似乎没有以相同的方式受到限制。我将bash脚本移到“应用程序”文件夹,更新了关联plist中的Program键,使其指向新位置,重新启动后就可以使用了。

如果这对于您的情况不起作用(或不可行),我与Redditor交换了几则消息,他们发现了另一种解决方案:https://www.reddit.com/r/MacOS/comments/dffpzj/launchd_agent_no_longer_functions_after_catalina/f34ykb6/

答案 1 :(得分:1)

我在 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

答案 2 :(得分:0)

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

user = 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文件相同的用户。

答案 3 :(得分:0)

在我的情况下,通过以下方法解决了一个不同但略相关的问题:

系统偏好设置> 安全和隐私> 隐私> 全盘访问> 终端>启用。