Datenbank-Backup per PHP-Script

In diesem Tutorial erstellen wir eine PHP-Datei, mit der schnell und einfach ein Datenbankbackup erstellt werden kann. Diese ist bei einigen WebHostern gelegentlich sehr hilfreich, wenn diese keinen externen Link zu dem phpMyAdmin anbieten.

Erklärung:

  1. Datenbank-Einstellungen: Ersetzen Sie die Platzhalter $host, $username, $password und $database mit Ihren tatsächlichen Datenbank-Informationen.
  2. Backup-Ordner: Der Ordner backups/ wird verwendet, um die Backup-Dateien zu speichern. Sie können diesen Ordner nach Ihren Wünschen anpassen. Stellen Sie sicher, dass der Ordner beschreibbar ist.
  3. Dateiname: Der Dateiname für das Backup wird generiert, indem der Datenbankname und das aktuelle Datum und die Uhrzeit verwendet werden.
  4. mysqldump-Befehl: Der Befehl mysqldump wird verwendet, um die Datenbank zu exportieren. Er enthält die Datenbank-Einstellungen und den Ausgabedateinamen.
  5. Befehl ausführen: Die Funktion exec() führt den mysqldump-Befehl aus.
  6. Überprüfung: Das Skript überprüft, ob die Backup-Datei erstellt wurde, um den Erfolg des Backups zu bestätigen.

Sie sehen die fertigen Codezeilen für die Datei dann aus:

<?php

// Datenbank-Einstellungen
$host = 'localhost'; // Ihr Datenbank-Host
$username = 'your_username'; // Ihr Datenbank-Benutzername
$password = 'your_password'; // Ihr Datenbank-Passwort
$database = 'your_database'; // Der Name Ihrer Datenbank

// Ordner für Backups
$backup_dir = 'backups/';

// Erstelle den Ordner, falls er nicht existiert
if (!is_dir($backup_dir)) {
    mkdir($backup_dir);
}

// Dateiname für das Backup
$date = date('YmdHis');
$backup_file = $backup_dir . $database . '_' . $date . '.sql';

// Befehl für mysqldump
$command = "mysqldump -h $host -u $username -p$password $database > $backup_file";

// Führe den Befehl aus
exec($command);

// Überprüfe, ob das Backup erfolgreich erstellt wurde
if (file_exists($backup_file)) {
    echo "Datenbank-Backup erfolgreich erstellt: " . $backup_file;
} else {
    echo "Fehler beim Erstellen des Datenbank-Backups.";
}

?>

