Backup Problem

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Backup Problem

    Guten Morgen,

    ich habe mir das Skript von der Seite http://www.php-resource.de/forum/sho...ghlight=backup herunter geladen. Soweit funktioniert auch alles. Nur wird der Fortschrittsbalken nicht angezeigt. Das Skript läuft ohne Probleme im Hintergrund.

    Hier kann das Skript getestet werden: http://www.berliner-auto-markt.de/backup/dump.php

    Je mehr Datensätze die Datenbank enthält, desto länger dauert das Aufrufen des Fortschrittsbalken. Wäre euch über jeden Tipp sehr dankbar!


    MFG
    Benji

  • #2
    Fortschrittsbalken?

    Also ich habe bisher nichts von einem Fortschrittsbalken gehört, außer du meinst den Balken rechts unten am Browser.

    Und wenn schon, wieso brauchst du das?


    Floriam
    PHP Handbuch - MySQL Handbuch - PHP Einsteiger Tutorial - CSS Referenz - Browserunterstützung von CSS

    Kommentar


    • #3
      Ich brauche das nicht unbedingt. Eine Ausgabe wie in etwa:

      Die Datenbank wird gerade gesichert. Bitte haben Sie einen Moment Geduld! Am Ende der Sicherung soll dann folgende Mitteilung ausgegeben werden. Das Datenbankbackup wurde erfolgreich abgeschlossen.


      MFG
      Benji

      Kommentar


      • #4
        Sollte das schon eingebaut sein (also im Basis Script)?
        PHP Handbuch - MySQL Handbuch - PHP Einsteiger Tutorial - CSS Referenz - Browserunterstützung von CSS

        Kommentar


        • #5
          Im Basisscript ist es noch nicht eingebaut. Dort wird wie gesagt nur der Fortschrittsbalken angezeigt.


          MFG
          Benji

          Kommentar


          • #6
            Dort wird wie gesagt nur der Fortschrittsbalken angezeigt.
            Nur wird der Fortschrittsbalken nicht angezeigt.

            Interessant, mal ist es so, mal ist es so..


            Nochmals zu deinem letzten Beitrag: Und was ist bitte das Problem?
            PHP Handbuch - MySQL Handbuch - PHP Einsteiger Tutorial - CSS Referenz - Browserunterstützung von CSS

            Kommentar


            • #7
              Sorry. Ich erklär es dir noch mal. In dem Skript wird bereits der Balken dargestellt. Dies geschieht aber nicht immer. Wird z.B. ein Backup von einer kleiner Datenbank vorgenommen, dann wird alles korrekt angezeigt. Nehme ich dagegen eine sehr grosse Datenbank, dann blickt nur die Seite mehrmals und es wird mir nur das Ergebnis angezeigt. Ich hoffe nun dass du mein Problem verstanden hast.


              MFG
              Benji

              Kommentar


              • #8
                Klar blinkt die Seite, weil das Script sich selbst aufruft, um somit die PHP-Timeout Grenze nicht zu erreichen

                Wenn du das ganz unschön lösen wolltest, dann müsstest du nur bei jedem ganz normalen Aufruf (man ist nicht fertig mit dem Back-Up) den Text ausgeben.

                Ich bin jedoch für einen I-Frame lösung. Das Script einfach druchlaufen lassen, auf der Seite (nicht im I-Frame) ausgeben lassen dass das Back-Up läuft, und dann am Ende im I-Frame JS Code einfügen, dass die Seite aktualisiert ist, wo dann die Erfolgsmeldung steht.

                Der I-Frame soll natürlich nicht sichtbar sein..
                PHP Handbuch - MySQL Handbuch - PHP Einsteiger Tutorial - CSS Referenz - Browserunterstützung von CSS

                Kommentar


                • #9
                  Vielen Dank für deinen Tipp. Ich weiss nun was der Fehler ist. Ich lasse dieses Skript in einer Vorlage laufen. Nehme ich keine Vorlage, so läuft es wunderbar. Wie kann ich dennoch das Skript mit einer Vorlage zum laufen bringen? Hier ist der Code:

                  PHP-Code:
                  <?
                  include("../config.php");

                  $backup_path="../mysql/";
                  $compression=0;
                  $anzahl_zeilen=5000;
                  $anzahl_zeilen_restore=1000;

                  $nl="\n"; // neue Zeile-Code 

                  function get_def($mysqldb, $table)
                  {
                      global $conn,$nl;
                      $def = "";
                      $def .= "DROP TABLE IF EXISTS $table;".chr(1).$nl;
                      $def .= "CREATE TABLE $table (".$nl;
                      $result = mysql_db_query($mysqldb, "SHOW FIELDS FROM $table",$conn);
                      while($row = mysql_fetch_array($result))
                      {
                          $def .= " $row[Field] $row[Type]";
                          if ($row["Default"] != "") $def .= " DEFAULT '$row[Default]'";
                          if ($row["Null"] != "YES") $def .= " NOT NULL";
                          if ($row[Extra] != "") $def .= " $row[Extra]";
                          $def .= ",".$nl;
                      }
                      $def = ereg_replace(",\n$","", $def);
                      $result = mysql_db_query($mysqldb, "SHOW KEYS FROM $table",$conn);
                      while($row = mysql_fetch_array($result))
                      {
                          $kname=$row[Key_name];
                          if(($kname != "PRIMARY") && ($row[Non_unique] == 0)) $kname="UNIQUE|$kname";
                          if(!isset($index[$kname])) $index[$kname] = array();
                          $index[$kname][] = $row[Column_name];
                      }
                      while(list($x, $columns) = @each($index))
                      {
                          $def .= ",";
                          if($x == "PRIMARY") $def .= " PRIMARY KEY (" . implode($columns, ", ") . ")";
                          else if (substr($x,0,6) == "UNIQUE") $def .= " UNIQUE ".substr($x,7)." (" . implode($columns, ", ") . ")";
                          else $def .= " KEY $x (" . implode($columns, ", ") . ")";
                      }

                      $def .= ");".chr(1).$nl;
                      return (stripslashes($def));
                  }

                  function get_content($mysqldb, $table)
                  {
                      global $conn,$anzahl_zeilen,$table_offset,$zeilen_offset,$nl;

                      $content="";
                      $query="SELECT * FROM $table LIMIT $zeilen_offset,".($anzahl_zeilen+1);
                      $result = mysql_db_query($mysqldb,$query,$conn);
                      $ergebnisse=mysql_num_rows($result);

                      if ($ergebnisse>$anzahl_zeilen)
                      {
                          $zeilen_offset=$zeilen_offset+$anzahl_zeilen;
                          $ergebnisse--;
                      }
                      else
                      {
                          $table_offset++;
                          $zeilen_offset=0;
                      }
                      for ($x=0;$x<$ergebnisse;$x++)
                      {
                          $row=mysql_fetch_row($result);
                          {
                              $insert = "INSERT INTO $table VALUES (";
                              for($j=0; $j<mysql_num_fields($result);$j++)
                              {
                                  if(!isset($row[$j])) $insert .= "NULL,";
                                  else if($row[$j] != "") $insert .= "'".addslashes($row[$j])."',";
                                  else $insert .= "'',";
                              }
                              $insert = ereg_replace(",$","",$insert);
                              $insert .= ");";
                              $content .= $insert.chr(1).$nl;
                          }
                      }
                       return $content;
                  }
                  ///////////////////////
                  // Ende Funktionen
                  ///////////////////////


                  // Backupverzeichnis existiert noch nicht? Na gut, dann machen wir eben eins. :-)
                  if (!is_dir($backup_path)) mkdir($backup_path, 0777);

                  $zeilen_offset= (!empty($_GET['zeilen_offset'])) ? $zeilen_offset=$_GET['zeilen_offset']:0;

                  if (!empty($_GET['table_offset'])) $table_offset=$_GET['table_offset'];
                  else
                  {
                      $dateiname=date("Y\-m\-d\_H\-i",time()); // Dateiname aus Datum und Uhrzeit bilden
                      $endung= ($compression) ? ".sql.gz" : ".sql";
                      $backupdatei=$dateiname.$endung;

                      $table_offset=0;
                      // Seitenerstaufruf -> Backupdatei anlegen
                      $cur_time=date("Y-m-d H:i");
                      $newfile="# Dump created on $cur_time\r\n";
                      $newfile.="# Remember that you must use my restorescript in order to get a working DB\r\n";
                      $newfile.="# because I use a special code to mark the end of a command.\r\n";
                      $newfile.="# This is NOT compatible with other restorescripts!\r\n";
                      $newfile.="# Anyway, have fun with this but use it at your own risk. :-) \r\n";

                      if ($compression==1)
                      {
                          $fp = gzopen ($backup_path.$backupdatei,"wb");
                          gzwrite ($fp,$newfile);
                          gzclose ($fp);
                          chmod($backup_path.$backupdatei,0777);
                      }
                      else
                      {
                          $fp = fopen ($backup_path.$backupdatei,"wb");
                          fwrite ($fp,$newfile);
                          fclose ($fp);
                          chmod($backup_path.$backupdatei,0777);
                      }
                  }

                  $conn = mysql_connect($mysqlhost,$mysqluser,$mysqlpassword) or die(mysql_error());
                  $tabellen = mysql_list_tables($mysqldb,$conn);
                  $num_tables = @mysql_num_rows($tabellen);
                  $tables=ARRAY();
                  if ($num_tables>0)
                  {
                      for ($i=0;$i<$num_tables;$i++)
                      {
                          $erg=mysql_fetch_row($tabellen);
                          $tables[$i]=$erg[0];
                      }
                  }
                  else die ("<br>Fehler:<br>Ich konnte keine Tabellen in der Datenbank '<b>".$mysqldb."</b>' finden.");

                  /////////////////////////////////
                  // Anzeige - Fortschritt
                  /////////////////////////////////
                  echo "<html><title>MySql - DB-Restore</title><head><META HTTP-EQUIV=\"Pragma\" CONTENT=\"no-cache\"></head>";
                  echo "<body>";
                  $sql="SELECT COUNT(*) AS anzahl FROM ".$tables[$table_offset];
                  $res=mysql_query($sql);
                  echo "<h1>Datenbank-Backup:</h1>";
                  echo "GZip-Kompression ist: <b>";
                  if ($compression==1) echo "an</b>"; else echo "aus</b>";
                  if ($res)
                  {
                      $row=mysql_fetch_object($res);
                      $gesamt=intval($row->anzahl);
                      if ($gesamt>0)
                      {
                          $fortschritt=round(((100*$zeilen_offset)/$gesamt),0);
                          if ($anzahl_zeilen>=$gesamt) $fortschritt=100;
                      }
                      else $fortschritt=100;
                      echo "<br>Speichere Tabelle <b>".($table_offset+1)."</b> von <b>".sizeof($tables)."</b>";
                      echo "<br>aktuelle Tabelle: <b>".($tables[$table_offset])."</b><br>";

                      echo "<br>Fortschritt Tabelle:<br>\n";
                      echo "<table border=\"0\" width=\"380\"><tr>";
                      echo "<td width=\"".($fortschritt*3)."\" bgcolor=\"blue\">&nbsp;</td>";
                      echo "<td width=\"".((100-$fortschritt)*3)."\">&nbsp;</td>";
                      echo "<td width=\"80\" align=\"right\">".($fortschritt)." %</td>";

                      if ($anzahl_zeilen+$zeilen_offset>=$gesamt)
                      {
                          $eintrag=$zeilen_offset+1;
                          $zeilen_gesamt=$gesamt;
                          if ($zeilen_gesamt==0) $eintrag=0;
                      }
                      else
                      {
                          $zeilen_gesamt=$zeilen_offset+$anzahl_zeilen;
                          $eintrag=$zeilen_offset+1;
                      }
                      echo "</tr>\n<tr>";
                      echo "<td colspan=\"3\">Eintrag <b>".number_format($eintrag,0,",",".")."</b> bis <b>";
                      echo number_format(($zeilen_gesamt),0,",",".")."</b> von <b>";
                      echo number_format($gesamt,0,",",".")."</b></td>";
                      echo "</tr></table>\n";

                      $tabellen_gesamt=sizeof($tables);
                      $noch_zu_speichern=$tabellen_gesamt-$table_offset;
                      $prozent= ($tabellen_gesamt>0) ? round(((100*$noch_zu_speichern)/$tabellen_gesamt),0) : 100;
                      if ($noch_zu_speichern==0) $prozent=100;
                      echo "<br>Fortschritt gesamt:";
                      echo "<table border=\"0\" width=\"550\" cellpadding=\"0\" cellspacing=\"0\"><tr>";
                      echo "<td width=\"".(5*(100-$prozent))."\" bgcolor=\"blue\"></td>";
                      echo "<td width=\"".($prozent*5)."\" align=\"center\"></td>";
                      echo "<td width=\"50\">".(100-$prozent)." %</td>";
                      echo "</tr></table>";
                      echo "</body></html>";
                      flush();
                  }
                  //////////////////////////////////////
                  // Ende Anzeige
                  //////////////////////////////////////

                  $newfile="";
                  if ($table_offset < $num_tables)
                  {
                      $table = $tables[$table_offset];
                      $aktuelle_tabelle=$table_offset;
                      if ($zeilen_offset==0)
                      {
                          $newfile .= get_def($mysqldb,$table);
                      }
                      $newfile .= get_content($mysqldb,$table);
                  }
                  if ($compression==1)
                  {
                      $fp = gzopen ($backup_path.$backupdatei,"ab");
                      gzwrite ($fp,$newfile);
                      gzclose ($fp);
                  }
                  else
                  {
                      $fp = fopen ($backup_path.$backupdatei,"ab");
                      fwrite ($fp,$newfile);
                      fclose ($fp);
                  }

                  if ($table_offset<=$tabellen_gesamt)
                  {
                      // Selbstaufruf starten
                      echo "<script =\"javascript\">self.location=\"$PHP_SELF?";
                      echo "table_offset=$table_offset&zeilen_offset=$zeilen_offset&backupdatei=$backupdatei";
                      echo "\"</script>";
                  }
                  else
                  {
                      echo "<br><br>Alles fertig!";
                      echo "<br>Die Backupdatei wurde erfolgreich erstellt.";
                      echo "<br><br><a href=\"".$backup_path.$backupdatei."\">Hier</a> kannst Du sie nun herunterladen.";
                  }

                  $groesse = filesize($backup_path.$backupdatei);
                  $groesse_kb = $groesse / 1024;
                  $groesse_mb = $groesse_kb / 1024;
                  $groesse_mb = number_format($groesse_mb, 2, '.', '.');

                  $cur_time=date("Y-m-d H:i:s");

                  $check_backupdaten = mysql_query("SELECT * FROM dhs_backup");
                  $anzahl_backupdaten = mysql_num_rows($check_backupdaten);

                  #if ($anzahl_backupdaten == 0)
                  #{
                  #    $insert_daten = mysql_query("INSERT INTO dhs_backup (id, name, groesse, datum)
                      #VALUES
                      #('', '$backupdatei', '$groesse_mb', '$cur_time')");
                  #}
                  #else
                  #{
                  #    $update_daten = mysql_query("UPDATE dhs_backup SET name = '$backupdatei', groesse = '$groesse_mb',
                  #    datum = '$cur_time'");
                  #}
                  ?>
                  <p align="left"><font face="Verdana" size="2"><a href="mysql.php">zurück</a></font></p>

                  <?
                  $ausgabeDerSeite = ob_get_contents();
                  ob_end_clean();
                  $ausgabe=str_replace("\"","\\\"",implode("",file("adminvorlage.html")));
                  eval("\$ausgabe=\"$ausgabe\";");
                  if ($gzip == 1)
                  {
                      $phpversion_array = phpversion();
                      $phpversion_nr = $phpversion_array[0].".".$phpversion_array[2].$phpversion_array[4];

                      if (extension_loaded("zlib") && ($phpversion_nr >= 4.04)) {
                                  ob_start("ob_gzhandler");
                          }
                  }
                  echo $ausgabe;
                  @mysql_close($conid);
                  ?>
                  EDIT:
                  Ist das so schwierig PHP-Tags zu verwenden ... verdammte Hacke ... Goth


                  MFG
                  Benji
                  Zuletzt geändert von goth; 13.07.2004, 11:40.

                  Kommentar

                  Lädt...
                  X