
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:
- Backup der einzelnen Datenbanken als .sql Datei
- Packen jeder einzelnen .sql Datei mit GZIP, das verkleinert die Textdatei enorm!
- Erstellen eines ZIP-Archivs und hinzufügen aller GZIP Dateien, somit habe ich nur noch eine einzige Backupdatei und spare nochmal etwas Platz.
- Löschen der jetzt überflüssigen GZIP Dateien
- 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 => DB-Passwort) // Der DB-Name ist bei all-inkl.com gleich dem DB-User! $dbs = array('db1' => 'pw1', 'db2' => 'pw2', '...' => '...'); // Einzelbackup der Datenbanken als GZIP $dateien = array(); foreach ($dbs as $db => $pw) { $sql_file = "dump_".$db."_".date('YmdHis').".sql"; exec("mysqldump -u ".$db." -p".$pw." --allow-keywords --add-drop-table --complete-insert --quote-names ".$db." > ".$sql_file); exec("gzip ".$sql_file); $dateien[] = $sql_file.".gz"; echo 'created backup file: '.$sql_file.'.gz<br>'; } echo '<br>'; // Alle Backups in ein ZIP Archiv packen $masterfile = "master_".date('YmdHis').".zip"; $zip = new ZipArchive(); if ($zip->open($masterfile, ZIPARCHIVE::CREATE) !== TRUE) { echo "<b>cannot open ".$masterfile."</b>"; } else { foreach ($dateien as $datei) { $zip->addFile($_SERVER['DOCUMENT_ROOT'].$backupfolder.$datei, $datei); echo "added ".$datei." to zip file.<br>"; } echo '<br>'; $zip->close(); } // GZIP Dateien loeschen foreach ($dateien as $datei) { unlink($_SERVER['DOCUMENT_ROOT'].$backupfolder.$datei); echo 'file deleted: '.$datei.'<br>'; } // Downloadlink erzeugen und anzeigen $link = 'http://'.$_SERVER['HTTP_HOST'].$_SERVER['PHP_SELF']; $link = str_replace(basename(__FILE__), $masterfile, $link); echo "<br><br>Downloadlink: ".$masterfile.""; ?--> |
(Bild von Tony Austin)
Hmm also wenn du Systemzugriff hast, warum nutzt du dann nicht einfach ein simples Shellscript? :)
Weil ich keinen Systemzugriff habe ;)
Lediglich gzip und mysqldump sind erlaubt
Danke für den Tipp. Das probiere ich doch gleich mal aus.