Datenbank automatisch alle 12h zurücksetzen

  • Hallo,


    Ich möchte eine meiner Joomla-Webseiten automatisch alle 12h Stunden zurücksetzen lassen. Leider beitet mein hoster übers cPanel nichts dergleichen an. Nun habe ich mir überlegt, dass ich per phpmyadmin ein SQL-File der Datenbank exportieren könnte, um mit diesem dann über ein php-script die Datenbank zurück setzen zu lassen. Mit einem cron job könnte man das php-script automatisiert ausführen lassen.


    Ich benutze dazu folgendes php-script: https://www.codexworld.com/res…abase-sql-file-using-php/


    Das Problem ist nun, dass mit diesem Script kein richtiges zurücksetzen der Datenbank möglich ist. Wenn in der Datenbank mehr Einträge existieren als zum Zeitpunkt als das SQL-File exportiert wurde, dann werden diese zusätzlichen Einträge beibehalten und nur alle anderen überschrieben. Ich möchte mit dem script jedoch den kompletten Zustand der Datenbank zum Zeitpunkt des SQL-File exports wiederherstellen. Wie muss ich das script anpassen, damit meine gewünschte Funktionalität erreicht wird?


    Thx Manuel

  • Hi,


    irgendwie verstehe ich noch nicht was du meinst? Was soll Joomla zurücksetzen heißen? Willst du die komplette Datenbank alle 12h löschen und neu aus einem dump einspielen?

    Dann müsstest du ja alle 12h die gesamte Webseite auf Funktion überprüfen. Weil was ist, wenn import/Export einen Fehler werfen? Außerdem kommt es in dem Moment immer zu Unterbrechungen. Oder willst du nur eine bestimmte Tabelle die von dir entwickelt wurde automatisch leeren?

  • Ja, meine Idee war Joomla zurückzusetzen, indem ich die komplette Datenbank wieder auf den Stand zum Zeitpunkt des Backups bringe.

    Solange ich keine updates der Seite mache und immer das gleiche SQL-File verwende, sollten doch nicht plötzlich Fehler geworfen werden?

    Kurze Unterbrechungen würde ich in kauf nehemen. Die Webseite wird nicht allzu häufig besucht...

  • Du setzt damit natürlich nur die Hälfte zurück, weil wenn dein Filesystem korrupt ist, dann bringt die Datenbank wenig. Ich verstehe auch den Sinn nicht ganz.


    Aber du kannst ja mit PHP ne MySQL Verbindung aufbauen und dann dir erst alle Tabellen geben lassen, dann aus allen Tabellen die Inhalte, das in eine SQL Datei packen und dann wieder einspielen... Kannst dir ja Mal ansehen, wie so ein dump aus phpmyadmin aussieht :)

  • Dann ist so ein dump aus phpmyadmin "nur" ein Satz an SQL-Befehlen, um die Datenbank wieder gleich nachzubauen und nicht ein Backup der Datenbank selber?
    Drop Database scheint bei meinem hoster nur über das cPanel, nicht aber über SQL-Befehlen zu funktionieren. Wenn ich es in phpmyadmin versuche kommt folgende Meldung:

  • Dann ist so ein dump aus phpmyadmin "nur" ein Satz an SQL-Befehlen, um die Datenbank wieder gleich nachzubauen und nicht ein Backup der Datenbank selber?

    Genau das ist es meines Wissens. Was soll es auch mehr sein? Da sind ja alle Informationen zur Datenbank Tabellen mit Struktur und alle Inhalte der Tabellen enthalten. Das ist ja die vollständige Datenbank!


    Die User der Datenbank und entsprechende Rechte gehören glaube ich dem Datenbankserver also der MySQL Instanz und nicht einer einzelnen in der Instanz angelegten Datenbank.

  • Drop Database scheint bei meinem hoster nur über das cPanel, nicht aber über SQL-Befehlen zu funktionieren. Wenn ich es in phpmyadmin versuche kommt folgende Meldung:

    OK das ist natürlich ungünstig. Kannst ja Mal deinen Hoster fragen. Ich denke das ist ein Sicherheitsfeature (für die meisten auch sinnvoll, weil einmal gedroped ohne Backup für immer weg).


    Alternativ kannst du versuchen ob "truncate" funktioniert (das droped und legt direkt neu an) oder sonst einfach "delete * from XYZ". Dafür müsstest du dann aber vorher alle Tabellen holen und über das Array drüber iterieren, weil das musst du für jede Tabelle machen :)

  • Hallo,


    auf https://demo.joomisp.de habe ich exakt sowas in Betrieb.


    Jede volle Stunde kommt ein Cronjob und führt eine Shell-Skript aus, welches eine vorher erstellte ZIP Datei entpackt und den darin enthaltenen SQL-Dump einspielt.


    Um Joomla Updates Komfortabel weiter zu nutzen, habe ich ein weiteres Skript, welches mir gleich passende Backup.ZIPs liefert.


    Bist du fit im Skripten und hast die Möglichkeit einen System-Cronjob zu fahren? Also nicht per URL?

  • Ich habe beim Hoster nachgefragt: Anscheinend können Datenbanken nur mit dem cPanel gelöscht und angelegt werden - aus Sicherheitsgründen.

    Deshalb müsste ich tatsächlich mit

    "delete * from XYZ"

    arbeiten.


    Bist du fit im Skripten und hast die Möglichkeit einen System-Cronjob zu fahren? Also nicht per URL?

    Von Shell-Skrips habe ich keine Ahnung, falls du das meinst. Und ja, ich kann System-Cronjobs ausführen lassen. Jedoch soweit ich weiss nur php und shell skripte...

  • Truncate Table 'tabellen_name' leert eine Tabelle. In phpmyadmin kannst du dir den Befehl nach dem Ausführen anzeigen lassen, wenn du alle Tabellen anhakst, und sie leeren lässt. Den Befehl kopierst du dir dort heraus, und setzt ihn als erstes in den Dump, der wiederhergestellt werden soll.


    Mit Insert Into 'tabellen_name' kannst du sie entsprechend wieder füllen. Als Dump aus phpmyadmin brauchst du dann nur die Inhalte der Tabellen (mit auto_increment!).

  • KarEm

    In meinem verlinkten Anwendungsfall handelt es sich um eine Demo, wo der User eine Komponente ausprobieren kann, Bestellungen ausführt und Inhalte einfügt oder verändert. Nach kürzester Zeit wäre die Installation ziemlich "zugemüllt". Mit einem eigenen Modul lasse ich einen JS-Counter herabzählen, der darauf hinweist, dass jede Stunde die Demo zurückgesetzt wird.


    19leunam93

    Wie gesagt ich habe mir da 2 Shell Skript (backup.sh und reset.sh) gebaut, die ich natürlich manuell aufrufen kann, aber automatisiert eben über einen Cronjob.

    Man müsste sehen, inwieweit meine Skripte hier arbeiten, oder ob man sie modifizieren oder nach PHP umbauen muss.


    Evtl. bietet sowas aber auch Akeeba Backup???

    Es gibt hier durchaus CLI PHP Scripte für Cronjobs, ein Restore aus der Komponente sollte auch dabei sein, die Funktion könnten man dann evtl. wieder ph CLI-Skript/Cronjob ansteuern?

  • auf https://demo.joomisp.de habe ich exakt sowas in Betrieb.


    Jede volle Stunde kommt ein Cronjob und führt eine Shell-Skript aus, welches eine vorher erstellte ZIP Datei entpackt und den darin enthaltenen SQL-Dump einspielt.

    Also auf jeden Fall auch alle Dateien löschen und die Default-Dateien wieder einspielen! Nicht nur die Datenbank!

  • Guri

    In meinem Fall sind das, wie gesagt 2 Shell Skripte, welche ich händisch aber auch per Cronjob ansteuern kann.

    Das Eine erstellt mir ein neueres Backup, z.B. wenn es ein Joomla Update gab oder ich anderweitig was verändert habe, das Andere nimmt fertige ZIP-Dateien, entpackt diese über das Ziel und spielt den darin enthaltenen SQL Dump ein.


    Das sollte auch flotte beantworten.


    Das Skript hab ich über die Zeit auch immer weiter verfeinert. So löscht es heute u.a. den kompletten Web-Folder und entpackt anschließend ganz frisch die Daten vom ZIP. Das soll verhindern, dass evtl. vorhandene Dateien die nicht ins Web gehören nicht weiter vorhanden sind.

    Da es eine Demo ist, setze ich auch deutlich strengere Ordner & Datei-Rechte als in gewöhnlichen Installationen. Der Testuser muss auch nicht ALLES können...


    Wer Interesse daran hat, kann mir gerne eine PN schreiben, das vorhandene Skript ist nicht per Webcron aufrufbar.

    Kann man aber ganz bestimmt umbauen.