macOS 10.15 Catalina 上的 Homebrew MySQL 8.0.18 不会作为服务运行

Mic*_*ase 5 mysql homebrew macos-catalina

另一个 macOS 升级 + 另一个 MySQL 升级 = 另一组问题。

我似乎无法让 MySQL 8.0.18 在 macOS 10.15 Catalina 上作为自制服务运行。请告诉我我方法的错误。

这是我所做的

  1. 酿造安装mysql
  2. 酿造针mysql
  3. 触摸/tmp/mysql.sock
  4. mysql.server 启动
  5. 取消设置 TMPDIR
  6. mysql_secure_installation
  7. mysql.server 停止
  8. 须藤 brew 服务启动 mysql

这是我的预期

MySQL 以 root 用户身份作为自制服务愉快地运行。

这是发生的事情

MySQL 立即倒下并死亡,在以下位置留下了一个神秘的最后一条语句/usr/local/var/mysql/[host.domain.com].err

"[ERROR] [MY-010123] [Server] Fatal error: Please read "Security" section of the manual to find out how to run mysqld as root!"
Run Code Online (Sandbox Code Playgroud)

附加信息

只要我手动启动它, MySQL 在随后的重启中运行良好:

sudo reboot now
ssh [servername.domain.com]
touch /tmp/mysql.sock
mysql.server start
Run Code Online (Sandbox Code Playgroud)

这是/usr/local/var/mysql/[servername.domain.com].err文件内容:

2019-10-20T18:02:14.6NZ mysqld_safe Logging to '/usr/local/var/mysql/moriarty.farces.com.err'.
2019-10-20T18:02:14.6NZ mysqld_safe Starting mysqld daemon with databases from /usr/local/var/mysql
2019-10-20T18:02:14.670494Z 0 [System] [MY-010116] [Server] /usr/local/Cellar/mysql/8.0.18/bin/mysqld (mysqld 8.0.18) starting as process 557
2019-10-20T18:02:14.685511Z 0 [Warning] [MY-010159] [Server] Setting lower_case_table_names=2 because file system for /usr/local/var/mysql/ is case insensitive
2019-10-20T18:02:15.617696Z 0 [System] [MY-010229] [Server] Starting crash recovery...
2019-10-20T18:02:15.626461Z 0 [System] [MY-010232] [Server] Crash recovery finished.
2019-10-20T18:02:15.795626Z 0 [Warning] [MY-010068] [Server] CA certificate ca.pem is self signed.
2019-10-20T18:02:15.833541Z 0 [System] [MY-010931] [Server] /usr/local/Cellar/mysql/8.0.18/bin/mysqld: ready for connections. Version: '8.0.18'  socket: '/tmp/mysql.sock'  port: 3306  Homebrew.
2019-10-20T18:02:15.993739Z 0 [System] [MY-011323] [Server] X Plugin ready for connections. Socket: '/tmp/mysqlx.sock' bind-address: '127.0.0.1' port: 33060
Run Code Online (Sandbox Code Playgroud)

重新启动后,当我尝试将 MySQL 作为 Homebrew 服务运行时:

sudo reboot now
ssh [servername.domain.com]
sudo brew services start mysql
Run Code Online (Sandbox Code Playgroud)

MySQL 失败,/usr/local/var/mysql/[servername.domain.com].err文件中记录了以下错误:

2019-10-20T18:44:13.780394Z 0 [ERROR] [MY-010123] [Server] Fatal error: Please read "Security" section of the manual to find out how to run mysqld as root!
2019-10-20T18:44:13.780503Z 0 [ERROR] [MY-010119] [Server] Aborting
2019-10-20T18:44:13.780727Z 0 [System] [MY-010910] [Server] /usr/local/opt/mysql/bin/mysqld: Shutdown complete (mysqld 8.0.18)  Homebrew.
2019-10-20T18:44:13.6NZ mysqld_safe mysqld from pid file /usr/local/var/mysql/moriarty.farces.com.pid ended
Run Code Online (Sandbox Code Playgroud)

Sim*_*mba 8

切勿sudo与命令一起使用brew。它会破坏相关文件的所有权。brew不支持以 root 身份运行。(我说的是brew,不是mysqld

来自 Homebrew 文档的引用

tl;Sudo 博士很危险,而且您安装 TextMate.app 时没有使用 sudo。

Homebrew 拒绝使用sudo.

来自源代码的警告brew

check-run-command-as-root() {
  ...
  odie <<EOS
Running Homebrew as root is extremely dangerous and no longer supported.
As Homebrew does not drop privileges on installation you would be giving all
build scripts full access to your system.
EOS
}
Run Code Online (Sandbox Code Playgroud)

解决方案

  1. 禁用该服务并删除启动守护程序。

    # stop and unload the launchdaemon
    sudo launchctl unload -w /Library/LaunchDaemons/homebrew.mxcl.mysql.plist
    # remove the lauchdaemon file
    sudo rm -f /Library/LaunchDaemons/homebrew.mxcl.mysql.plist
    sudo rm -f /tmp/mysql.sock /tmp/mysqlx.sock
    
    Run Code Online (Sandbox Code Playgroud)
  2. 修复自制软件相关文件的所有权

    # For x86 Mac
    sudo chown -R "$(whoami):admin" /usr/local/*
    # For M1 Mac
    sudo chown -R "$(whoami):admin" /opt/homebrew/*
    # it will take some time
    
    Run Code Online (Sandbox Code Playgroud)
  3. 重新启用 MySQL 服务。

    # DO NOT USE "sudo brew"
    brew services start mysql
    
    Run Code Online (Sandbox Code Playgroud)

更新

似乎有些人不熟悉 Homebrew。我将在这里解释 Homebrew 如何管理服务。

mysqld3306默认情况下在端口侦听,该端口不是特权端口。所以没有必要从mysqldroot开始。在 Linux 上以 rootsystemd开头mysqld,但 macOS 不是 Linux。

Homebrew 在 的帮助下管理服务launchd,这是systemdmacOS 上的一种替代方法。launchd启动一个前台进程并为您管理它,就像什么systemd一样。

brew services start/stop mysql将满足您的需要。它创建一个启动文件~/Library/LaunchAgents/homebrew.mxcl.mysql.plist,从mysqld它开始(由当前用户运行)。

/usr/local/mysql/support-files/mysql.server是MySQL自带的一个shell脚本,帮助你入门mysqld除非您从Homebrew之外的源代码构建 MySQL,否则不建议直接使用它。如果您使用的是 Homebrew,请坚持使用brew services. 或者换一种说法,如果你用的是 Homebrew,你应该用 Homebrew 的方式做事。


小智 -1

升级到 Catalina 后我刚刚遇到了同样的问题。如果我从系统首选项启动 MySQL 服务器,它只会自行启动和停止。我的解决方案是:

sudo /usr/local/mysql-8.0.17-macos10.14-x86_64 /support-files/mysql.server start

而不是: /usr/local/ mysql /support-files/mysql.server start

我在使用 Catalina 时遇到了很多问题。现在我无法从系统首选项启动/停止 mysql 服务器,只能从终端启动/停止。

这是我的第一篇文章,所以我希望这会有所帮助,我注册只是为了回答你,因为你是我发现的唯一一个有同样问题的人。