Backup der SQL-Datenbank

  • Ich werden wegen Tausch der System-HDDs das System initialisieren müssen. Dabei gehen sicherlich auch die SQL-Datenbank verloren.

    Deshalb hätte ich gern gewusst, welches Backup-Variante sinnvoll und verwendbar ist.


    1) Kopie des Systemverzeichnisses /.@qmariadb:
    In diesem Verzeichnis liegen m.E. die SQL-Datenbanken. Kann man das Verzeichnis einfach sichern und später zurückkopieren? Sind darin auch die Benutzer, Rechte und Benutzerzuordnungen zu den Datenbanken enthalten? Ich habe bisher immer das Verzeichnis bei Backups mit kopiert, bin aber nicht sicher, ob darin alle Daten enthalten sind (auch Benutzer).


    2) Exportieren der gesamten Datenbank über phpMyAdmin (gesamte DB als localhost.sql),

    Das sollte doch alles enthalten, richtig?

    Wenn man nur eine einzelne Datenbank auf diese Weise exportiert, werden dann die damit verknüpften Benutzer ebenfalls exportiert?


    Wäre sonst noch etwas zu beachten, um den vorherigen Stand wiederherzustellen?


    Vielen Dank für eure Hilfe!

  • Die Benutzer, Rechte etc sind in der immer existierenden Datenbank mysql abgelegt, insbesondere in der Tabelle mysql.user. (Dein eingeloggter Benutzer sieht diese Tabelle nur, wenn er das Recht dazu hat - gegebenenfalls MySQL-Benutzer root nehmen.)


    Zu 1)

    (Vorausgesetzt, es ist das richtige Verzeichnis. Das kann ich nicht nachprüfen, da bei mir MariaDB in einer Linux-VM läuft. Dort ist bei mir das Verzeichnis /var/lib/mysql; auf dem Mac liegen die Dateien unter /usr/local/var/mysql/; dort muss insbesondere die Datei ibdata1 vorhanden sein.)

    Ja, das geht, alle Datenbankeinträge sind in den Dateien gespeichert, und man kann sie komplett oder einzeln aus dem Backup zurückspielen. Nachteil ist, dass man nicht einzelne Tabellen (ich glaube, beim nicht mehr empfehlenswerten MyISAM ging das; bei InnoDB geht das nicht) oder Einträge zurückspielen kann. Der Nachteil interessiert dich bei deinem Problem nicht. Dies ist der Weg, den zu gehen ich empfehle.


    Zu 2)

    Da wird sicher mysqldump intern verwendet. Der Vorteil am Dump ist, dass man diesem auch einzelne Tabellen oder Tabellenzeilen entnehmen kann (wenn man z. B. im Betrieb Daten versehentlich gelöscht hat). Komplettexport und Import geht auch.

    Damit du die Benutzer auch hast, musst du natürlich auch die Datenbank mysql exportieren.

    Die Gefahr, etwas falsch zu machen und nicht alles zu exportieren ist größer.


    Ich empfehle dir Lösung 1). Es schadet natürlich nicht, bei der Gelegenheit auch mal ein Dump anzulegen. Da kann man immer noch drauf zugreifen, falls bei 1) was schief läuft.

  • zu 1)

    Das würde ich nicht empfehlen, da zum Zeitpunkt der Sicherung sichergestellt werden muss, dass keine Daten geschrieben werden.

    Diese Methode kann also zur Inkonsistenz der Datenbanken führen.


    Ich würde eine Sicherung mittels mysqldump auf der Konsole empfehlen, das lässt sich dann auch per cron automatisieren.

  • Danke für eure Antworten.

    Ich habe beides als Backup (Verzeichnis + .sql-Export). Ich werden dann zuerst den Import der sql-Datei versuchen. Falls das nicht klappt, kopiere ich das Verzeichnis.


    Mit dem Import bin ich etwas vorsichtig. Ich hatte für Test vor einiger Zeit eine Datenbank exportiert und danach unter neuem Name importiert. Das hat zu PHP-Timeouts geführt bei einer DB von ~40MB.

    Zur Sicherheit habe ich nochmal alle DBs einzeln exporiert.

  • Kurze Rückmeldung:

    Die initiale DB mit neu gesetzten root-PW konnte ich in phpMyAdmin nicht öffnen (phpMyAdmin-Fehlermeldung). Vielleicht hätte ich die DB noch initialisieren müssen (in den QNAP-Einstellungen unter SQL-Server).


    Darauf hin habe ich einfach die vorher gesicherten Verzeichnisse zurück kopiert (zuvor SQL stoppen):

    /.@qmariadb/data (Datenbank-Dateien)

    /.@qmariadb/temp (war leer)

    Anschließend SQL starten.


    Ergebnis: SQL-Server läuft, phpMyAdmin zeigt alle DBs. Wordpress läuft :)