Jeder, der mal eine Datenbank durch einen Crash oder durch eine Programmier-Unachtsamkeit verloren hat und keine Sicherung hatte, weiss wie schlimm das sein kann. Alles ist weg.
Dabei kann man sich sehr einfach vor solch einem Totalverlust schützen. Man lässt sich einfach in bestimmten Intervallen eine Sicherung der Datenbank per Email zuschicken. In Zeiten von Webmail-Diensten mit viel Speicherplatz wie “Google Mail” hat man hier zudem noch einen zusätzlichen Sicherungsfaktor.
Ich habe mir heute mal ein kleines Script geschrieben, mit dem man sich per Email den Inhalt einer Datenbank zuschicken lassen kann:
";
/* Systemcall */
system("/usr/bin/mysqldump -u".$dbuser." -p".$dbpw." -h ".$dbhost." ".$db." | /bin/gzip > ".$file, $fp);
if ($fp==0) echo "Dump generated"; else die("Ooops. An error occured!");
/* Prepare the email*/
$boundary = strtoupper(md5(uniqid(time())));
$mail_header = "From:".$from."\n";
$mail_header .= "MIME-Version: 1.0";
$mail_header .= "\nContent-Type: multipart/mixed; boundary=".$boundary;
$mail_header .= "\n\nThis is a multi-part message in MIME format -- Dies ist eine mehrteilige Nachricht im MIME-Format";
$mail_header .= "\n--".$boundary;
$mail_header .= "\nContent-Type: text/plain";
$mail_header .= "\nContent-Transfer-Encoding: 8bit";
$mail_header .= "\n\n".$message;
$file_content = fread(fopen($file,"r"),filesize($file));
$file_content = chunk_split(base64_encode($file_content));
$mail_header .= "\n--".$boundary;
$mail_header .= "\nContent-Type: application/octetstream; name=\"".$file."\"";
$mail_header .= "\nContent-Transfer-Encoding: base64";
$mail_header .= "\nContent-Disposition: attachment; filename=\"".$file."\"";
$mail_header .= "\n\n".$file_content;
$mail_header .= "\n--".$boundary."--";
/* Send the email */
mail($to,$subject,"",$mail_header);
?>
Den obigen Text kopiert man mit einem beliebigen Texteditor in eine neue Datei und speichert diese in einem (vornehmlich) geschützten Bereich (z. B. mail_backup.php) auf dem eigenen Webserver. Ruft man nun das Skript auf wird die Datenbank gesichert und dann automatisch an die gewünschte Email-Adresse geschickt.
Wenn man ein Hosting-Paket hat, mit dem man Crons verwalten kann, so kann man sich beispielsweise jeden Sonntag einen Backup schicken lassen — oder auch jeden Tag. Sollte man keinen Zugriff auf Crons haben, so kann man auch einen Dienst im Internet benutzen (z.B. Cron-Server).
system() darf man aber auf den meisten Hostern nicht aufrufen.
Ich empfehle http://www.mysqldumper.de/
Hai Patrick,
sollte aber nur mit ausgeschaltetem safemode funktionieren …
grüße
dein bruderherz
Das Problem mit dem ausführbaren system() kann man auch umgehen.
Das Script unter http://www.webmasterexpert.de/post12518.html
Leider funktioniert der Link nicht mehr. Habt Ihr ein Backup von dem Posting 😉
Leider funktioniert der Link nicht mehr.
Ich nutze zwar auch mysqldumper, aber das Script ist auf jedenfall mal einen Test Wert. Werde es vermutlich bei einem neuem Projekt verwenden, da mir mysqldumper bisschen zu aufgebläht ist.
Danke.
prima sache … easy und läuft sauber … thx! 😉
Super sache: einfach und funktionsfähig, da hätte ic selber drauf kommen können.
Der Link von MailBackup wegen dem nicht ausführbarem system() ist interessant!
Vielen Dank
Hi!
Ein tolles Skript muss ich sagen, ich habe nun ein kleines Problem……
/usr/bin/mysqldump existiert bei mir nicht, ich habe einen plesk server. Leider kenne ich mich im shell nicht so gut aus. Muss ich nur einen anderen pfad eintragen oder muss ich noch was installieren?
Gruß Uwe
sorry für meinen vorherigen Kommentag, völlig sinnlos.
Aber ich bekomme weiterhin die Fehlermeldung! Kann es in diesem Fall am Safemode liegen?
Hallo,
ich bekomme zwar die Mail, aber in der SQL-Datei steht nur folgendes drin:
— MySQL dump 10.9
— Host: localhost Database: mydb
— Server version 4.1.22-standard-log
/!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS /;
/!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION /;
/!40101 SET NAMES utf8 /;
/!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 /;
/!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 /;
/!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE=’NO_AUTO_VALUE_ON_ZERO’ /;
/!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;
Hat Jemand ne Ahnung??
Hallo ,mir wird zwar die Mail zugesandt ,nur leider hat der Datenbank Backup Anhang ein grösse von 0kb.Muss ich in der PHP Datei noch was anpassen ausser den Zugangsdaten zur Tabelle ?