Anwendung:

  • Speichern Sie das Skript als sqlbackup.php in einem Ordner auf Ihrem Webserver.
  • Stellen Sie sicher, dass der Ordner backups/ im selben Verzeichnis wie das Skript existiert und beschreibbar ist.
  • Rufen Sie das Skript über Ihren Webbrowser auf (z.B. http://yourdomain.com/sqlbackup.php).

Wichtige Hinweise:

  • Sicherheit: Schützen Sie Ihr Skript und den Backup-Ordner, um unbefugten Zugriff zu verhindern (z.B. mittels .htaccess).
  • mysqldump: Stellen Sie sicher, dass das mysqldump-Tool auf Ihrem Server verfügbar ist.
  • Pfad: Möglicherweise müssen Sie den Pfad zu mysqldump im Befehl anpassen, falls er nicht im Systempfad enthalten ist.
  • Fehlerbehandlung: Das Skript enthält grundlegende Fehlerbehandlung. Sie können diese erweitern, um detailliertere Informationen zu erhalten.
  • Bei jedem Aufrufen der Datei sqlbackup.php wird ein Backup erstellt!

Erweiterungen der sqlbackup.php

1. Download-Link

Die sqlbackup.php Datei lässt sich noch um einige sinnvolle Features erweitern, wie etwa einem Download-Link für die zuletzt erstellte Backup-Datei:

// Überprüfe, ob das Backup erfolgreich erstellt wurde
if (file_exists($backup_file)) {
    echo "Datenbank-Backup erfolgreich erstellt: " . $backup_file . "<br>";

    // Generiere den Download-Link
    $download_link = '<a href="' . $backup_file . '">Backup herunterladen</a>';
    echo $download_link;
} else {
    echo "Fehler beim Erstellen des Datenbank-Backups.";
}

2. Größe der Backup-Datei

Größe: Wir können die Dateigröße des Backups anzeigen, bevor der Download-Link generiert wird.

	$filesize = filesize($backup_file);
	$filesize_mb = round($filesize / (1024 * 1024), 2);

3. um HTML und CSS erweitern

HTML-Struktur: Das Skript ist jetzt in eine grundlegende HTML-Struktur eingebettet.
CSS-Styling: CSS-Code wurde hinzugefügt, um das Layout zu zentrieren, einen Container mit Rahmen und Schatten zu erstellen und den Download-Link als Button zu gestalten.

<!DOCTYPE html>
<html>
<head>
    <title>Datenbank-Backup</title>
    <style>
        body {
            font-family: sans-serif;
            display: flex;
            justify-content: center;
            align-items: center;
            min-height: 100vh;
            background-color: #435165;
        }

        .container {
            background-color: #fff;
            padding: 20px;
            border-radius: 5px;
            box-shadow: 0 2px 5px rgba(0, 0, 0, 0.1);
            text-align: center;
        }
		.container h1 {
			text-align: center;
			color: #5b6574;
			font-size: 24px;
			padding: 20px 0 20px 0;
			border-bottom: 1px solid #dee0e4;
		}

        .button {
            display: inline-block;
            padding: 10px 20px;
            background-color: #4CAF50;
            color: white;
            text-decoration: none;
            border-radius: 5px;
        }
		.error-message {
			width: 100%;
			padding: 15px;
			margin-top: 20px;
			background-color: #e06c75;
			border: 0;
			font-weight: bold;
			color: #ffffff;
			transition: background-color 0.2s;
			color: #fff;
		}
        .backup-table {
            margin-top: 20px;
            width: 100%;
            border-collapse: collapse;
        }

        .backup-table th, .backup-table td {
            padding: 8px;
            border: 1px solid #ddd;
            text-align: left;
        }

        .backup-table th {
			background-color: #54585d;
			border: 1px solid #54585d;
			color: #ffffff;
        }
		a {
		color: #356fbb;	
		}
    </style>
</head>
<body>

<div class="container">
		<h1>Datenbank Backup-Datei</h1>
...
</div>
</body>
</html>

4. Backup-Liste in einer Tabelle

Die Backup-Liste in einer Tabelle mit einer Spalte für die Dateigröße (in MB) darstellt:

    // Liste aller Backups im Verzeichnis anzeigen
    $backups = glob($backup_dir . $database . '_*.sql');

    if (!empty($backups)) {
        echo '<table class="backup-table"><thead><tr><th>Dateiname</th><th>Größe (MB)</th><th>Download</th></tr></thead><tbody>';
        foreach ($backups as $backup) {
            $filesize_bytes = filesize($backup);
            $filesize_mb = round($filesize_bytes / (1024 * 1024), 2); // Größe in MB umrechnen
            echo '<tr><td>' . basename($backup) . '</td><td>' . $filesize_mb . '</td><td><a href="' . $backup . '">Download</a></td></tr>';
        }
        echo '</tbody></table>';
    }

5. Erstellungsdatum der Backups

Das Erstellungsdatum der Backups in der Tabelle anzeigt:

        // Erstellungsdatum aus dem Dateinamen extrahieren (Format: YYYYMMDDHHMMSS)
        $date_str = substr(basename($backup), strlen($database) + 1, 14);
        $date = DateTime::createFromFormat('YmdHis', $date_str);
        $formatted_date = $date->format('d.m.Y H:i:s');

6. sql, .zip oder .gzip

Eine aktualisierte Version des Skripts, die es Ihnen ermöglicht, das Backup-Format (.sql, .zip oder .gzip) in der Datei einzustellen

// Änderbar: Backup-Format (sql, zip oder gzip)
$backup_format = 'gzip';

// Komprimierung, falls erforderlich
if ($backup_format == 'zip') {
    $command = "zip $backup_file.zip $backup_file.sql";
    exec($command);
    unlink("$backup_file.sql"); // SQL-Datei nach dem Zippen löschen
    $backup_file .= '.zip';
} elseif ($backup_format == 'gzip') {
    $command = "gzip $backup_file.sql";
    exec($command);
    $backup_file .= '.sql.gz';
} else {
    $backup_file .= '.sql';
}

Download

Hier könnt Ihr die vollständige sqlbackup.php kostenlos herunterladen und zum eigenen Gebrauch verwenden.

sqlbackup.zip | (Dateigröße: 1,9 KiB, 60 Downloads)

Viel Erfolg bei der Verwendung des Datenbank-Backup-Skripts!

0 Kommentare

Hinterlasse einen Kommentar

An der Diskussion beteiligen?
Hinterlasse uns deinen Kommentar!

Schreibe einen Kommentar

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