Celi: MySQL-Dump erstellen und wieder einspielen

hi!

es soll einmal täglich ein mysql-dump erstellt werden.

Weiters soll der gleiche dump einmal täglich in eine andere
MySQL auf einem Server eingespielt werden.

Das wieder einspielen der Daten wollte ich ja so
ungefähr machen:

mysqli_multi_query($connection, file_get_contents('dump.sql'))

mysqli  wird aber leider bei meinem Provider nicht unterstützt.

Eine verbindung zu MySQL kann PHP aber herstellen,
sonst würde joomla auch nicht laufen können.

Der backup und einspiel prozess soll automatisiert ablaufen (cronjob)

wie hat das script dafür auszusehen?

Danke
Celi

  1. yo,

    falls (in aller regel eher nicht, aber provider fragen) du zugriff auf die datenbank dateien hast und die datenbank auch mal offline ist, kannst du via ftp die dateien einmal täglich einfach runterladen.

    außerdem fragen, ob dein provider überhaupt cronjobs bereitsstellt. den befehl zum dump könnte dann über die betriebssystem-ebene ablaufen und die dump datei dann wieder per ftp runtergelanden werden. also ich würde das weniger über php machen.

    Ilja

    1. falls (in aller regel eher nicht, aber provider fragen) du zugriff auf die datenbank dateien hast

      nein, habe ich nicht

      außerdem fragen, ob dein provider überhaupt cronjobs bereitsstellt.

      ja - tut er

      den befehl zum dump könnte dann über die betriebssystem-ebene ablaufen und

      nein kann es nicht ... und das hat seinen Grund...

      also ich würde das weniger über php machen.

      Gut - ich nicht!
      Meine Frage war konkret wie das mit PHP geht ...

      Danke
      Celi

      1. Hallo Forum,

        den befehl zum dump könnte dann über die betriebssystem-ebene ablaufen und

        nein kann es nicht ... und das hat seinen Grund...

        Und der wäre? Bei meinem Hoster geht das.

        also ich würde das weniger über php machen.

        Gut - ich nicht!
        Meine Frage war konkret wie das mit PHP geht ...

        Dann musst du halt einen SQL-Parser in PHP bauen, mit dem du deine Datei in einzelne Queries zerlegen kannst.

        explode(';', $file_get_contents('dump.sql')) ist keine Lösung, weil Zeichenketten in einzelnen Queries Semikola enthalten können.

        Gruß
        Alexander Brock

  2. Hallo Celi,

    mit
    #########################
    $sql_inhalt = '';
    $rs = mysql_list_tables ($db, $conn);
    while($table = mysql_fetch_row($rs)){
     $sql = "SELECT * FROM ".$table[0]."";
     $rs2 = @mysql_query($sql);
     while($ds = mysql_fetch_row($rs2)){
      $sql_fields = array();
      for($i=0;$i<mysql_num_fields($rs2);$i++){
       $sql_fields[] = mysql_escape_string($ds[$i]);
      }
      $sql_inhalt .= "INSERT INTO ".$table[0]." VALUES ('".implode("','",$sql_fields)."');\n";
     }
    }
    ########################
    hast du schon mal die Queries in einer Datei.
    Soll die komplette DB "gespiegelt" werden müsstest du jetzt die Tabelleninhalte auf der ZielDB löschen, dann aus der $sql_inhalt Zeilenweise einlesen (trennen bei \n) und die Queries ausführen.
    Es kann aber sein das bei sehr vielen Queries die Laufzeit des Scripts (wird in der php.ini eingestellt) nicht ausreicht.

    Gruß Rainer