Die Installation von MySQL unter OS X erfordert etwas Handarbeit, mehr, als in der Vergangenheit. Dieser Beitrag fasst die wichtigsten Schritte zusammen.
Was ist Launchd?
In der Vergangenheit wurde MySQL unter OS X durch sogenannte Startup Items gestartet, die durch das Installationsprogramm eingerichtet wurden (ehemals MySQLStartupItem.pkg, später wurde der Code in mysql-n.n-osx-n.n.pkg integriert). Aber seit OS X 10 werden die schon lange als deprecated gekennzeichnete Startup Items nicht mehr unterstützt.
Das MySQL-Installationsprogramm installiert nun nur noch den MySQL-Server, überlässt den OS-X-Anwender dann aber seinem Schicksal. Der MySQL-Server wird nicht gestartet, weder sofort nach der Installation, noch nach einem OS-X-Neustart. Abhilfe: Richten Sie, wie im Folgenden beschrieben, eine Launchd-Datei ein.
Launchd ist das Init-System von OS X, also gewissermaßen das Gegenstück zu Init-V, Upstart bzw. Systemd unter Linux. Es wird durch plist-Dateien in Verzeichnis /Library/LaunchDaemons
gesteuert.
Launchd-Datei für MySQL
Wie die Launchd-Datei für MySQL auszusehen hat, ist glücklicherweise im MySQL-Handbuch dokumentiert. Hier nochmals das Listing:
<?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>
Am einfachsten richten Sie die Datei wie folgt ein: Sie führen in einem Terminalfenster
sudo cat > /Library/LaunchDaemons/com.mysql.mysql.plist
aus. Das cat
Kommando erwartet nun eine Eingabe. Kopieren Sie das obige Listing in die Zwischenablage und fügen Sie es mit cmd+C im Terminalfenster ein. Anschließend drücken Sie Return und beenden cat
mit strg+D. (Anstelle von cat
können Sie natürlich auch einen Editor verwenden, den Sie mit sudo
starten.)
Jetzt müssen Sie noch die Zugriffsrechte der neuen Datei richtigstellen und die Datei Launchd bekanntmachen. Das gelingt mit den folgenden Kommandos:
chown root:wheel /Library/LaunchDaemons/com.mysql.mysql.plist
chmod 644 /Library/LaunchDaemons/com.mysql.mysql.plist
launchctl load -w /Library/LaunchDaemons/com.mysql.mysql.plist
Sollten Sie MySQL manuell neustarten wollen, führen Sie diese Kommandos aus:
sudo launchctl unload /Library/LaunchDaemons/com.mysql.mysql.plist
sudo launchctl load /Library/LaunchDaemons/com.mysql.mysql.plist
Eckdaten der MySQL-Installation
Der MySQL-Server verwendet per Default die folgenden Pfade:
Binaries: /usr/local/mysql/bin
Konfiguration: /etc/my.cnf (Datei existiert aber nicht)
DB-Dateien: /usr/local/mysql/data
Fehlermeldungen: /usr/local/mysql/data/<hostname>.err
MySQL-Server-Konfiguration
Da das Installationsprogramm my.cnf
nicht einrichtet, verwendet der Server einfach die Default-Konfiguration. Musterdateien für my.cnf
finden Sie /usr/local/mysql/support-files
. Ich würde als Minimum die folgenden Zeilen vorschlagen, damit MySQL in neuen Datenbanken standardmäßig den utf8-Zeichensatz verwendet:
[client]
default-character-set=utf8
[mysqld]
collation-server=utf8_unicode_ci
character-set-server=utf8
[mysqldump]
default-character-set=utf8
[mysql]
default-character-set=utf8
Welches die gültigen Default-Optionen sind und von welchen Orten der MySQL-Server die Konfigurationsdateien liest, finden Sie so heraus:
/usr/local/mysql/bin/mysqld --help -verbose | less
/usr/local/mysql/bin/mysqld Ver 5.6.23 ...
Copyright (c) 2000, 2015, Oracle ...
...
Default options are read from the following files
in the given order:
/etc/my.cnf
/etc/mysql/my.cnf
/usr/local/mysql/etc/my.cnf
~/.my.cnf
PATH-Einstellung für MySQL-Tools
Damit Sie Kommandos wie mysql
, mysqldump
, mysqladmin
etc. problemlos aus dem Terminal heraus aufrufen können, sollten Sie /usr/local/mysql/bin
zum Pfad hinzufügen. Dazu ergänzen Sie die Datei .profile
um eine Zeile:
# in .profile
...
export PATH=/usr/local/mysql/bin:$PATH
MySQL-Absicherung
Der frisch installierte MySQL-Server ist ohne Passwort zugänglich, was sicherheitstechnisch eine Katastrophe ist. Um diesen Zustand schnellstmöglich zu beenden, stellen Sie nach einem Neustart des Terminals mit mysql
eine Verbindung zum Server her:
mysql -u root
Welcome to the MySQL monitor. Commands end with ; or g.
Your MySQL connection id is 2
Server version: 5.6.23 MySQL Community Server (GPL)
Innerhalb dieses MySQL-Kommandointerpreters führen Sie nun folgende Kommandos aus:
UPDATE mysql.user SET password=PASSWORD('xxx') WHERE user='root';
DELETE FROM mysql.user WHERE user='';
FLUSH PRIVILEGES;
exit;
Von nun an erfordert die Anmeldung bei MySQL das gerade festgelegte root-Passwort:
mysql -u root -p
Enter password: *********