Speicherort einer MySQL-Datenbank verschieben

Der Beaglebone Black hat standardmäßig 2 GB eingebauten Flash-Speicher, allerdings kann das das je nach installiertem Betriebssystem und den installierten Programmen irgendwann recht knapp werden.

Zudem ist es sinvoll, gewisse Anwendungen wie zum Beispiel ein php-basierendes CMS mit MySQL-Datenbank auf Schnellerem Speicher wie USB-Flash oder einer externen USB-Festplatte laufen zu lassen.

Wie man den Speicher eines Beaglebone Black erweitern kann, kann man hier nachlesen Speicher auf dem Beaglebone Black erweitern

Per default speichert MySQL seine Datenbanken unter Debian in dem Ordner /var/lib/mysql. Wenn man auf dem internen Speicher keinen Platz mehr hat und den Speicherort auf externe Speichermedien verschieben möchte, ist das eigentlich recht einfach.

  1. Einen Ordner auf dem externen Speicher erstellen, z.B. mit
    mkdir /path-to-mountpoint/mysql/
  2. dem Ordner die notwendigen Rechte zuweisen mit
    chown -R mysql:mysql /path-to-mountpoint/mysql/

    (chown = change owner und durch das -R werden die Rechte rekursiv gesetzt, also auch Ordner und Unterordner)

  3. Die Dateien aus dem alten Verzeichnis in den neuen Ordner kopieren mit
    cp -r /var/lib/mysql/* /path-to-mountpoint/mysql/
  4. die Konfigurationsdatei von MySQL anpassen

Zum Anpassen der Konfigurationsdatei wird diese in einem beliebigen Editor geöffnet – wie zum Beispiel nano.
Die Datei ist etwas umfangreicher, aber der wichtige Part ist dieser

[mysqld]
#
# * Basic Settings
#
user            = mysql
pid-file        = /var/run/mysqld/mysqld.pid
socket          = /var/run/mysqld/mysqld.sock
port            = 3306
basedir         = /usr
datadir         = /var/lib/mysql
tmpdir          = /tmp
lc-messages-dir = /usr/share/mysql
skip-external-locking

Dort ist der Eintrag „datadir“ so anzupassen, dass er auf den neu erstellten Ordner verweist.

[mysqld]
#
# * Basic Settings
#
user            = mysql
pid-file        = /var/run/mysqld/mysqld.pid
socket          = /var/run/mysqld/mysqld.sock
port            = 3306
basedir         = /usr
datadir         = /path-to-mountpoint/mysql/
tmpdir          = /tmp
lc-messages-dir = /usr/share/mysql
skip-external-locking

Die Datei abspeichern und mit service mysql restart MySQL neu starten und dann war es das auch schon.

Anmerkung
Nach dem Verschieben der Datenbanken auf eine über USB angeschlossene Festplatte kam es immer wieder zu Problemen und Fehlern bei MySQL. Verschieben auf eine installierte SD-Karte läuft dagegen problemlos.

11 Gedanken zu “Speicherort einer MySQL-Datenbank verschieben

  1. Danke für diese Anleitung.
    Ich musste nach dem Kopieren nochmal chmod ausführen weil alle files im neuen mysql-ordner noch dem Benutzer root gehörten.
    Die my.cnf ist im Ordner /etc/mysql zu finden.
    Klappt! 🙂

  2. Meine Empfehlung den Kopiervorgang mittels:

    cp -p -R /var/lib/mysql/* /neuer/pfad/

    Dann werden die korrekten Berechtigungen mit übernommen auch wenn man als root am Terminal den Vorgang startet!

    🙂

  3. Hi,

    Datenbank Dateien kopieren ohne vorher den Server zu Stoppen == nogo

    Erst Stoppen, dann kopieren, so verhindert man gegebenfalls Datenverlust.

    Gruß
    DapperDan

    • Hey DapperDan

      Ups .. natürlich. Aber das war irgendwie so selbstverständlich, dass ich es nicht extra hin geschrieben hatte. Aber du hast natürlich recht: Das gehört natürlich dazu!

      Danke für den Hinweis!

      Gruß vom Bjoern

  4. Hi,

    super Anleitung.
    Ich habe alles umgesetzt wie in der Anleitung beschrieben und mit den Hinweisen der Kommentaren.

    Leider lässt sich meine MySQL Dienst nicht mehr starten!
    Wieso ?

    Gruß
    Alexander

  5. Hi,

    insgesamt hab ich nirgend anders eine bessere und kompaktere Anleitung gefunden – danke dafür, aber ich bekomme auch die folgende Fehlermeldung, obwohl die Rechte passen …

    …Can’t connect to local MySQL server through socket ‚/var/run/mysqld/mysqld.sock‘ (2) in lock_may_be_available() …

Schreibe einen Kommentar