Tobi's Blog

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.

2 Kommentare zu “MySQL Datenverzeichnis verschieben: Server startet nicht mehr”

  1. Erosol sagt:

    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

  2. Christopher K. sagt:

    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.

Kommentar schreiben

XHTML: Sie können diese Tags benutzen: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>