In der heutigen digitalen Welt ist die Sicherung von Daten eine wesentliche Aufgabe für jeden Webmaster oder Entwickler. Datenverlust kann katastrophale Folgen haben, sei es durch Hardwareausfälle, Cyberangriffe oder menschliches Versagen. Um dem entgegenzuwirken, stellen wir ein robustes und benutzerfreundliches PHP-Skript vor, das MySQL-Datenbanken und Verzeichnisse sichert und in einer verschlüsselten ZIP-Datei speichert. Das Beste daran? Dieses Skript ist kostenlos unter der GNU General Public License (GPL) verfügbar.
Funktionen des PHP-Backup-Skripts
- MySQL-Datenbank-Backup
Dieses Skript erstellt einen vollständigen SQL-Dump Ihrer MySQL-Datenbank, einschließlich aller Tabellen und Daten. - Verzeichnis-Backup
Zusätzlich zur Datenbank können Sie ein gesamtes Verzeichnis mit allen Dateien und Unterordnern sichern. - Verschlüsselte ZIP-Dateien
Die Backups werden in einer verschlüsselten ZIP-Datei gespeichert, um die Sicherheit Ihrer Daten zu gewährleisten. - Automatisierte Backups
Dank PHP können Sie dieses Skript problemlos in Ihre bestehenden Systeme integrieren und automatisierte Backups einrichten.
Verwendung des Skripts
Das PHP-Backup-Skript ist einfach zu bedienen. Nachfolgend finden Sie eine detaillierte Anleitung zur Implementierung und Ausführung des Skripts:
- PHP- und MySQL-Verbindungsdaten anpassen
Passen Sie die MySQL-Verbindungsdaten ($host
,$user
,$password
,$database
) und den Pfad zu dem Verzeichnis, das gesichert werden soll ($directoryToBackup
), an. - Zielverzeichnis und Passwort festlegen
Geben Sie das Zielverzeichnis für das Backup ($backupDir
) und das Passwort für die ZIP-Verschlüsselung ($zipPassword
) an. - Skript ausführen
Speichern Sie das Skript in einer PHP-Datei und führen Sie es aus.
<?php
/**
* Erstellt ein Backup einer MySQL-Datenbank und eines Verzeichnisses und speichert es in einem verschlüsselten ZIP-Archiv.
*
* @param string $host MySQL Hostname
* @param string $user MySQL Benutzername
* @param string $password MySQL Passwort
* @param string $database MySQL Datenbankname
* @param string $directoryToBackup Pfad zu dem Verzeichnis, das gesichert werden soll
* @param string $backupDir Pfad zu dem Verzeichnis, in dem das Backup gespeichert werden soll
* @param string $zipPassword Passwort für die ZIP-Verschlüsselung
* @license https://www.gnu.org/licenses/gpl-3.0.de.html
*/
function createBackup($host, $user, $password, $database, $directoryToBackup, $backupDir, $zipPassword)
{
// Aktuelles Datum im ISO-Format
$date = date('Y-m-d');
// ZIP-Dateiname
$zipFileName = $backupDir . '/backup_' . $date . '.zip';
// MySQL-Dump-Datei
$sqlDumpFile = $backupDir . '/backup_' . $date . '.sql';
// Erstelle eine Verbindung zur MySQL-Datenbank
$mysqli = new mysqli($host, $user, $password, $database);
if ($mysqli->connect_error) {
die('Verbindungsfehler (' . $mysqli->connect_errno . ') ' . $mysqli->connect_error);
}
// Erstelle den SQL-Dump
createSqlDump($mysqli, $sqlDumpFile);
// Schließe die MySQL-Verbindung
$mysqli->close();
// Initialisiere das ZIP-Archiv
$zip = new ZipArchive();
if ($zip->open($zipFileName, ZipArchive::CREATE | ZipArchive::OVERWRITE) !== TRUE) {
die('Fehler beim Erstellen der ZIP-Datei');
}
// Setze das Passwort für das ZIP-Archiv
$zip->setPassword($zipPassword);
// Füge die MySQL-Dump-Datei zum ZIP-Archiv hinzu
if (!$zip->addFile($sqlDumpFile, basename($sqlDumpFile)) || !$zip->setEncryptionName(basename($sqlDumpFile), ZipArchive::EM_AES_256)) {
die('Fehler beim Hinzufügen der SQL-Dump-Datei zum ZIP-Archiv');
}
// Funktion zum Hinzufügen von Dateien und Unterordnern zum ZIP-Archiv
addFolderToZip($directoryToBackup, $zip, '', $zipPassword);
// Schliesse das ZIP-Archiv
$zip->close();
// Lösche die MySQL-Dump-Datei
unlink($sqlDumpFile);
echo 'Backup erfolgreich erstellt: ' . $zipFileName;
}
/**
* Erstellt einen SQL-Dump der angegebenen MySQL-Datenbank.
*
* @param mysqli $mysqli MySQLi Verbindungsobjekt
* @param string $sqlDumpFile Pfad zur SQL-Dump-Datei
*/
function createSqlDump($mysqli, $sqlDumpFile)
{
$tables = $mysqli->query('SHOW TABLES');
$sqlDump = '';
while ($row = $tables->fetch_row()) {
$table = $row[0];
$createTable = $mysqli->query('SHOW CREATE TABLE ' . $table)->fetch_row();
$sqlDump .= "\n\n" . $createTable[1] . ";\n\n";
$rows = $mysqli->query('SELECT * FROM ' . $table);
$numFields = $rows->field_count;
while ($row = $rows->fetch_row()) {
$sqlDump .= 'INSERT INTO ' . $table . ' VALUES(';
for ($i = 0; $i < $numFields; $i++) {
if (isset($row[$i])) {
$sqlDump .= '"' . $mysqli->real_escape_string($row[$i]) . '"';
} else {
$sqlDump .= 'NULL';
}
if ($i < ($numFields - 1)) {
$sqlDump .= ',';
}
}
$sqlDump .= ");\n";
}
}
file_put_contents($sqlDumpFile, $sqlDump);
}
/**
* Fügt Dateien und Unterordner eines Verzeichnisses einem ZIP-Archiv hinzu.
*
* @param string $folder Pfad zum Verzeichnis
* @param ZipArchive $zip ZipArchive-Objekt
* @param string $folderInZip Pfad innerhalb des ZIP-Archivs
* @param string $zipPassword Passwort für die ZIP-Verschlüsselung
*/
function addFolderToZip($folder, $zip, $folderInZip = '', $zipPassword = '')
{
$handle = opendir($folder);
while (($file = readdir($handle)) !== false) {
if ($file == '.' || $file == '..') {
continue;
}
$filePath = $folder . '/' . $file;
$filePathInZip = $folderInZip . '/' . $file;
if (is_dir($filePath)) {
$zip->addEmptyDir($filePathInZip);
addFolderToZip($filePath, $zip, $filePathInZip, $zipPassword);
} else {
if (!$zip->addFile($filePath, $filePathInZip) || !$zip->setEncryptionName($filePathInZip, ZipArchive::EM_AES_256)) {
die('Fehler beim Hinzufügen der Datei ' . $filePath . ' zum ZIP-Archiv');
}
}
}
closedir($handle);
}
// Beispielaufruf
createBackup('localhost', 'dein_benutzername', 'dein_passwort', 'deine_datenbank', '/pfad/zu/deinem/verzeichnis', '/pfad/zu/backup/verzeichnis', 'dein_verschluesselungspasswort');
?>
Kostenloses PHP-Skript für MySQL- und Verzeichnis-Backup in Webhosting-Umgebungen