Du bist nicht angemeldet.

  • Anmelden
  • Registrieren

Boa

Fortgeschrittener

Beiträge: 200

1

06.04.2007, 09:47

Automatische Mysql Backup Sicherung per e-Mail mit php

Wer kennt das nicht. Man hat ein Script (Forum) und andauernd gibt es Hackversuche und man liest viel über defekte Datenbanken.
Um da ein wenig Sicherheit zu haben, kann man die Datenbank automatisch sichern.
Wenn es der eigene Server ist, kann man das bequem über sh scripte machen, ist es jedoch nur Webspace, dann ist es schwieriger und man ist auf den Provider (Webhoster) angewiesen, das tägliche Sicherungen gemacht werden. Das wird leider nicht bei allen Webhostern gemacht, deshalb habe ich mal ein kleines script geschrieben, welches die Datenbank sichert und diese dann an eine Mailadresse sendet. Für die Automatik ist allerdings ein Cronjob notwendig.
Wer keine eigenen Cronjops einrichten kann, googelt nach kostenlosen Cronjobs.

Boa

Fortgeschrittener

Beiträge: 200

2

06.04.2007, 09:58

Die Sicherungsdatei für das Backup generieren

Zuerst legen wir ein Verzeichnis an backup und vergeben die Rechte 777 dafür.
Nun kommt das Sicherungsscript

PHP-Quelltext

1
2
3
4
#!/bin/sh
DATUM=`date +%d-%m`
#Datenbank sichern  der Pfad muss der absolute Pfad sein.
mysqldump -hlocalhost -u'username' -p'passwort' datenbank > /var/www/webxxx/html/backup/dbname.$DATUM.db.sql;

dort die Werte für username passwort und datenbank ersetzen und den Pfad wohin das Backup gespeichert werden soll.

Diese Datei im texteditor unter backup.pl abspeichern und in das cgi-bin
Verzeichnis hochladen und die Rechte 755 vergeben

Den korrekten Pfad für die Sicherung kriegt man über phpinfo.php

PHP-Quelltext

1
2
3
<?
PHPINFO();
?>

Boa

Fortgeschrittener

Beiträge: 200

3

06.04.2007, 10:14

Die Datei um die Sicherungadatei per php via eMail zu versenden

Das Herzstück des Scriptes zum Versenden der gesicherten Datei.

PHP-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
<?php
error_reporting(E_ALL);
$datum date("d-m") ;
$file "dbname.$datum.db.sql";
$file_name "dbname.$datum.db.sql";
$from "absender@domain.com"//Absendermailadresse(sollte Stimmen)
$to "sicherung@sicherungsmaiadresse.com"//bei Verwendung von freemailern z.B Googlemail muss nach der ersten Sicherung die Mail aus dem Spamordner herrausgenommen werden
$message "Hier kann noch Text hineinverfasst werden";
$boundary strtoupper(md5(uniqid(time())));
$mail_header  "From:DBSicherung <$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_name\"";
$mail_header .= "\nContent-Transfer-Encoding: base64";
$mail_header .= "\nContent-Disposition: attachment; filename=\"$file_name\"";
$mail_header .= "\n\n$file_content";
$mail_header .= "\n--$boundary--";
mail($to,"Betreff",$message,$mail_header);
?>

Dort die Mailadressen von und zu ergänzen.
Die Absenderadresse sollte auch von der Domain kommen wo das Sicherungssript läuft, da die Mail sonst nicht ankommt (Spam)

Diese datei als backup.php abspeichern und in den ordner domain.com/backup hochladen.

Boa

Fortgeschrittener

Beiträge: 200

4

06.04.2007, 10:23

Die Automatik per Cronjob

Crontab 1:
1 0 * * * curl http://www.domain.com/cgi-bin/backup.pl.php
Alternativ falls nicht möglich
1 0 * * * curl http://www.domain.com/cronjobvirtual.php
die Datei cronjobvirtual.php

PHP-Quelltext

1
2
3
<?
virtual("/cgi-bin/backup.pl");
?>

Crontab 2
10 0 * * * curl http://www.domain.com/backup/backup.php
Crontab 3
15 0 * * * curl http://www.domain.com/backup/deletebackup.php
Die Datei deletebackup.php

PHP-Quelltext

1
2
3
4
5
<?
$datum date("d-m") ;
$file "dbname.$datum.db.sql";
unlink($file);
?>

Thema bewerten