MySQL 5.6 unter OS X 10 installieren

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: *********