MySQL Datenverzeichnis verschieben: Server startet nicht mehr
Erstellt von Tobi am Montag 14. Juli 2008
Ich hatte unter Linux (Ubuntu 8.04) das Problem, dass ich meine Festplatte nur in zwei Partitionen eingeteilt habe, wobei nur in /home ausreichend Platz zur Verfügung stand. Unter /var/lib/mysql reichte der Platz nicht aus.
Da MySQL ja gut konfigurierbar ist, habe ich den mysqld gestoppt, in der /etc/mysql/my.cnf den Wert datadir = /var/lib/mysql auf /home/mysql gesetzt und die bestehenden Daten dorthin verschoben.
Danach startete mysqld aber nicht mehr, allerdings ohne jegliche Fehlermeldung. Auch in der Mysql-Errorlog war nichts zu finden. In /var/log/messages wurde ich dann fündig. Dort stand ein profanes:
audit(1216029237.097:20): type=1503 operation=”inode_permission” requested_mask=”rw::” denied_mask=”rw::” name=”/home/mysql/ibdata1″ pid=23521 profile=”/usr/sbin/mysqld” namespace=”default”
Nach einigem Suchen fand ich unter bugs.launchpad.net die Lösung. Schuld ist wohl ein Dienst namens “apparmor”. In dessen /etc/apparmor.d/usr.sbin.mysqld Konfig müssen nur folgende Zeilen irgendwo zwischen die {} eingetragen werden:
/home/mysql/ r,
/home/mysql/** rwk,
Wenn der mysql-Datenpfad nicht /home/mysql ist muss das natürlich auch entsprechend angepasst werden. Dannach per /etc/init.d/apparmor restart den Dienst neu laden und dann lässt sich der mysqld auch wieder korrekt starten.

Samstag 27. Juni 2009 um 15:54
Besten Dank für diesen Blog Eintrag
Denn Dienst “apparmor” kannte ich nocht nicht…hab hier ne Stund rumgedocktort und mich schon selbst für verrückt erklärt XD …ordner berechtigungen passen, user etc, trotzdem immer die meldung im log, dass mysql keine berechtigung hat.
Nun läuft der Dienst wieder!
Gruss Erosol
Samstag 18. Juli 2009 um 18:48
Ich habe lange versucht es ebenso unter Ubuntu 9.04 Server Edition hinzubekommen.
Schlussendlich habe ich folgende Lösung gewählt, welche viel einfacher und für meinen Geschmack auch schöner ist:
sudo -i
service mysql stop
mv /var/lib/mysql /media/data/mysql
mkdir /var/lib/mysql
chown mysql:mysql -R /var/lib/mysql
mount –bind /media/data/mysql /var/lib/mysql
service mysql start
Sprich: datadir-Verzeichnis verschieben, und über mount –bind das neue an alter Position wieder einhängen.
Damit das Mounten beim Neustart wieder passiert noch die /etc/fstab anpassen (Zeile anfügen):
/media/data/mysql /var/lib/mysql none bind 0 0
Dann muss man auch an apparmor und my.cnf nichts ändern und es lief bei mir auf Anhieb.
Außerdem hat man bei Updates etc. keine Probleme, dass man den datadir geändert hat.