Am Ende der Seite finden Sie das komplette Beispiel als Download.
Systemvoraussetzung
- Linux
- PHP 4 >= 4.3.0
- PHP 5
- MySQL
- Sed (Stream-Editor)
- wahlweise ZIP, BZIP2, TARGZ
Datei(en)
backupImportDB.php
Dieses Skript ist das Gegenstück zu dem zuvor gezeigten Beispiel eines
Datenbank-Backups.
Das Programm liest die von Ihnen erstellten und komprimierten
Backups wieder zurück in die bestehende Datenbank. Bitte beachten
Sie, dass bestehende gleiche Tabellen, die sich in der zu ersetzenden Datenbank
befinden, überschrieben werden.
Hinweis
Sollte das Skript, nachdem Sie es ausgeführt haben, keine Backupdatei erzeugen,
lesen Sie bitte den Text zu Verzeichnisrechten im einleitenden Teil
„Grundlegende Informationen“ in diesem Kapitel. Höchstwahrscheinlich wird
es dann daran liegen, dass Sie nicht die erforderlichen Rechte für dieses
Verzeichnis besitzen und diese erst vergeben müssen.
Konfiguration
Vervollständigen Sie die benötigten Parameter in der Konfiguration mit den
Werten für Ihre MySQL-Datenbank.
Sollten Sie mit dem zuvor erklärten MySQL-Backup-Beispiel
eine Integritätsprüfung beim Erstellen der Backups aktiviert
haben, können Sie die einzulesende Backupdatei auf ihre „Herkunft“ überprüfen.
Anhand des MD5-Codes
in der Log-Datei
kann die einzulesende Backupdatei
verglichen werden – wichtig ist hierbei allerdings, dass es sich um den
Originalnamen der Datei handelt.
|
<?PHP
// Datenbank Hostname oder IP $self_config['dbhost'] = 'localhost';
// Datenbank Username $self_config['dbuser'] = 'dbuser';
// Datenbank Passwort $self_config['dbpassword'] = 'dbpassword';
// Datenbank Name $self_config['dbname'] = 'dbname';
// ZIP-Format ('zip' , 'bzip2' , 'targz') $self_config['zipformat'] = 'zip';
// Name der Backupdatei $self_config['backupfile'] = 'db152878808_2006-03-10_16-53-42.zip';
// Backupdatei nach Import löschen? - TRUE / FALSE $self_config['backupdelete'] = FALSE;
// Entpackte SQL-Datei nach Import löschen? - TRUE / FALSE $self_config['sqlfiledelete'] = FALSE;
// Backupverzeichnis $self_config['verz'] = 'backup/';
// Integritätsprüfung vornehmen? - TRUE / FALSE // Wird beim Einlesen der Backupdatei in die Datenbank genutzt $self_config['integritaet'] = TRUE;
// Name der Log-Datei für Integritätsprüfung $self_config['logfile'] = 'logfile.log';
|
Hier beginnt der eigentliche Programmcode. Sie sollten den Code nur dann
ändern, wenn Sie wirklich wissen, was Sie tun. Sie sollten sich bewusst sein,
dass der Programmcode nicht nur Löschfunktionen, sondern auch Shell-Befehle
enthält. Sollten Sie diesem Programmcode Benutzereingaben übergeben, so
prüfen Sie diese genau, bevor die Eingaben eventuell an die Shell mit übergeben
werden und Schaden anrichten! | $zip_format['zip'] = 'zip';
$zip_format['bzip2'] = 'tar.bz2'; $zip_format['targz'] = 'tar.gz';
$compressFile = $self_config['verz'] . $self_config['backupfile']; $checkCompressFile = TRUE;
|
Integritätsprüfung
Sie überprüft anhand des Logfiles, ob es sich um die original erstellte Backupdatei
handelt. Das soll gewährleisten, dass die einzulesende Datei nicht manipuliert
oder beim Senden beschädigt wurde. Sollte es sich um die Originaldatei
handeln, so wird $checkCompressFile auf TRUE gesetzt.
| if($self_config['integritaet'])
{ $checkCompressFile = FALSE;
$handle = fopen ($self_config['logfile'],"r"); while (($data = fgetcsv ($handle, 1000, "|")) !== FALSE) {
if($data[0] == $self_config['backupfile']) { if(md5_file($compressFile) == rtrim($data[1])) $checkCompressFile = TRUE; } } fclose ($handle);
} |
Backupdateien dekomprimieren
Dekomprimiert die zuvor erstellte Backupdatei in eine SQLDatei
und löscht
danach, je nach Angabe in der Konfiguration, die komprimierte Backupdatei.
- -x entpackt die Datei
- -d dekomprimieren
- -c in die Standard Ausgabe schreiben
| if($self_config['zipformat'] == "zip")
{ $tarName .= '.' . $zip_format[$self_config['zipformat']]; $shellBefehl = "unzip -x $compressFile"; exec($shellBefehl); } else if($self_config['zipformat'] == "bzip2") { $shellBefehl = "bzip2 -cd $compressFile | tar -xf -"; exec($shellBefehl); } else { $tarName .= '.' . $zip_format[$self_config['zipformat']]; $shellBefehl = "gzip -cd $compressFile | tar -xf -"; exec($shellBefehl); }
$pattern = '/'.$zip_format[$self_config['zipformat']].'/';
$sqlFile = @preg_replace($pattern,"",$compressFile) . 'sql';
if($self_config['backupdelete'])
@unlink($compressFile);
|
Backupimport der Datenbank
Führt den Backupimport aus und spielt den Inhalt zurück in die Datenbank. Je
nach Angabe in der Konfigurationsdatei wird danach die *.sqlDatei
gelöscht. | if(@file_exists($sqlFile) && $checkCompressFile == TRUE)
{ $mysqlDump = 'mysql '; $mysqlDump .= '--host="' . $self_config['dbhost'] . '" '; $mysqlDump .= '--user="' . $self_config['dbuser'] . '" '; $mysqlDump .= '--password="' . $self_config['dbpassword'] . '" '; $mysqlDump .= $self_config['dbname'] . ' < ' . $sqlFile; exec($mysqlDump); }
if($self_config['sqlfiledelete'])
@unlink($sqlFile);
?>
|
Dieses Skript aus dem SELFPHP KOCHBUCH wurde von SELFPHP unter dem "Tarif Mc500" von McAc.net-Webhosting erfolgreich ausgeführt und getestet!
Auf der Übersichtseite unter "McAc.net – Webhosting zu diesem Buch" finden Sie weitere Informationen zu dem Webhostingpaket, dass durch SELFPHP getestet wurde.
Download
|
Alle Beispiele als PHP-Datei(en)
Hier haben Sie die Möglichkeit, sich sämtliche auf dieser Seite gezeigten Beispiele als PHP-Dateien direkt downzuloaden.
Umständliches Copy & Paste ist daher nicht mehr notwendig, da alle Beispiele sofort ausprobiert werden können.
Sie haben bei der Auswahl der bereitgestellten Downloads mehrere Möglichkeiten, je nachdem welches Komprimierungsverfahren Sie bevorzugen.
|
Zurück zur Übersichtsseite
|