Backup mehrerer MySQL DBs in ein ZIP Archiv auf all-inkl.com Servern

Da ich alle Webseiten bei all-inkl.com hoste und täglich ein MySQL Backup erzeuge, dies aber natürlich nicht manuell machen will, habe ich mir mal ein Script geschrieben welches alle Datenbanken für mich sichert und in ein großes ZIP-Archiv packt. Das ganze Script kann man dann täglich via Cronjob laufen lassen und das ZIP-Archiv versenden oder auf anderen Servern speichern oder ähnliches.

Wichtig: Damit all-inkl.com den exec() Befehl erlaubt, muss die PHP-Datei .phpx als Endung besitzen!

Folgende Schritte laufen beim Backup ab:

  1. Backup der einzelnen Datenbanken als .sql Datei
  2. Packen jeder einzelnen .sql Datei mit GZIP, das verkleinert die Textdatei enorm!
  3. Erstellen eines ZIP-Archivs und hinzufügen aller GZIP Dateien, somit habe ich nur noch eine einzige Backupdatei und spare nochmal etwas Platz.
  4. Löschen der jetzt überflüssigen GZIP Dateien
  5. Generieren eines Downloadlinks für die ZIP-Datei

Damit habe ich eine einzige Datei mit allen Datenbanken erstellt und kann diese nun beliebig weiter nutzen, entweder nur auf dem Webspace liegen lassen, herunterladen, per FTP und PHP automatisch auf einen anderen Server übertragen, per E-Mail versenden oder sonst irgendetwas sinnvolles damit tun ;).

Hinweis: PHP muss die ZIP-Erweiterung installiert haben, außerdem muss exec() erlaubt sein. Dies ist bei all-inkl.com standardmäßig der Fall, bei anderen Hostern evtl. aber nicht! Das Script ist in einigen Punkten sehr auf all-inkl.com zugeschnitten, kann aber sicherlich für andere Hoster angepasst werden.

<!--?php // Backupordener (Pfad ab Webserver Root) $backupfolder = "/mysql_backup/"; // Datenbanken die gesichert werden sollen (DB-User =&gt; DB-Passwort)
// Der DB-Name ist bei all-inkl.com gleich dem DB-User!
$dbs = array('db1' =&gt; 'pw1',
	'db2' =&gt; 'pw2',
	'...' =&gt; '...');
 
// Einzelbackup der Datenbanken als GZIP
$dateien = array();
foreach ($dbs as $db =&gt; $pw) {
	$sql_file = "dump_".$db."_".date('YmdHis').".sql";
	exec("mysqldump -u ".$db." -p".$pw." --allow-keywords --add-drop-table --complete-insert --quote-names ".$db." &gt; ".$sql_file);
	exec("gzip ".$sql_file);
	$dateien[] = $sql_file.".gz";
	echo 'created backup file: '.$sql_file.'.gz&lt;br&gt;';
}
echo '&lt;br&gt;';
 
// Alle Backups in ein ZIP Archiv packen
$masterfile = "master_".date('YmdHis').".zip";
$zip = new ZipArchive();
if ($zip-&gt;open($masterfile, ZIPARCHIVE::CREATE) !== TRUE) {
	echo "&lt;b&gt;cannot open ".$masterfile."&lt;/b&gt;";
} else {
	foreach ($dateien as $datei) {
		$zip-&gt;addFile($_SERVER['DOCUMENT_ROOT'].$backupfolder.$datei, $datei);
		echo "added ".$datei." to zip file.&lt;br&gt;";
	}
	echo '&lt;br&gt;';
	$zip-&gt;close();
}
 
// GZIP Dateien loeschen
foreach ($dateien as $datei) {
	unlink($_SERVER['DOCUMENT_ROOT'].$backupfolder.$datei);
	echo 'file deleted: '.$datei.'&lt;br&gt;';
}
 
// Downloadlink erzeugen und anzeigen
$link = 'http://'.$_SERVER['HTTP_HOST'].$_SERVER['PHP_SELF'];
$link = str_replace(basename(__FILE__), $masterfile, $link);
echo "&lt;br&gt;&lt;br&gt;Downloadlink: ".$masterfile."";
?-->

(Bild von Tony Austin)

3 Kommentare zu „Backup mehrerer MySQL DBs in ein ZIP Archiv auf all-inkl.com Servern

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert