PHP Maniac

Das PHP Blog für PHP-Profis und alle die es werden wollen

MySQL Datenbanken mit Backupskript sichern

13 Mai, 2009 (23:19) | Code-Schnipsel, Grundlagen, MySQL, Server | Von: PHP Maniac

Das regelmäßige Sichern von MySQL Datenbanken sollte eigentlich längst zum Standard für jeden Websitebetreiber geworden sein. Jedoch vertrauen viele immernoch darauf, dass schon nichts passieren wird. Ist dann der Ernstfall eingetreten, so ist das böse Erwachen vorprogrammiert: Die wertvollen Daten der MySQL Datenbank sind weg, Backups sind nicht vorhanden. Mit ein wenig Glück hat der Hoster vielleicht noch eine Sicherheitskopie, in 99% der Fälle bieten die Hoster dies jedoch höchstens aus Kulanz an und die Leistungen sind keinesfalls Bestandsteil des Hostingpakets. Somit sollte man auch nicht auf den Hoster setzen, sondern seine eigenen Backups erstellen.

Die einfachste Möglichkeit für ein automatisiertes Sicher von MySQL Datenbanken ist der Aufruf eines Backupskripts mit Hilfe eines Cronjobs. Wird das Backup-Skript aufgerufen, so erstellt es einen Dump der Datenbank, welcher dann z.B. per Email oder auf einen externen FTP Server übertragen werden kann. In keinem Fall sollten die Backups allerdings auf dem Server direkt verbleiben, da bei einem Festplattenproblem mit dem Server somit sowohl die MySQL Datenbank, als auch die Backups unbrauchbar werden können.

Für das Sichern der Daten bedienen wir uns dem MySQL Tool „mysqldump“, dieses ist ein Linux Kommandozeilenprogramm, welches Dumps von MySQL Datenbanken erstellen kann. Zum Aufruf verwende ich die system() Funktion von PHP, der als ersten Parameter der Aufruf von mysqldump übergeben wird. Den optionalen, zweiten Parameter verwende ich für eine Überprüfung, ob der Befehl erfolgreich ausgeführt wurden konnte. Da ein Backup von größeren Datenbanken auch durchaus mal mehreren Minuten dauern kann, sollte die maximale Ausführungszeit der PHP Skripte weiterhin durch den Aufruf von set_time_limit() auf unendlich oder einen ausreichend großen Wert gesetzt werden.

set_time_limit(0);
$user = "benutzername";
$passwort = "geheim";
$host = "localhost";
$dbname = "mysql_datenbank";
$filename = getcwd().'/backup.sql';

system('/usr/bin/mysqldump -u'.$user.' -p'.$passwort.' -h '.$host.' '.$dbname.' > '.$filename, $fp);
		
if ($fp==0) 
{
    //Backup-Datei per FTP oder Email übertragen
}
else
{
   echo "Backup fehlgeschlagen!";
}

Der Rest des Skripts sollte eigentlich selbsterklärend sein. Zu beachten ist allerdings noch, dass der Inhalt der Datenbank im Klartext gesichert wird. Daher empfiehlt es sich das Verzeichnis für dieses Backupskript mit htaccess oder ähnlichem gegen unbefugten Zugriff zu schützen. Andernfalls könnte sich jemand den Dump der Datenbank herrunterladen und so an wichtige Daten oder Passwörter gelangen.

Neben den Datenbanken, sollte das Backupskript weiterhin so erweitert werden, dass auch eure PHP Skripte und sonstigen Daten regelmäßig gesichert werden. Je nach Verwendung müssen diese Backups jedoch nicht täglich oder gar mehrfach täglich durchgeführt werden, was sich hingegen bei gut frequentierten Webseiten und deren MySQL Datenbanken durchaus anbietet.

Be Sociable, Share!

Schreibe einen Kommentar