我想在启动时自动启动 MySQL 服务器。这在小牛队是可能的,但似乎不适用于优胜美地。
编辑:似乎这也适用于 El Capitan
https://i.stack.imgur.com/iHIPl.png
@dcc 非常接近。这是 MySQL 在 Yosemite 上再次自动启动的方式:
/Library/LaunchDaemons
中的 com.mysql.mysql.plist
:
<?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>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>
此外,我根据 this answer 更改了权限
sudo chown root:wheel /Library/LaunchDaemons/com.mysql.mysql.plist
sudo chmod 644 /Library/LaunchDaemons/com.mysql.mysql.plist
最后我运行这个命令
sudo launchctl load -w /Library/LaunchDaemons/com.mysql.mysql.plist
如果您有任何补充,请在下面分享!
我跟着 @Xavers directions 并在尝试执行命令时
sudo launchctl load -w /Library/LaunchDaemons/com.mysql.mysql.plist
被告知错误:
/Library/LaunchDaemons/com.mysql.mysql.plist:无效的属性列表
在摸了摸头一分钟后,我发现删除顶部的 DOCTYPE DTD 声明会使错误消失,并且在重新启动后,mySQL 服务器确实正在运行。
所以,我的 XML 看起来像这样:
<?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>
如果您使用自制软件安装了 mysql,则可以通过键入 brew info mysql
来获取有关如何自动启动它的说明。
例如,我机器上的输出是:
To have launchd start mysql at login:
ln -sfv /usr/local/opt/mysql/*.plist ~/Library/LaunchAgents
Then to load mysql now:
launchctl load ~/Library/LaunchAgents/homebrew.mxcl.mysql.plist
创建 /Library/LaunchDaemons/com.mysql.mysql.plist
并使用以下 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>
</true>
</dict>
</plist>
然后加载新创建的 plist 文件
sudo launchctl load -w /Library/LaunchDaemons/com.mysql.mysql.plist
apachectl start
启动服务器!?他们有关系吗?
sudo launchctl load -w...
引发错误 Invalid property list
本文帮助我解决无效错误的问题。更正了我在下面使用的 plist。
How to know which line of plist file is incorrect
<?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>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>
其他提供的答案都无法自动启动我的 MySQL 服务器。我按照 the MySQL 5.6 handbook 的说明进行操作,它终于又自动启动了!使用以下内容创建文件 /Library/LaunchDaemons/com.oracle.oss.mysql.mysqld.plist
:
<?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>--port=3306</string>
</array>
<key>WorkingDirectory</key> <string>/usr/local/mysql</string>
</dict>
</plist>
创建文件后运行以下命令:
cd /Library/LaunchDaemons
sudo launchctl load -F com.oracle.oss.mysql.mysqld.plist
当我使用早期答案中建议的 plist 时,我将系统的用户更改为 _mysql,但 MySQL 首选项窗格中的“停止 MySQL 服务器”按钮不再起作用。 KeepAlive
键将导致进程在按下停止按钮后立即再次启动。我使用键 RunAtLoad
让它在重新启动时启动,但允许窗格中的按钮继续工作。
<?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>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>
然后,与其他答案一样,运行:
sudo launchctl load -w /Library/LaunchDaemons/com.mysql.mysql.plist
现在,MySQL 在重新启动时启动,但系统偏好设置中的 MySQL 窗格仍然有效。我正在运行 El Capitan,10.11.2
不定期副业成功案例分享
sudo chown root:wheel /Library/LaunchDaemons/com.mysql.mysql.plist
sudo launchctl load -w /Library/LaunchDaemons/org.macports.apache2.plist
。我发现 .plist 文件在目录中仍然完好无损。