Umweltschutz

PHP-Skript zum Sichern und Wiederherstellen einer Datenbank: Dump erstellen - mit E-Mail-Benachrichtigung


Dieses Skript eignet sich auch für eine automatisierte Datensicherung in der Nacht, die Sie mit Hilfe eines CronJobs anlegen können. Sollte Ihr Tarif keinen CronJob besitzen, so können Sie diesen in der MembersArea unter ZUSATZPTIONEN dazu bestellen und dann unter CronJobs einrichten. Beachten Sie bitte, dass größere Datenbanken u.U. nicht mehr per Skript gesichert werden können, da das Skript ggf. an Serverrestriktionen stößt!


Folgende Schritte sind notwendig:

1. Legen Sie im FTP-Hauptverzeichnis Ihrer Domain einen Unterordner "backup" an.

2. Geben Sie über Ihr FTP-Programm dem Ordner eine Schreibberechtigung (CHMOD) von 777.

3. Erstellen Sie in dem Ordner eine PHP-Datei (db_backup.phpx) mit folgendem Inhalt:


<?php
######## einstellungen #############################################
$db_name = "IhreDatenBank";
$db_passwd = "IhrDatenBankPasswort";
$downloadlink_erstellen = "ja";

$bestaetigungsmail_senden = "ja";

$bestaetigungsmail_adresse = "IhreMailAdresse";
$bestaetigungsmail_betreff = "[BACKUP] Ihr Backupscript";

$sql_file = "dump_" . $db_name . "_" . date('Ymd_Hi') . ".sql";

####################################################################
################## AB HIER BITTE NICHTS MEHR ÄNDERN!!! ################

### daten überprüfen
if ( $db_name == "IhreDatenBank" or $db_passwd == "IhrDatenBankPasswort" )
{
die("FEHLER: Sie m&uuml;ssen zun&auml;chst Ihre Datenbankdaten im Script eingeben!");
}
if ( file_exists($sql_file) or file_exists($sql_file . ".gz") )
{
die("FEHLER: Das zu erstellende Dump existiert bereits!");
}

## dump erstellen
exec("mysqldump -u $db_name -p'$db_passwd' --quick --allow-keywords --add-drop-table --complete-insert --quote-names $db_name >$sql_file");
exec("gzip $sql_file");


### größe ermitteln
$datei = $sql_file . ".gz";
$size = filesize($datei);
$i = 0;
while ( $size > 1024 )
{
$i++;
$size = $size / 1024;
}
$fileSizeNames = array(" Bytes", " KiloBytes", " MegaBytes", " GigaBytes", " TerraBytes");
$size = round($size,2);
$size = str_replace(".", ",", $size);
$groesse = "$size $fileSizeNames[$i]";

### nachricht erstellen
$message = "Ihr Backup der Datenbank <b>" . $db_name . "</b> wurde durchgeführt.<br>";
$message .= "Die Größe des erstellten Dumps beträgt <b>" . $groesse . "</b>.<br>";

if ($downloadlink_erstellen == "yes" or $downloadlink_erstellen == "ja" or $downloadlink_erstellen == "1")
{
$link = 'http://'.$_SERVER['HTTP_HOST'].$_SERVER['PHP_SELF'];
$link = str_replace(basename(__FILE__),$datei,$link);
$message .= "Downloadlink: <a href=" . $link . ">" . $datei . "</a>";
}

## nachricht ausgeben
echo $message;

### mail versenden
$message = str_replace("<br>", "\r\n", $message);
$message = str_replace("<b>", "", $message);
$message = str_replace("</b>", "", $message);
if ($bestaetigungsmail_senden == "yes" or $bestaetigungsmail_senden == "ja" or $bestaetigungsmail_senden == "1")
{
if(!preg_match( '/^([a-zA-Z0-9])+([.a-zA-Z0-9_-])*@([a-zA-Z0-9_-])+(.[a-zA-Z0-9_-]+)+/' , $bestaetigungsmail_adresse))
{
echo "<br>FEHLER: Mail konnte nicht versendet werden, da die Adresse ung&uuml;ltig ist!";
}
else
{
mail($bestaetigungsmail_adresse, $bestaetigungsmail_betreff,
$message,"From: backupscript@{$_SERVER['SERVER_NAME']}\r\n" . "Reply-To: backupscript@{$_SERVER['SERVER_NAME']}\r\n")
or die("FEHLER: Mail konnte wegen eines unbekannten Fehlers nicht versendet werden");
echo "<br>Best&auml;tigungsmail wurde erfolgreich versandt!";
}
}
?>


Bitte ändern Sie im Quellcode folgende 3 Zeilen:

$db_name = "IhreDatenBank";
$db_passwd = "IhrDatenBankPasswort";

$bestaetigungsmail_adresse = "IhreMailAdresse";

Den Datenbanknamen und das Datenbankpasswort entnehmen Sie Ihrem KAS unter DATENBANK und setzen es in die jeweiligen Felder "IhreDatenBank" und "IhrDatenBankPasswort". Bei "IhreMailAdresse" setzen Sie bitte die E-Mail Adresse, an die Sie die Bestätigungsmail haben möchten, ein.

Sollten Sie über einen eigenen Managed Server (kein Shared Server Tarif) verfügen, so nennen Sie die PHP-Datei bitte „db_backup.php“ (ohne das „x“ am Ende). Auf einem ManagedServer ist der exec-Befehl i.d.R. freigeschalten, so dass eine Umschaltung auf PHP-CGI nicht erforderlich ist. Sollte Sie eine Fehlermeldung beim Testen des Skriptes erhalten , senden Sie unserem Support einen E-Mail-Auftrag zur Freischaltung des Befehls.


4. Rufen Sie die URL http://www.ihre-adresse-im-netz.de/backup/db_backup.phpx auf. Das Backupskript wird gestartet, legt eine Datenbanksicherung Ihrer MySQL-Datenbank an und kopiert diese als gepackte Datei mit dem Namen z.B. dumpDATUM.sql.gz in den Ordner „backup“.

Es ist normal, dass das DB-Backup viel kleiner ist als Ihnen die Datenbankgröße im PHPMyAdmin angezeigt wird.

Suche
in Titel
in Beschreibung