MySQL Backup

Beschreibung: Wir erklären anhand verschiedener Tools wie ein Datenbank-Backup gemacht wird.

Kategorie: Server, PHP und MySQL

Link zu diesem Artikel: Alles auswählen

[url=https://www.phpbb.de/kb/viewarticle?a=58&sid=c0256064ef292b0516700ae52be9d607]Knowledge Base - MySQL Backup[/url]

Die MySQL Datenbank speichert alle Informationen des Forums und sollte daher regelmäßig gesichert werden. Zum einen IMMER bevor man MODs einbaut oder sonstige Sachen am Forum verändert, zum anderen in regelmäßigen Abständen zum sichern der Benutzer und Beiträge.

Übersicht über die verschiedenen Möglichkeiten

Es gibt zum Sichern der Datenbank viele Möglichkeiten, die unterschiedliche Vor- und Nachteile haben:
  • phpBB Administrations-Bereich (PHP, Freeware, Bestandteil vom phpBB)
    Die Backupfunktion im Administrations-Bereich des phpBBs ist gut, wenn das Forum klein und MOD-frei ist. Bei größeren Datenbanken kann es jedoch sein, dass das Backup mit dieser Funktion nicht mehr korrekt funktioniert. Wenn MODs eingebaut wurden, die neue Tabellen in die DB einfügen, müssen diese manuell hinzugefügt werden. Ausserdem muss man immer ein funktionsfähiges Forum haben um dort ein Backup zu erstellen oder zurückzuspielen.
    Mehr Infos im Benutzerhandbuch (derzeit leider nur auf englisch):
    Database backup and restore für 3.1
    Database backup and restore für 3.2
  • phpMyAdmin (PHP, Frontend, Freeware)
    PhpMyAdmin ist das wohl am weitesten verbreitetste Frontend für MySQL Datenbanken. Es eignet sich sehr gut für Datenbanken bis ca. 2 MB, danach versagt die Rückspiel-Funktion. Auf langsamen Servern kann es auch sein, dass das PHP-Script vom Server abgebrochen wird. Evtuell hilft es große Tabellen einzeln zu sichern.
    Mehr Infos: Backup mit phpMyAdmin
  • MySqlDump (Hersteller: MySQL), (PHP, Befehl, Teil von MySQL)
    MySQL hat auch eine eigene Funktion um Backups zu machen. Diese Funktion ist wohl die beste und schnellste verfügbare Funktion überhaupt. Jedoch erlauben lange nicht alle Hoster den Zugriff für Kunden auf die Funktion. Bei einigen Hostern darf man nur per "Confix" auf diese Art ein Backup machen, bei anderen ist der direkte Zugriff per system() Befehl erlaubt.
    Mehr Infos: Backup mit mysqldump
  • BigDump (Nur einspielen von Backups, PHP, Tool, Freeware)
    Wer mit PhpMyAdmin ein Backup gemacht hat und es aufgrund der 2 MB Grenze nicht einspielen kann, kann dieses mit BigDump machen. BigDump ist sehr schnell und kommt auch mit sehr großen Datenbanken zurecht.
    Mehr Infos: Backup mit BigDump
  • HeidiSQL (Windows, Frontend, Freeware)
    HeidiSQL ist der Nachfolger von einer alten MySqlFront -Version. Es ist ein Desktopprogramm für Windows 32 [Win95b bis WinXP]. Der große Vorteil ist, dass es nicht auf PHP Basiert und somit kein (z.B.) 30 Sekunden Timeout hat. Mit HeidiSQL lassen sich auch sehr große Datenbanken einspielen und bBackupen. Jedoch benötigt man externen MySQL Zugriff. Freehoster bieten das meistens nicht an, größtere Hoster oft auf Nachfrage.
    Mehr Infos: http://www.heidisql.com
Legende:
Windows/Linux/PHP – Beschreibt, worauf das Backup-Programm/Script lauffähig ist
Freeware – Das Programm/Script ist kostenlos
Shareware – Das Programm/Script kann kostenlos getestet werden, muss danach aber bezahlt werden
Frontend – Es ist ein komplettes MySQL-Frontend, zum Zugriff auf die Datenbank. Es kann also mehr als nur ein Backup erstellen
Tool/Befehl – Es handelt sich nur um ein Backuptool oder Backupspcript, welches ausschließlich für Backups geschrieben wurde.

Detailanleitungen für die einzelnen Backuparten

Backup mit phpMyAdmin
Siehe auch: phpMyAdmin Installationsanleitung

Backup erstellen
  • rechter Frame: oben bei den Registerkarten "Exportieren" anklicken
  • sämtliche Tabellen markieren (oder die, die gesichert werden sollen)
  • Struktur und Daten auswählen
  • 'Drop Table' markieren
  • Senden ("ZIP" bzw. "gzip" auswählen, wenn Backup komprimiert werden soll) ankreuzen, wenn man den Dump herunterladen möchte
  • auf OK drücken
Backup wiederherstellen
  • rechter Frame: oben bei den Registerkarten "SQL" anklicken
  • mit dem "Durchsuchen" Button das Backup (*.sql) auf der Festplatte suchen
  • eventuell "gzip-komprimiert" auswählen
  • auf OK drücken
Wenn das Backup zu groß ist und es zu einem Timeout kommt, kann man es mit einer der anderen Methoden aus diesem Artikel versuchen. Wenn es absolut nicht funktioniert, sollte man eventuell einzelne Tabellen sichern/wiederherstellen und somit das Board in mehreren Schritten wiederherstellen.
Legende
  • Nur Struktur
    - nur Tabellenstrukur (Tabellen und Felder) wird gespeichert
  • Struktur und Daten
    - Tabellenstrukur mit samt Inhalt (Einträge) werden gespeichert
  • Nur Daten
    - nur Inhalt der Tabellen wird gespeichert
  • Ins XML-Format exportieren
  • LaTeX
    - Package mit Makros zur Textverarbeitung
  • Mit 'Drop Table'
    - Befehl zum Löschen der Tabellen, wenn diese bereits existieren, wird eingefügt
  • Vollständige 'INSERT's
    - Feldnamen werden in jede INSERT-Zeile eingetragen (vergrössert das Backup geringfügig)
  • Erweiterte 'INSERT's
    - INSERT-Befehl und Tabellenname werden nur einmalig pro Tabelle notiert (verringert das Backup geringfügig)
  • Tabellen- und Feldnamen in einfachen Anführungszeichen
    - Felder- und Tabellennamen werden mit ` umschlossen und dadurch als solche definiert
  • Senden
    - wird dies nicht ausgewählt, wird der Dump direkt im Browser dargestellt (online ab einer gewissen Grösse nicht ratsam)
    - wenn man das Backup herunterladen will, kann man zusätzlich noch auswählen, ob das Backup ZIP- oder gzip-komprimiert werden soll
Backup mit mysqldump
mysqldump ist ein Kommandozeilentool und sollte wenn möglich per SSH ausgeführt werden. Für ein Backup führt man folgenden Befehl aus:

Code: Alles auswählen

mysqldump -uUSERNAME -p -hHOSTNAME DATENBANKNAME > dump.sql
USERNAME, HOSTNAME und DATENBANKNAME müssen natürlich durch die eigenen Daten ersetzt werden. Das Passwort wird nach dem Starten des Befehls abgefragt. Das Tool erzeugt dann eine Datei dump.sql, welche die komplette DB enthält.

Für die Wiederherstellung führt man folgenden Befehl aus:

Code: Alles auswählen

mysql -uUSERNAME -p -hHOSTNAME DATENBANKNAME < dump.sql
Ausführen der Befehle ohne SSH-Zugang
Falls man keinen SSH-Zugang hat, muss man sich mit einer Notlösung behelfen: Ein Verzeichnis anlegen, welches die Rechte 777 besitzt. Dort eine PHP-Datei folgenden Inhalts anlegen:

Code: Alles auswählen

<?php
system("/usr/bin/mysqldump -uUSERNAME -pPASSWORT -hHOSTNAME DATENBANKNAME > /VOLLER_PFAD/dump.sql", $fp);
if ($fp==0) echo "Daten exportiert"; else echo "Es ist ein Fehler aufgetreten";
?>
Beachte, dass hier jeweils der volle Pfad angegeben muss, da die PATH-Umgebungsvariable oder das aktuelle Arbeitsverzeichnis möglicherweise abweichend sind.

Das Script für die Wiederherstellung sieht so aus

Code: Alles auswählen

<?php
system("/usr/bin/mysql -uUSERNAME -pPASSWORT -h Ihr.Datenbank.Server.de DATENBANKNAME < /VOLLER_PFAD/dump.sql", $fp); 
if ($fp==0) echo "Daten importiert"; else echo "Es ist ein Fehler aufgetreten";
?>
So sollten sich auch große DBs in den Griff bekommen lassen :)

Um herauszufinden, wie der VOLLE PFAD lautet, folgendes in eine pfad.php kopieren und (im /dump Ordner) auf dem Server ausführen:

Code: Alles auswählen

<?php echo dirname(__FILE__); ?>
Ausführen der Befehle auf dem eigenen PC
Falls der Provider externen Zugriff auf die MySQL-Datenbank erlaubt (nur selten der Fall), kann man sich auch lokal einen MySQL-Client installieren und die Befehle dann auf dem eigenen Rechner ausführen. Hierbei muss man beachten, dass der Hostname dann nicht mehr "localhost" sein darf und man unter Windows andere Pfade verwenden muss (C:\Programme\MySQL\[Pfad zur installierten MySQL-Version]\bin\mysqldump.exe anstatt /usr/bin/mysqldump).

Tipp: Backup komprimieren
Man kann das Backup auch mit gzip Komprimieren. Hier die Befehle:

Backup:

Code: Alles auswählen

/usr/bin/mysqldump -uUSERNAME -pPASSWORT -hHOSTNAME DATENBANKNAME | gzip > DATEI.gz
Wiederherstellung:

Code: Alles auswählen

/usr/bin/gunzip < DATEI.gz | /usr/bin/mysql -uUSERNAME -pPASSWORT -hHOSTNAME DATENBANKNAME
Backup mit BigDump
Zuerst müsst ihr euch Bigdump von Alexey Ozerov runterladen: https://www.ozerov.de/bigdump/usage/

Die ZIP-Datei müsst ihr z.B. mit WinZIP oder WinRAR entpacken. Ihr erhaltet dann die Datei "bigdump.php", die ihr mit einem Editor eurer Wahl öffnet. Folgende Zeilen in der "bigdump.php" müsst ihr anpassen:

Code: Alles auswählen

$db_server="localhost";
In den meisten Fälle stimmt "localhost". Ansonsten den Datenbankserver angeben.

Code: Alles auswählen

$db_name="DB-Name";
Hier sollte der Name eurer Datenbank stehen.

Code: Alles auswählen

$db_username="DB-User";
Hier sollte euer Benutzername für die Datenbank stehen.

Code: Alles auswählen

$db_password="DB-Passwort";
Hier sollte das Passwort für euren Benutzer der Datenbank stehn.

Code: Alles auswählen

$filename="namedersqldatei.sql";
Fall 1: Hier könnt ihr den Dateinamen der Backupdatei angeben, um sie später nicht auswählen zu müssen. Die Datei müsst ihr dann allerdings zusammen mit Bigdump in das gleiche Verzeichnis hochladen.
Fall 2: Ihr könnt auch einfach nur die "" stehen lassen. Alle möglichen Backupdateien, die im gleichen Verzeichnis wie Bigdump liegen, werden dann von Bigdump eingelesen. Wenn ihr Bigdump dann aufruft könnt ihr entweder eine dieser Backupdateien auswählen oder eine neue Backupdatei hochladen. Jedoch müsst ihr dann für das Verzeichnis noch die richtigen Berechtigungen setzen (chmod 777).

Bigdump unterstützt in beiden Fällen auch gzip-komprimierte Backupdateien (Dateiendung .gz). Dies ist für euch nützlich wenn ihr noch ein Modem, ISDN, usw. verwendet oder euer Webspace für eine unkomprimierte Backupdatei zu klein ist. Durch die gzip-Komprimierung ist die Größe der Backupdatei wesentlich geringer.

Code: Alles auswählen

$linespersession=3000;
Anzahl der Zeilen die in einer Session verarbeitet werden sollen. Müsst ihr nur anpassen, falls Bigdump den Import abbricht.

Code: Alles auswählen

$delaypersession=0;
Zeit in Millisekunden, die Bigdump zwischen zwei Sessions warten soll. Funktioniert allerdings nur, wenn JavaScript aktiviert ist. Müsst ihr auch Nur anpassen, wenn Bigdump den Import abbricht.

Jetzt müsst ihr eure Änderungen in der "bigdump.php" abspeichern und die Datei auf euren Webspace hochladen z.B. in das Verzeichnis "dump". Wenn ihr euch für den Fall 1 entschieden habt, dann müsst ihr jetzt eure Backupdatei hochladen.
Wenn ihr alles hochgeladen habt, dann ruft ihr die "bigdump.php" in eurem Browser auf (z.B. http://www.deinedomain.de/dump/bigdump.php).
Habt ihr den Dateinamen der Backupdatei in der "bigdump.php" angegeben, dann müsst ihr nur noch auf "Start Import" klicken. Wenn ihr euch vorher für den 2. Fall entschieden habt, dann müsst ihr jetzt eure Backupdatei, die ihr importieren wollt, in der Liste suchen und auf "Start Import" klicken. Ist eure Backupdatei noch nicht auf eurem Webspace, dann klickt auf den Button "Durchsuchen...", wählt eure Backupdatei aus und klickt auf "Upload". Die Backupdatei steht nun in der Liste und ihr müsst nur noch auf "Start Import" klicken.
Der Import wurde erfolgreich abgeschlossen, wenn "Congratulations: End of file reached, assuming OK" angezeigt wird. Zum Schluss solltet ihr noch die Backupdatei und "bigdump.php" auf eurem Webspace löschen.