MySQL 5.7 Reference Manual Including MySQL NDB Cluster 7.5 and NDB Cluster 7.6
macOS uses launch daemons to automatically start, stop, and manage processes and applications such as MySQL.
By default, the installation package (DMG) on macOS installs a
launchd file named
/Library/LaunchDaemons/com.oracle.oss.mysql.mysqld.plist
that contains a plist definition similar to:
<?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> </array> <key>WorkingDirectory</key> <string>/usr/local/mysql</string> </dict> </plist>
Some users report that adding a plist DOCTYPE declaration causes the launchd operation to fail, despite it passing the lint check. We suspect it's a copy-n-paste error. The md5 checksum of a file containing the above snippet is 24710a27dc7a28fb7ee6d825129cd3cf.
To enable the launchd service, you can either:
Click
from the MySQL preference pane.Or, manually load the launchd file.
shell> cd /Library/LaunchDaemons shell> sudo launchctl load -F com.oracle.oss.mysql.mysqld.plist
To configure MySQL to automatically start at bootup, you can:
shell> sudo launchctl load -w com.oracle.oss.mysql.mysqld.plist
When upgrading MySQL server, the launchd installation process removes the old startup items that were installed with MySQL server 5.7.7 and earlier.
Upgrading also replaces your existing launchd file of the same name.
Additional launchd related information:
The plist
entries override
my.cnf
entries, because they are passed
in as command line arguments. For additional information about
passing in program options, see
Section 4.2.2, “Specifying Program Options”.
The ProgramArguments section
defines the command line options that are passed into the
program, which is the mysqld
binary in
this case.
The default plist
definition is written
with less sophisticated use cases in mind. For more
complicated setups, you may want to remove some of the
arguments and instead rely on a MySQL configuration file, such
as my.cnf
.
If you edit the plist
file, then uncheck
the installer option when reinstalling or upgrading MySQL.
Otherwise, your edited plist
file is
overwritten, with the loss of any changes you have made.
Because the default plist
definition defines
several ProgramArguments, you
might remove most of these arguments and instead rely upon your
my.cnf
MySQL configuration file to define
them. For example:
<?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>WorkingDirectory</key> <string>/usr/local/mysql</string> <key>ProgramArguments</key> <array> <string>/usr/local/mysql/bin/mysqld</string> <string>--user=_mysql</string> </array> </dict> </plist>
In this case, the basedir
,
datadir
,
plugin_dir
,
log_error
, and
pid_file
options were removed
from the plist definition, and then you you might define them in
my.cnf
.