Ankündigung

Einklappen
Keine Ankündigung bisher.

mit PHP Datenbankbackup

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

  • mit PHP Datenbankbackup

    Hi,

    ich habe für mein CMS (welches ich auch bald veröffentliche) ein Script geschrieben, welches ein Backup erstellt und auch wieder importieren kann. Wenn das schon irgendwo vorhanden ist und hier unpassend, kann der Beitrag auch wieder gelöscht werden.
    Benötigt wird eine backup.sql-Datei, in der der SQL-Code gespeichert wird. Weiter Beschreibungen mache ich nicht, wer sich auskennt, findet sich schon rein und einfache Kopierer interessiert die Funktionsweise meistens wenig.
    PHP-Code:
    <h1>Datenbank-Backup</h1>
    <p><a href="admin.php?dbbackup=jetzt" id="submit">Datenbank-Backup erstellen</a></p>
    <p style="margin-top:2em;"><a href="admin.php?dbbackup=loe" class="asubmit" onclick="return confirm('Wollen Sie wirklich alle Datenbanktabellen im n&auml;chten Schritt l&ouml;schen?')">Datenbanktabellen l&ouml;schen</a></p>
    <?php
    $datei 
    "backup.sql";
    if (
    file_get_contents($datei) != "") {
        echo 
    '<p style="margin-top:2em;"><a href="admin.php?dbbackup=drop" class="asubmit" onclick="return confirm(\'Wollen Sie wirklich alle Datenbanktabellen im n&auml;chten Schritt l&ouml;schen und das Backup aufspielen?\')">jetztige Datenbanktabellen l&ouml;schen und Backup aufspielen</a></p>';
    }
    if (isset(
    $_GET['dbbackup'])) {
      if (
    $_GET['dbbackup'] == "jetzt") {
        
    $result_show mysql_query("SHOW TABLES");
        while (
    $row_show mysql_fetch_assoc($result_show)) {
            
    $result_create mysql_query("SHOW CREATE TABLE " $row_show['Tables_in_' DBNAME]);
            while (
    $row_create mysql_fetch_assoc($result_create)) {
                
    $zeile[] = $row_create['Create Table'];
                
    $result_id mysql_query("SELECT * FROM " $row_show['Tables_in_' DBNAME]);
                   while (
    $row_id mysql_fetch_assoc($result_id)) {
                    
    $zeile[] = "INSERT INTO " $row_show['Tables_in_' DBNAME] . " (id) VALUES ('" $row_id['id'] . "')";
                    
    $result_update mysql_query("SELECT * FROM " $row_show['Tables_in_' DBNAME] . " WHERE id = '" $row_id['id'] . "'");
                    while (
    $row_update mysql_fetch_assoc($result_update)) {
                        foreach (
    $row_update as $key => $value) {
                            if (
    $key != "id") {
                                
    $zeile[] = "UPDATE " $row_show['Tables_in_' DBNAME] . " SET " $key " = '" $value "' WHERE id = '" $row_id['id'] . "'";
                            }
                        }
                    }
                }
            }
        }
        if (
    is_writable($datei)) {
              
    $schreiber fopen($datei"w");
           foreach (
    $zeile as $vau) {
                      
    fwrite($schreiber$vau ";\n");
           }
              
    fclose($schreiber);
              echo 
    '<p id="showsubmit">Es wurde ein Backup der Datenbanktabellen erstellt.</p>' "\n";
        } else {
           echo 
    '<p id="showsubmit">Die Datei backup.sql kann nicht beschrieben werden.</p>' "\n";
        }
      } elseif (
    $_GET['dbbackup'] == "drop") {
        
    $result_auf mysql_query("SHOW TABLES");
        while (
    $row_auf mysql_fetch_assoc($result_auf)) {
            
    $sql_drop[] = "DROP TABLE " $row_auf['Tables_in_' DBNAME] . ";";
        }
        
    $sql_back file_get_contents($datei);
        
    $sql_drop_count count($sql_drop);
        
    $sql_a_back explode(";"$sql_back);
        
    $sql_back_a_count count($sql_a_back);
        for (
    $i 0$i $sql_drop_count$i++) {
            
    mysql_query($sql_drop[$i]) OR die(mysql_error());
        }
        for (
    $o 0$o $sql_back_a_count 1$o++) {
            
    mysql_query($sql_a_back[$o]) OR die(mysql_error());
        }
      echo 
    '<p id="showsubmit">Es wurden die alten Datenbanktabellen gel&ouml;scht und das Backup aufgespielt.</p>' "\n";
      } elseif (
    $_GET['dbbackup'] == "loe") {
        
    $result_auf mysql_query("SHOW TABLES");
        while (
    $row_auf mysql_fetch_assoc($result_auf)) {
            
    $sql_drop[] = "DROP TABLE " $row_auf['Tables_in_' DBNAME] . ";";
        }
        
    $sql_drop_count count($sql_drop);
        for (
    $i 0$i $sql_drop_count$i++) {
            
    mysql_query($sql_drop[$i]) OR die(mysql_error());
        }
      echo 
    '<p id="showsubmit">Es wurden alle Datenbanktabellen gel&ouml;scht.</p>' "\n";
      }
    }
    ?>
    Achso, DBNAME muss vorher defniert werden: define("DBNAME", "datenbankname");


  • #2
    AW: mit PHP Datenbankbackup

    hi,

    für solche datenbankoperationen bietet sich eher PDO mit seiner möglichkeit für Transaktionen an.

    gruß
    AC/DC Fanpage www.ifyouwantblood.de
    Nein zur Zensur im Internet und anderswo - Anonymous

    Kommentar


    • #3
      AW: mit PHP Datenbankbackup

      Aha, sehe zwar nicht ganz durch bei PDO und man braucht ja auch das Modul pdo.so aber ok, bestimmt auch eine Möglichkeit

      Kommentar


      • #4
        AW: mit PHP Datenbankbackup

        In dem oberen Script sind eine Menge Bugs (Fehler), die ich erst beim ausgiebigen Testen entdeckt habe. Hier das Script sozusagen in der Version 2 :
        PHP-Code:
        <h1>Datenbank-Backup</h1>
        <p><a href="admin.php?dbbackup=jetzt" id="submit">Datenbank-Backup erstellen</a></p>
        <p style="margin-top:2em;"><a href="admin.php?dbbackup=loe" class="asubmit" onclick="return confirm('Wollen Sie wirklich alle Datenbanktabellen im n&auml;chten Schritt l&ouml;schen?')">Datenbanktabellen l&ouml;schen</a></p>
        <?php
        $datei 
        "backup.sql";
        if (
        file_get_contents($datei) != "") {
            echo 
        '<p style="margin-top:2em;"><a href="admin.php?dbbackup=drop" class="asubmit" onclick="return confirm(\'Wollen Sie wirklich alle Datenbanktabellen im n&auml;chten Schritt l&ouml;schen und das Backup aufspielen?\')">jetztige Datenbanktabellen l&ouml;schen und Backup aufspielen</a></p>';
        }
        if (isset(
        $_GET['dbbackup'])) {
            if (
        $_GET['dbbackup'] == "jetzt") {
                
        $result_show mysql_query("SHOW TABLES") OR die(mysql_error());
                while (
        $row_show mysql_fetch_assoc($result_show)) {
                    
        $result_create mysql_query("SHOW CREATE TABLE " $row_show['Tables_in_' DBNAME]) OR die(mysql_error());
                    while (
        $row_create mysql_fetch_assoc($result_create)) {
                        
        $zeile[] = $row_create['Create Table'];
                        
        $result_id mysql_query("SELECT * FROM " $row_show['Tables_in_' DBNAME]) OR die(mysql_error());
                        while (
        $row_id mysql_fetch_assoc($result_id)) {
                            
        $zeile[] = "INSERT INTO " $row_show['Tables_in_' DBNAME] . " (id) VALUES ('" $row_id['id'] . "')";
                            
        $result_update mysql_query("SELECT * FROM " $row_show['Tables_in_' DBNAME] . " WHERE id = '" $row_id['id'] . "'") OR die(mysql_error());
                            while (
        $row_update mysql_fetch_assoc($result_update)) {
                                foreach (
        $row_update as $key => $value) {
                                    if (
        $key != "id") {
                                        
        $zeile[] = "UPDATE " $row_show['Tables_in_' DBNAME] . " SET " $key " = '" $value "' WHERE id = '" $row_id['id'] . "'";
                                   }
                                   }
                           }
                           }
                   }
                }
                if (
        is_writable($datei)) {
                    
        $schreiber fopen($datei"w");
                    foreach (
        $zeile as $vau) {
                      
        fwrite($schreiber$vau "~\n");
                    }
                    
        fclose($schreiber);
                    echo 
        '<p id="showsubmit">Es wurde ein Backup der Datenbanktabellen erstellt.</p>' "\n";
                } else {
                    echo 
        '<p id="showsubmit">Die Datei backup.sql kann nicht beschrieben werden.</p>' "\n";
                }
            } elseif (
        $_GET['dbbackup'] == "drop") {
                
        $result_auf mysql_query("SHOW TABLES") OR die(mysql_error());
                while (
        $row_auf mysql_fetch_assoc($result_auf)) {
                    
        $sql_drop[] = "DROP TABLE " $row_auf['Tables_in_' DBNAME] . ";";
                }
              
        $sql_back file_get_contents($datei);
              
        $sql_drop_count count($sql_drop);
              
        $sql_a_back explode("~"$sql_back);
              
        $sql_back_a_count count($sql_a_back);
              for (
        $i 0$i $sql_drop_count$i++) {
                  
        mysql_query($sql_drop[$i]) OR die(mysql_error());
              }
              for (
        $o 0$o $sql_back_a_count 1$o++) {
                  
        mysql_query($sql_a_back[$o]) OR die(mysql_error());
              }
              echo 
        '<p id="showsubmit">Es wurden die alten Datenbanktabellen gel&ouml;scht und das Backup aufgespielt.</p>' "\n";
            } elseif (
        $_GET['dbbackup'] == "loe") {
              
        $result_auf mysql_query("SHOW TABLES") OR die(mysql_error());
              while (
        $row_auf mysql_fetch_assoc($result_auf)) {
              
        $sql_drop[] = "DROP TABLE " $row_auf['Tables_in_' DBNAME];
            }
              
        $sql_drop_count count($sql_drop);
              for (
        $i 0$i $sql_drop_count$i++) {
                  
        mysql_query(mysql_real_escape_string($sql_drop[$i])) OR die(mysql_error());
              }
              echo 
        '<p id="showsubmit">Es wurden alle Datenbanktabellen gel&ouml;scht.</p>' "\n";
            }
        }
        ?>
        Zuletzt geändert von mi-schi; 20.12.2007, 21:09.

        Kommentar


        • #5
          AW: mit PHP Datenbankbackup

          Bitte nicht die vorherigen Versionen benutzen! Die sind fehlerhaft und extrem Speicherintensiv! Hier die neue Version, die übrigens im meinem Content Management System (http://www.mi-schi.com/ms-cms/) enthalten ist.
          PHP-Code:
          <h1>Datenbank-Backup</h1>
          <p><a href="admin.php?p=<?php echo $_GET['p']; ?>&amp;dbbackup=jetzt" id="submitneben">Datenbank-Backup erstellen</a></p>
          <p style="margin-top:2em;"><a href="admin.php?p=<?php echo $_GET['p']; ?>&amp;dbbackup=loe" class="asubmit" onclick="return confirm('Wollen Sie wirklich alle Datenbanktabellen im nächten Schritt löschen?')">Datenbanktabellen löschen</a></p>
          <?php
          $datei 
          "backup.php";
          if (
          file_get_contents($datei) != "") {
              echo 
          '<p style="margin-top:2em;"><a href="admin.php?p=' $_GET['p'] . '&amp;dbbackup=drop" class="asubmit" onclick="return confirm(\'Wollen Sie wirklich alle Datenbanktabellen im nächten Schritt löschen und das Backup aufspielen?\')">jetztige Datenbanktabellen löschen und Backup aufspielen</a></p>';
          }
          if (isset(
          $_GET['dbbackup'])) {
              if (
          $_GET['dbbackup'] == "jetzt") {
                  
          $result_show mysql_query("SHOW TABLES") OR die(mysql_error());
                  while (
          $row_show mysql_fetch_assoc($result_show)) {
                      
          $result_create mysql_query("SHOW CREATE TABLE " $row_show['Tables_in_' DBNAME]) OR die(mysql_error());
                      while (
          $row_create mysql_fetch_assoc($result_create)) {
                          
          $zeile[] = $row_create['Create Table'];
                      }
                      
          $result_col mysql_query("SHOW COLUMNS FROM " $row_show['Tables_in_' DBNAME]) OR die(mysql_error());
                      while (
          $row_col mysql_fetch_assoc($result_col)) {
                          
          $col[] = $row_col['Field'];
                      }
                      
          $result_value mysql_query("SELECT * FROM " $row_show['Tables_in_' DBNAME]) OR die(mysql_error());
                      while (
          $row_value mysql_fetch_assoc($result_value)) {
                          foreach (
          $row_value as $key => $value) {
                              
          $row_value[$key] = "'" esqu($value) . "'";
                          }
                          
          $val[] = "(" implode(","array_values($row_value)) . ")";
                      }
                      if (!empty(
          $val)) {
                          
          $zeile[] = "INSERT INTO " $row_show['Tables_in_' DBNAME] . " (" implode(","$col) . ") VALUES " implode(", "$val);
                      }
                      unset(
          $col$val);
                  }
                  if (
          is_writable($datei)) {
                      
          $schreiber fopen($datei"w");
                      
          fwrite($schreiber"<?php\n/*\n?>\n~*#");
                      foreach (
          $zeile as $vau) {
                          
          fwrite($schreiber$vau "~*#\n");
                      }
                      
          fwrite($schreiber"<?php\n*/\n?>");
                      
          fclose($schreiber);
                      echo 
          '<p id="showsubmit">Es wurde ein Backup der Datenbanktabellen erstellt.</p>' "\n";
                  } else {
                      echo 
          '<p id="showsubmit">Die Datei backup.php kann nicht beschrieben werden.</p>' "\n";
                  }
              } elseif (
          $_GET['dbbackup'] == "drop") {
                  
          $result_auf mysql_query("SHOW TABLES") OR die(mysql_error());
                  while (
          $row_auf mysql_fetch_assoc($result_auf)) {
                      
          $sql_drop[] = "DROP TABLE " $row_auf['Tables_in_' DBNAME] . ";";
                  }
                
          $sql_back file_get_contents($datei);
                
          $sql_drop_count count($sql_drop);
                
          $sql_a_back explode("~*#"$sql_back);
                
          $sql_back_a_count count($sql_a_back);
                for (
          $i 0$i $sql_drop_count$i++) {
                    
          mysql_query($sql_drop[$i]) OR die(mysql_error());
                }
                for (
          $o 1$o $sql_back_a_count 1$o++) {
                    
          mysql_query($sql_a_back[$o]) OR die(mysql_error());
                }
                echo 
          '<p id="showsubmit">Es wurden die alten Datenbanktabellen gelöscht und das Backup aufgespielt.</p>' "\n";
              } elseif (
          $_GET['dbbackup'] == "loe") {
                
          $result_auf mysql_query("SHOW TABLES") OR die(mysql_error());
                while (
          $row_auf mysql_fetch_assoc($result_auf)) {
                    
          $sql_drop[] = "DROP TABLE " $row_auf['Tables_in_' DBNAME];
                }
                
          $sql_drop_count count($sql_drop);
                for (
          $i 0$i $sql_drop_count$i++) {
                    
          mysql_query($sql_drop[$i]) OR die(mysql_error());
                }
                echo 
          '<p id="showsubmit">Es wurden alle Datenbanktabellen gelöscht.</p>' "\n";
              }
          }
          ?>
          esqu() ist dabei eine globale Funktion im meinem CMS:
          PHP-Code:
          function esqu($handle) {
              if(
          get_magic_quotes_gpc()) {
                  return 
          mysql_real_escape_string(stripslashes($handle));
              } else {
                  return 
          mysql_real_escape_string($handle);
              } 


          Kommentar


          • #6
            AW: mit PHP Datenbankbackup

            Hi,
            statt DROP TABLE würde ich besser TRUNCATE verwenden.

            Gruß
            Ingo
            Ingo Webdesign

            Kommentar


            • #7
              AW: mit PHP Datenbankbackup

              TRUNCATE löscht die Datenbanktabelleninhalte. Ich will aber die Datenbanken komplett löschen, oder habe ich da was falsch im Manual verstanden.

              Kommentar


              • #8
                AW: mit PHP Datenbankbackup

                Hi,
                Zitat von mi-schi Beitrag anzeigen
                TRUNCATE löscht die Datenbanktabelleninhalte.
                schon richtig, aber ich dachte, Dir kommt es auf Geschwindigkeit an...

                Gruß
                Ingo
                Ingo Webdesign

                Kommentar


                • #9
                  AW: mit PHP Datenbankbackup

                  Ja, dadurch, dass jetzt aber meine Backups genau so groß sind, wie die von phpmyadmin lädt es auch die 500 KB unter einer Sekunde. Mein Bedenken wegen der Geschwindigkeit kam nur bei den älteren Versionen, da war das jetzige Datenbankbackup über 4 MB groß. Aber so ist alles ok und ich bin zufrieden.

                  Kommentar

                  homepage-forum.de - Hilfe für Webmaster! Statistiken

                  Einklappen

                  Themen: 57.205   Beiträge: 432.331   Mitglieder: 29.599   Aktive Mitglieder: 48
                  Willkommen an unser neuestes Mitglied, Drausi.

                  Online-Benutzer

                  Einklappen

                  759 Benutzer sind jetzt online. Registrierte Benutzer: 2, Gäste: 757.

                  Mit 4.707 Benutzern waren am 12.01.2023 um 03:07 die meisten Benutzer gleichzeitig online.

                  Die neuesten Themen

                  Einklappen

                  Die neuesten Beiträge

                  Einklappen

                  Lädt...
                  X