Hallo,
seit Stunden verusche ich bereits erfolglos eine Datenbank aus einer Datei wiederherzustellen, die ich zuvor mit mysqldump erzeugt habe.
Kurze Skizze meines Projekts:
Gehostet auf 1&1 mit professionellem Paket, aber kein dezidierter Server.
Benutzer eines komplexen datenbankbasierten, mandantenfähigen PHP-Programms sollen die Möglichkeiten erhalten, per Knopfdruck ein Backup ihrer Datenbank zu erzeugen. Sie haben keinen Einfluss darauf, unter welchem Namen und wo dieses Backup gespeichert wird, sie sehen nur eine Liste der von Ihnen angelegten Backups. Die Backups werden vom Programm auf dem Server außerhalb des öffentlich zugängigen Bereichs gespeichert. Die Benutzer sollen nun ebenfalls durch Mausklick die Möglichkeit erhalten, ein gewünschtes Backup auszuwählen und wiederherzustellen, d.h. die Daten der aktuellen Datenbank komplett durch die gespeicherten Daten zu ersetzen.
Das ist mein Ansatz:
Über das Skript:
wird erfolgreich das Datenbank-Backup erzeugt. Das Backup ist valide. Ich kann die datei über phpmyadmin hochladen und die zuvor entleerte (nicht gelöschte - ich habe da keinen Zugriff bei 1&1!) Datenbank wieder mit gültigen und funktionsfähigen Daten füllen.
Zur Wiedeherstellung war nach kurzer Internet-Recherche das folgende mein erster Versuch:
Das funktionierte nicht. Es gab zwar keine Fehlermeldung, aber es ist auch rein gar nichts passiert. Der return_value des PHP-Befehls system() enthielt allerdings den Wert '1'. Ich versuchte dann erstmal zu überprüfen, ob das Entpacken der gezippten Datei überhaupt funktionert. Das schaltete ich also vor:
Das war erfolgreich. Die Datei wurde erzeugt und der return_value von system() war '0'.
Aber weder 'mysql'...
...noch 'mysqlimport'...
konnten die Daten wiederherstellen. Wieder passierte nichts und der return_value war '1'.
Ich habe auch versucht die Datei zu öffnen, mit fread() einzulesen und den ganzen String als Query abzusenden, aber das gab einen Syntax-Fehler. Was merkwürdig ist, denn der Import der exakt gleichen Datei über phpmyadmin geht problemlos!! Ist aber auch nicht der Ansatz, den ich fahren will, denn einige der unkomprimierten Dump-Files sind bereits ca. 80 MB groß!. (Mein Testfile ist nur 800 KB groß!)
Bin ich hier komplett auf dem Holzweg? Gibt es einen groben Fehler in meinen Überlegungen? Hat jemand Erfahrungen oder einen Tipp, der mir weiterhelfen könnte?
Danke im Voraus...
hbergman
seit Stunden verusche ich bereits erfolglos eine Datenbank aus einer Datei wiederherzustellen, die ich zuvor mit mysqldump erzeugt habe.
Kurze Skizze meines Projekts:
Gehostet auf 1&1 mit professionellem Paket, aber kein dezidierter Server.
Benutzer eines komplexen datenbankbasierten, mandantenfähigen PHP-Programms sollen die Möglichkeiten erhalten, per Knopfdruck ein Backup ihrer Datenbank zu erzeugen. Sie haben keinen Einfluss darauf, unter welchem Namen und wo dieses Backup gespeichert wird, sie sehen nur eine Liste der von Ihnen angelegten Backups. Die Backups werden vom Programm auf dem Server außerhalb des öffentlich zugängigen Bereichs gespeichert. Die Benutzer sollen nun ebenfalls durch Mausklick die Möglichkeit erhalten, ein gewünschtes Backup auszuwählen und wiederherzustellen, d.h. die Daten der aktuellen Datenbank komplett durch die gespeicherten Daten zu ersetzen.
Das ist mein Ansatz:
Über das Skript:
PHP-Code:
system(sprintf(
'mysqldump --opt --hex-blob --complete-insert --extended-insert --quick --create-options -h%s -u%s -p"%s" %s | gzip > %s',
$dbhost,
$dbuser,
$dbpass,
$dbname,
"path_and_filename.sql.gz");
Zur Wiedeherstellung war nach kurzer Internet-Recherche das folgende mein erster Versuch:
PHP-Code:
system(sprintf('gunzip < %s | mysql -u%s -p%s -h%s %s',
"path_and_filename.sql.gz",
$dbuser,
$dbpass,
$dbhost,
$dbname
));
PHP-Code:
system('gunzip path_and_filename.sql.gz > path_and_filename.sql');
Aber weder 'mysql'...
PHP-Code:
system(sprintf('mysql -u%s -p%s -h%s %s < %s',
$dbuser,
$dbpass,
$dbhost,
$dbname,
"path_and_filename.sql"
));
PHP-Code:
system(sprintf('mysqlimport -u%s -p%s -h%s %s %s',
$dbuser,
$dbpass,
$dbhost,
$dbname,
"path_and_filename.sql"
));
Ich habe auch versucht die Datei zu öffnen, mit fread() einzulesen und den ganzen String als Query abzusenden, aber das gab einen Syntax-Fehler. Was merkwürdig ist, denn der Import der exakt gleichen Datei über phpmyadmin geht problemlos!! Ist aber auch nicht der Ansatz, den ich fahren will, denn einige der unkomprimierten Dump-Files sind bereits ca. 80 MB groß!. (Mein Testfile ist nur 800 KB groß!)
Bin ich hier komplett auf dem Holzweg? Gibt es einen groben Fehler in meinen Überlegungen? Hat jemand Erfahrungen oder einen Tipp, der mir weiterhelfen könnte?
Danke im Voraus...
hbergman
Kommentar