8schpi
Goto Top

Mysql Rücksicherung per PHP bzw. Cronjob

Rücksicherung einer Mysql Datenbank automatisieren.

Frohe Weihnachten allerseits.

Ich möchte eine Datenbank automatisch (per CronScript) rücksichern. Zweck der Übung ist, dass ich eine Demoumgebung haben möchte, die quasi alle 24 Stunden zurückgesetzt wird. Dazu soll ein vorher erstellter Dump der Datenbank per CronScript zurückgesichert werden. Ich habe schon folgendes Ausprobiert:
      <?php
      exec('mysql -u dbuser -p dbname < ./dump.sql');  
      ?>
Leider funktioniert das nicht. Der Webhoster ist All-inkl. Ich habe natürlich Zugriff auf CronJobs. Die PHP Datei oben soll der Cronjob werden...
Hat jemand eine Idee? Danke.

Content-Key: 104718

Url: https://administrator.de/contentid/104718

Printed on: April 19, 2024 at 08:04 o'clock

Member: EvilMoe
EvilMoe Dec 24, 2008 at 17:57:58 (UTC)
Goto Top
Warum nicht einfach so. Warum dein Versuch nicht funktioniert denke ich mal das du kein Zugriff auf "exec" haben wirst.

<?
 mysql_connect('localhost', 'name', 'passwort');  
 mysql_select_db('dbname');  
 mysql_query(readfile('./dump.sql'));  
?>
Member: 8schpi
8schpi Dec 25, 2008 at 09:53:57 (UTC)
Goto Top
Zugriff auf exec() habe ich (http://www.all-inkl.de/index.php?open=faq&sek=wichtig&session_i ...) unter Punkt 5). Ein weiteres Problem dass ich habe ist, dass ich auch die automatische Sicherung per Perl und Mysqldumper nicht hinbekomme. Wahrscheinlich hat beides die gleiche Ursache.
Sobald ich zuhause bin werde ich das obige Beispiel ausprobieren. Woher erfahre ich eigentlich worauf ich genau Zugriff habe, bzw. welche Fehlermeldungen ausgegeben werden?
Member: 8schpi
8schpi Dec 25, 2008 at 21:45:14 (UTC)
Goto Top
Also ich habe die obigen Zeilen mal ausprobiert. Ich bekomme jetzt den Inhalt von der dump.sql Datei beim Aufruf der PHP Datei angezeigt. Warum wird der Inhalt der Datei nicht in die Tabelle eingefügt, sondern auf dem Bildschirm angezeigt?
Member: EvilMoe
EvilMoe Dec 25, 2008 at 21:54:05 (UTC)
Goto Top
Zitat von @8schpi:
Also ich habe die obigen Zeilen mal ausprobiert. Ich bekomme jetzt den
Inhalt von der dump.sql Datei beim Aufruf der PHP Datei angezeigt.
Warum wird der Inhalt der Datei nicht in die Tabelle eingefügt,
sondern auf dem Bildschirm angezeigt?

Sorry, readfile gibt den Inhalt sofort aus und nicht als Rückgabewert. Ersetze mal readfile gegen file_get_contents.

Auch wenn du Zugriff auf exec hast halte ich das zur Rücksicherung in diesem Fall nicht notwenig da PHP die nötigen Funktionen bietet.

Woruaf man Zugriff hat? Naja ausprobieren^^ oder mit phpinfo nachgucken welche Module geladen sind. Fehlermeldungen kann man sich anzeigen lassen indem man am Anfang der PHP Datei schreibt: error_reporting(E_ALL);

Damit werden alle Fehler/Warnungen angezeigt. Hoffe ich habe die Frage richtig verstanden...
Member: 8schpi
8schpi Dec 25, 2008 at 22:23:15 (UTC)
Goto Top
ok, das "restore-skript" sieht jetzt so aus:
<?

mysql_connect('localhost', 'user', 'passwort');  
mysql_select_db('dbname');  
mysql_query(file_get_contents('pfad_zur_sql_datei'));  

?>

ich bekomme den inhalt der datei jetzt nicht mehr angezeigt. es wird gar nichts mehr angezeigt. aber der inhalt der sql datei wird auch nicht ausgeführt / in die db eingefügt.

auch mit
error_reporting(E_ALL);

am anfang der datei wird nichts angezeigt...
Member: EvilMoe
EvilMoe Dec 25, 2008 at 22:29:55 (UTC)
Goto Top
Mit file_get_contents wird auch nix mehr angezeigt. Du könntest überprüfen mit mysql_error() ob ein Fehler beim ausführen des SQL Querys aufgetreten ist.

Also nach mysql_query()

echo mysql_error();

Ich denke mal du hast auch alles ausgetauscht wie den Benutzernamen, Passwort und die Datei???

Da ich nicht weiß was in deiner SQL Datei steht kann ich auch nicht sagen ob das überhaupt funktionieren kann wie du dir das vorstellst. Wenn nämlich in deiner SQL alles INSERT's sind und die Datenbanken auch erstellt werden dann müsste man vorher die Datenbanken löschen.
Member: 8schpi
8schpi Dec 25, 2008 at 22:30:48 (UTC)
Goto Top
es liegt nur noch an der form der sql datei... ich hab mal eine manuelles "drop table 'wichtige_tabelle'" statt des fil_get_contents('pfad_zur_sql_datei') geschrieben. dann habe ich gemerkt, dass der rest funktioniert. jetzt muss ich nur noch rausbekommen, wie ich die datei in die richtige form bekomme.
Member: EvilMoe
EvilMoe Dec 25, 2008 at 22:37:08 (UTC)
Goto Top
Zitat von @8schpi:
es liegt nur noch an der form der sql datei... ich hab mal eine
manuelles "drop table 'wichtige_tabelle'" statt
des fil_get_contents('pfad_zur_sql_datei') geschrieben. dann
habe ich gemerkt, dass der rest funktioniert. jetzt muss ich nur noch
rausbekommen, wie ich die datei in die richtige form bekomme.

Du weißt aber das dort der Pfad zu deinem SQL Dump drin stehen muss? ALso z.B. "./ordner./dumps./file.sql".

Wie ich schon sagte. Ich weiß nicht was in deiner SQL Datei steht vielleicht ist auch ein manuelles DROP Table nötig
Member: 8schpi
8schpi Dec 25, 2008 at 23:05:29 (UTC)
Goto Top
wahrscheinlich ist die lösung zum greifen nahe...

sehr wahrscheinlich liegt es an der form der sql datei. das "drop table wichtige_tabelle" funktioniert jetzt auch schon mit dem lesen aus der datei heraus. nur der komplette dump muss jetzt noch in form gebracht werden. aber das spare ich mir für morgen auf. danke für die hilfe. ich melde mich wenn ichs hinbekommen habe.

leider wird das noch etwas dauern weil es ziemlich zeitintensiv ist...