Teil 2: Tipps & Tricks: Websites sichern
- Tipps & Tricks: Websites sichern
- Teil 2: Tipps & Tricks: Websites sichern
Das Sichern über phpMyAdmin ist Handarbeit und für regelmäßige Sicherungen unpraktisch. Hierfür bietet sich das automatisierte Erstellen eines Dumps an. Basis ist hier das Anlegen des Dumps per Konsole bzw. Eingabeaufforderung. Die Syntax ist sehr einfach:...
Das Sichern über phpMyAdmin ist Handarbeit und für regelmäßige Sicherungen unpraktisch. Hierfür bietet sich das automatisierte Erstellen eines Dumps an. Basis ist hier das Anlegen des Dumps per Konsole bzw. Eingabeaufforderung. Die Syntax ist sehr einfach:

mysqldump user=Benutzername password=
Passwort Datenbankname >dump.sql
Optional können Sie noch eine Liste der Tabellennamen hinter dem Datenbanknamen angeben. Und auch das Komprimieren des Dumps in einem Archiv können Sie direkt in der Anweisung erledigen:
mysqldump user=Benutzername
.password=Passwort Datenbankname |
.gzip >dump.sql.gz
Wenn Sie auf Nummer sicher gehen wollen, sperren Sie die Tabellen beim Erstellen des Dumps mit der Option lock-tables. Ansonsten kann es passieren, dass gerade von Nutzern in die Datenbank geschrieben wird, während Sie die Sicherung vornehmen. Dadurch sind unter Umständen einzelne Tabellen im Dump inkonsistent. Diese Gefahr ist vor allem bei Websites mit vielen Besuchern und häufiger Nutzerinteraktion hoch. Das Sperren und Sichern sollten Sie in diesem Fall aber in Zeiten machen, in denen die Site nicht stark frequentiert ist.
Diesen Kommandozeilenaufruf können Sie auf einem Linux-basierten Webserver mit einem CronJob wiederholt ausführen. Unter Windows gibt es mit dem Systemdienst Schedule ähnliche Möglichkeiten. Die meisten Hoster bieten in ihren Kundenmenüs Eingabemasken, um das Erstellen von CronJobs zu erleichtern. Sollten Sie bei einem dedizierten Server komplett auf sich gestellt sein, helfen viele Tutorials weiter, z. B. unter:
www.selflinux.org/selflinux/html/cron.html
www.newbie-net.de/anleitung_cron.html.
Zurück auf den Server
Die Sicherung alleine reicht allerdings gerade bei Datenbanken nicht, um sich sicher zu fühlen. Sie müssen die Daten auch zurücksichern können. Am besten ist es, wenn Sie die notwendigen Schritte vorab dokumentieren. Damit Sie dabei keine bösen Überraschungen erleben, sollten Sie die Rücksicherung regelmäßig testen und auch den jeweils erstellten SQL-Dump überprüfen. Sie sollten feststellen, ob alle Tabellen enthalten sind - am besten versuchen Sie auf dem lokalen Entwicklungsrechner eine entsprechende Rücksicherung. Per phpMyAdmin können Sie eine leere Datenbank auswählen oder eine neue Datenbank erstellen. Anschließend gehen Sie auf Importieren und wählen die Datei mit dem Dump. Gepackte Dateien lassen sich im Normalfall dank automatischer Erkennung direkt importieren. Weiterhin sollten Sie den Zeichensatz korrekt angeben. Sie finden ihn in der Datenbankverwaltung der Originaldatenbank.

Probleme
Meistens klappt die Rücksicherung problemlos, allerdings nur meistens. Das häufigste Problem ist die Dateigröße des Dumps bzw. die maximale Ausführzeit für PHP-Skripte. Diese Probleme entstehen vor allem beim Einsatz von phpMyAdmin.

Für die optimale Ausführzeit können Sie beim Importieren in phpMyAdmin einen teilweisen Import wählen. Dann startet der nächste Import erst nach einer festgelegten Anzahl an Abfragen. Beim Abbruch vorher erfahren Sie, wie viele Abfragen ausgeführt wurden. Eine Alternative ist, selbst den SQL-Dump in einem Texteditor in mehrere Teile zu unterteilen. Bei vielen Systemen, z. B. bei Typo3, gibt es auch Tabellen für Caching und Ähnliches, deren Inhalte nicht gesichert werden müssen.
Ein weiteres Problem können ältere MySQL- oder auch phpMy- Admin-Versionen sein. Hier gibt es beim Export die Möglichkeit, Kompatibilitätsangaben vorzunehmen. Beispielsweise können Sie einen MySQL 4.0-kompatiblen Dump erstellen. Aber auch SQL-Code, der für Microsoft SQL-Server oder PostgreSQL funktioniert, lässt sich automatisch generieren.
Wenn Sie den Dump per Konsole wieder einspielen möchten, vermeiden Sie zumindest die Probleme mit der Ausführungszeit:
cat dump.sql | mysql user=
.Benutzername password Datenbankname
Sie werden dann noch nach Ihrem Passwort gefragt und benötigen als Basis natürlich auch eine leere Datenbank.
Um die Dump-Datei und auch andere Dateien regelmäßig zu sichern, bietet sich der Versand per E-Mail an. Die Dateien müssen dabei als Dateianhang angefügt werden, da ansonsten Probleme mit dem Zeichensatz entstehen können. Für den Versand als E-Mail sind entsprechende Tools erforderlich.

Für die Konsole bieten sich als Alternativen z. B. "mutt" oder "MetaMail" an. Mit mutt würden Sie einen Dump z. B. wie folgt verschicken:
echo "Text der Nachricht" | mutt -s
."Sicherung DB" -a dump.sql.tgz
.empfaenger@domain.de
Mit MetaMail könnte der Versand wie folgt aussehen:
metasend -b -t empfaenger@domain.de
.-s "Sicherung DB" -m application/
.octet-stream -f dump.sql.tgz
Wer keinen Zugriff auf die Kommandozeile hat, kann auch den Versand per PHP oder einer anderen Server-seitigen Technologie vornehmen. Hier ein einfaches Beispiel, das die PEAR-Klassen Mail und Mail_Mime verwendet (https://pear.php.net):
<?php
include(Mail.php);
include(Mail/mime.php);
$message = new Mail_mime();
$message->setTXTBody("Text der
.Nachricht");
$message->addAttachment
.("dump.sql.gz");
$body = $message->get();
$extraheaders = array("From" =>
."me@example.com", "Subject" =>
."Sicherung DB");
$headers = $message->headers
.($extraheaders);
$mail = Mail::factory("mail");
$mail->send("somebody@example.com",
.$headers, $body);
?>
Aus Sicherheitsgründen bietet es sich beim Versand per E-Mail natürlich an, die Daten zu verschlüsseln, z. B. kann hier per PHP-Skript direkt die Dump-Datei verschlüsselt werden oder man verwendet eine E-Mail-Verschlüsselung per GPG.
Zum Automatisieren lassen sich in allen drei Fällen natürlich wieder CronJobs verwenden, die die Konsolenanweisungen ausführen oder in regelmäßigen Abständen das PHP-Skript zum Versand aufrufen.