MySQL-/ MariaDB-Datenbanksicherung mit PHP via mysqldump und scp
- Aktualisiert: Sonntag, 18. Dezember 2022 15:24
- Geschrieben von Mazin Shanyoor
Einfach und elegant lässt sich die Sicherung von eine oder mehrere Datenbanken über PHP in Kombination mit mysqldump erreichen.
Was ist mysqldump
mysqldump ist ein Sicherungstool, das zur MySQL gehört. Mit mysqldump können Sicherungskopien von einzelnen oder mehren MySQL-Datenbanken sowie einzelner Tabellen erstellt werden. Der Befehl kann auf der Kommandozeile oder innerhalb eines Scripts ausgeführt werden und erstellt eine SQL-Datei, die die Struktur und die Daten der Datenbank enthält.
PHP-Backup-Script für mehrere ausgewählte MySQL-/MariaDB-Datenbanken via scp mit anschließender E-Mail-Benachrichtigung
Das in Listing 1 vorgestellte Script sichert und komprimiert ausgewählte Datenbanken aus einem MySQL- oder MariaDB-Datenbankmanagementsystem. Anschließend wird über PHP-Mail eine Benachrichtigungs-E-Mail versand.
Listinng 1: PHP-Sicherungsscript für mehrere Datenbanken
<?php
// Verbindungsparameter für die MySQL-/ MartaDB
$mysql_host = 'localhost';
$mysql_user = 'root';
$mysql_password = 'password';
// Verbindungsparameter zum externen Backup-Server
$extern_host = 'IP-Adresse';
$extren_user = 'ExternerUser';
$extern_password = 'ExternesPasswort';
// Datenbanken auswählen
$databases = array("db1", "db2", "db3");
// Pfad zum Speicherort des Backups
$backup_path = '/Pfad/zum/Speicherort/backups/';
// Sicherung starten
foreach($databases as $database) {
// Zeitstempel für Dateinamen erstellen
$timestamp = date("Ymd_");
$uhr = date("_H-i-s");
// Dateiname fürden Backupfile zusammenbauen
$backup_file = "$timestamp$database$uhr.sql.gz";
// Befehl für mysqldump erstellen
$command = "mysqldump -h $mysql_host --user=$mysql_user --password=$mysql_password $database | gzip > $backup_path$backup_file";
// Sicherung ausführen
system($command);
// Optionale Sicherung --- Start ---
// Die komprimierten MySQL-Backups via scp sichern
// ---------------------------------------
$connection = ssh2_connect("$extern_host", 22);
// Authentifizierung mit Benutzername und Passwort
ssh2_auth_password($connection, "$extren_user", "$extern_password");
// Datei von lokalem Pfad auf Remote-Server übertragen
ssh2_scp_send($connection, "$backup_path$backup_file", '/exterener/server/pfad/zum/$backup_file"', 0644);
// -----------------------------------
// Optionale Sicherung --- Ende ---
}
// E-Mail-Benachrichtigung senden
mail("Diese E-Mail-Adresse ist vor Spambots geschützt! Zur Anzeige muss JavaScript eingeschaltet sein!", "MySQL Backup", "Die Sicherung der MySQL-Datenbanken wurde erfolgreich durchgeführt. Dateiname: $backup_file");
?>
Weitere Parameter in "$command" sind möglich
In der Variable "$command" aus Listing 1 können je nach Versionsstatus der MySQL noch verschieden Parameter zusätzlich eingefügt werden.
Listing 2: Erzeugung eines performanteren MySQL-/ MariaDB-Dumps über die "$command"-Variable
$command = "mysqldump -h $mysql_host --user=$mysql_user --password=$mysql_password --events $database --ignore-table=mysql.innodb_index_stats --ignore-table=mysql.innodb_table_stats | gzip > $backup_path$backup_file";
Komplette Sicherungen aller MySQL-/ MariaDB-Datenbanken
Listing 3: Gesamte Sicherung eines MySQL-/ Maria-Datenbankmanagementsystems über ein PHP-Script
<?php
// Verbindungsparameter für die MySQL-/ MartaDB
$db_host = "localhost";
$db_user = "rooti";
$db_pass = "EigenesPasswort";
// Verbindungsparameter zum externen Backup-Server
$extern_host = 'IP-Adresse';
$extren_user = 'ExternerUser';
$extern_password = 'ExternesPasswort';
// Pfad zum Speicherort des Backups
$backup_path = '/Pfad/zum/Speicherort/backups/';
// Zeitstempel für Dateinamen erstellen
$timestamp = date("Ymd_");
$uhr = date("_H-i-s");
// Dateiname fürden Backupfile zusammenbauen
$backup_file = "$timestamp$database$uhr.sql.gz";
// Erstelle Dump der Datenbank
$command = "mysqldump --user=$db_user --password=$db_pass --host=$db_host $db_name --all-databases | gzip > $backup_path$backup_file";
exec($command);
// Optionale Sicherung --- Start ---
// Die komprimierten MySQL-Backups via scp sichern
// ---------------------------------------
$connection = ssh2_connect("$extern_host", 22);
// Authentifizierung mit Benutzername und Passwort
ssh2_auth_password($connection, "$extren_user", "$extern_password");
// Datei von lokalem Pfad auf Remote-Server übertragen
ssh2_scp_send($connection, "$backup_path$backup_file", '/exterener/server/pfad/zum/$backup_file"', 0644);
// -----------------------------------
// Optionale Sicherung --- Ende ---
// E-Mail-Benachrichtigung senden
mail("Diese E-Mail-Adresse ist vor Spambots geschützt! Zur Anzeige muss JavaScript eingeschaltet sein!", "MySQL Backup", "Die Sicherung der MySQL-Datenbanken wurde erfolgreich durchgeführt. Dateiname: $backup_file");
?>
Erzeung eines Performantes Dumps über die "$command"-Variable
In der Variable "$command" aus Listing 3 können je nach Versionsstatus der MySQL noch verschieden Parameter zusätzlich eingefügt werden. Gerade bei sehr vielen und großen Datenbanken innerhalb eines DBMS macht dieser performanterer Dump-Ansatz sehr viel Sinn.
Listing 4: Erzeugung eines performanteren MySQL-/ MariaDB-Dumps über die "$command"-Variable
$command = "mysqldump --user=$db_user --password=$db_pass --host=$db_host $db_name --events --all-databases --ignore-table=mysql.innodb_index_stats --ignore-table=mysql.innodb_table_stats | gzip > $backup_path$backup_file";