macOS 使用启动守护进程来自动启动、停止和管理进程和应用程序,如 MySQL。
默认情况下,macOS 上的安装软件包 (DMG) 会安装一个名为 /Library/LaunchDaemons/com.oracle.oss.mysql.mysqld.plist
的 launchd 文件,其中包含类似于以下内容的 plist 定义
Press CTRL+C to copy<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <plist version="1.0"> <dict> <key>Label</key> <string>com.oracle.oss.mysql.mysqld</string> <key>ProcessType</key> <string>Interactive</string> <key>Disabled</key> <false/> <key>RunAtLoad</key> <true/> <key>KeepAlive</key> <true/> <key>SessionCreate</key> <true/> <key>LaunchOnlyOnce</key> <false/> <key>UserName</key> <string>_mysql</string> <key>GroupName</key> <string>_mysql</string> <key>ExitTimeOut</key> <integer>600</integer> <key>Program</key> <string>/usr/local/mysql/bin/mysqld</string> <key>ProgramArguments</key> <array> <string>/usr/local/mysql/bin/mysqld</string> <string>--user=_mysql</string> <string>--basedir=/usr/local/mysql</string> <string>--datadir=/usr/local/mysql/data</string> <string>--plugin-dir=/usr/local/mysql/lib/plugin</string> <string>--log-error=/usr/local/mysql/data/mysqld.local.err</string> <string>--pid-file=/usr/local/mysql/data/mysqld.local.pid</string> <string>--keyring-file-data=/usr/local/mysql/keyring/keyring</string> <string>--early-plugin-load=keyring_okv=keyring_okv.so</string> </array> <key>WorkingDirectory</key> <string>/usr/local/mysql</string> </dict> </plist>
一些用户报告说,添加 plist DOCTYPE 声明会导致 launchd 操作失败,尽管它通过了 lint 检查。我们怀疑这是一个复制粘贴错误。包含上述代码片段的文件的 md5 校验和为 d925f05f6d1b6ee5ce5451b596d6baed。
要启用 launchd 服务,您可以:
打开 macOS 系统偏好设置并选择 MySQL 偏好设置面板,然后执行
。实例 页面包含一个启动或停止 MySQL 的选项, 会重新创建
data/
目录。 会卸载 MySQL 服务器,并选择性地卸载 MySQL 偏好设置面板和 launchd 信息。或者,手动加载 launchd 文件。
Press CTRL+C to copy$> cd /Library/LaunchDaemons $> sudo launchctl load -F com.oracle.oss.mysql.mysqld.plist
要配置 MySQL 在启动时自动启动,您可以:
Press CTRL+C to copy$> sudo launchctl load -w com.oracle.oss.mysql.mysqld.plist
升级过程会替换您现有的名为 com.oracle.oss.mysql.mysqld.plist
的 launchd 文件。
其他与 launchd 相关的资料
plist 条目会覆盖
my.cnf
条目,因为它们作为命令行参数传递。有关传递程序选项的更多信息,请参见 第 6.2.2 节,“指定程序选项”。ProgramArguments 部分定义了传递给程序的命令行选项,在本例中为
mysqld
二进制文件。默认 plist 定义的编写考虑了较不复杂的用例。对于更复杂的设置,您可能希望删除一些参数,并改为依靠 MySQL 配置文件,例如
my.cnf
。如果您编辑了 plist 文件,那么在重新安装或升级 MySQL 时取消选中安装程序选项。否则,您编辑过的 plist 文件将被覆盖,所有编辑都会丢失。
由于默认 plist 定义定义了几个 ProgramArguments,您可能希望删除其中大部分参数,并改为依靠 my.cnf
MySQL 配置文件来定义它们。例如
Press CTRL+C to copy<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <plist version="1.0"> <dict> <key>Label</key> <string>com.oracle.oss.mysql.mysqld</string> <key>ProcessType</key> <string>Interactive</string> <key>Disabled</key> <false/> <key>RunAtLoad</key> <true/> <key>KeepAlive</key> <true/> <key>SessionCreate</key> <true/> <key>LaunchOnlyOnce</key> <false/> <key>UserName</key> <string>_mysql</string> <key>GroupName</key> <string>_mysql</string> <key>ExitTimeOut</key> <integer>600</integer> <key>Program</key> <string>/usr/local/mysql/bin/mysqld</string> <key>ProgramArguments</key> <array> <string>/usr/local/mysql/bin/mysqld</string> <string>--user=_mysql</string> <string>--basedir=/usr/local/mysql</string> <string>--datadir=/usr/local/mysql/data</string> <string>--plugin-dir=/usr/local/mysql/lib/plugin</string> <string>--log-error=/usr/local/mysql/data/mysqld.local.err</string> <string>--pid-file=/usr/local/mysql/data/mysqld.local.pid</string> <string>--keyring-file-data=/usr/local/mysql/keyring/keyring</string> <string>--early-plugin-load=keyring_okv=keyring_okv.so</string> </array> <key>WorkingDirectory</key> <string>/usr/local/mysql</string> </dict> </plist>
在本例中,basedir
、datadir
、plugin_dir
、log_error
、pid_file
和 --early-plugin-load
选项已从默认 plist ProgramArguments 定义中删除,您可能已在 my.cnf
中定义了它们。