Suche Skript, um Dump als .gz zurückzuspielen?

Begonnen von Martin, 12 September 2003, 16:23:08

⏪ vorheriges - nächstes ⏩

0 Mitglieder und 1 Gast betrachten dieses Thema.

Martin

Hi,
ich bin bei puretec und hab meine DB mit folgendem Skript gesichert, da phpMyAdmin immer die Laufzeit überschritten hat :(


# Datenbank von myFreising Ver. 2.0
$host = "dbxxx.puretec.de";
$db = "dbxxxxxx;
$dbuser = "pxxxxxxx";
$dbpw = "xxxxxxx";

MYSQL_CONNECT($host, $dbuser, $dbpw) or die ( "<H3>Datenbankserver nicht erreichbar</H3>");
MYSQL_SELECT_DB($db) or die ( "<H3>Datenbank nicht vorhanden</H3>");

$path = getenv('DOCUMENT_ROOT')."/DB_backup";
$result = MYSQL_QUERY("SHOW TABLES");
$numrow = MYSQL_NUM_ROWS($result);

for($i = 0;$i < $numrow;$i++) {
  $table = MYSQL_RESULT($result,$i);
  echo "$table ... ";
  system(sprintf("mysqldump --opt -h $host -u $dbuser -p$dbpw $db $table | gzip > %s/$table.sql.gz",$path));
  echo "<b> done </b> <br/>\n\n";
}

MYSQL_CLOSE();




Jetzt hab ich die Datei also als .gz auf´m Server liegen. Das von puretec vorgeschlagene Skript zum zurückspielen nimmt schlauerweise nur .sql Dateien ;)
(sieht so aus:  

  // DB myFreising Ver. 2.0
 
  $host= 'dbxxx.puretec.de';
  $user= 'pxxxxxxx';
  $pass= 'xxxxxxxx';
  $db=   'dbxxxxxxxx';

  // Befehl ausführen
  system(sprintf(
    'mysql -h %s -u %s -p%s %s < ./dump.sql',
    $host,
    $user,
    $pass,
    $db
  ));
  echo '+DONE';
)

Hat evtl. jemand gad ein Skript zur Hand, mit dem ich die .gz Datei zurückspielen kann, bzw. muss ich ja nur irgendwie ein gunzip in obiges Skript einbauen, weiß aber ned wie :(

jubilee

Hmmm ...
Etwas was vielleicht dazu passt.
Am ende des Scriptes ein kleiner Codeschnipsel, der das File dann direkt an den Browser sendet (wie beim download)
Du musst nur dafür sorgen, dass das file in einer variablen gespeichert wird
Z.B. -->
 
Zitat$DasFile=system(sprintf("mysqldump --opt -h $host -u $dbuser -p$dbpw $db $table | gzip > %s/$table.sql.gz",$path));
dann das am ende daranhängen --->
 
Zitatheader("Content-type: application/octet-stream");
            header("Content-disposition: attachment; filename=DasFile.gz");
            echo $DasFile -> file();
Probiers mal aus ...
MfG
jubilee


[Editiert am 12/9/2003 von SiteAdmin jubilee]

jubilee

Öhhh....
Sorry ...
Total falsch gelesen...
Vergess meinen Beitrag. War gedacht um das teil automatisch vom Server zu holen.....

Aber warum verwendest Du dann nicht die Umkehrfunktion des gzips's ??
gunzip glaun ich ... --->
 
Zitatsystem(sprintf(

    'mysql -h %s -u %s -p%s %s< |gunzip /Pfad/Datei',

    $host,
 
So evt.
MfG
jubilee
 

[Editiert am 12/9/2003 von SiteAdmin jubilee]

ortiz

Hallo,

Ich möchte mit meiner Datenbank auf einen anderen Server umziehen.
Problem:
Sql-Datei habe ich mit Martins Skript gesichert, alles bestens nur wie kriege ich die sql Datei in die neue Datenbank?
Phpmyadmin meckert da.
Gibt es dafür ein Skript oder ähnliches.
Mit dem Skript von Jubilee bin ich nicht so ganz klar gekommen.  :(
Wer weiß Rat?

Gruß Francisco

DarkBoy

Mal eine kurze dumme Frage, warum  downs du das GZ  nicht und lädst es als SQL hoch, dann ein normales Script genutzt( siehe deins oben) und eingespielt.
Ist zwar umständlich aber es funktioniert nach der alten Methode.............

Martin

@ DarkBoy: klaro geht das :) Is aber schöner, wenn man´s ned runterladen muss :)

@ jubilee: leider funzt das gunzip so ned. Hab ich auch scho probiert :(

Hab jetzt einfach die Komprimierung weggelassen und aus den beiden Skripten eines mit kleinem html-Interface gemacht.
Damit kann man die DB sichern und auch wieder zurückspielen.
Wenn noch jemand bedarf daran hat, das ganze sieht so aus:
Zitat<?php
#####################################################################
#                                       
#   sqldump.php erstellt mySQL dump-Files und kann diese wieder      #
#   auf den Server zurückspielen.                            #
#                                                   #
#####################################################################
#   Das Skript als sqldump.php in einem (am besten geschuetzten)   #
#    Verzeichnis auf dem Server ablegen.                        #
#   Wenn Ihr immer die gleiche DB benutzt, am besten die          #
#   Zugangsdaten unten eintragen.                            #
#####################################################################   



// Konfiguration //

// Hier kann man die Verbindungsdaten speichern, um sie im Formular nicht jedes mal neu eingeben zu muessen.
  $host_def= ' '; // Datenbank Host
  $user_def= ' '; // Datenbank Benutzername
  $pass_def= ' '; // Datenbank Passwort
  $db_def=   ' '; // Datenbank Name
 
  $pfad_def= 'DB_backup'; // Pfad zur sqldump.php vom Document root aus. Ohne "/" am Anfang und Ende !!
  $dateiname_def= 'dump.sql'; // Name der Sicherungsdatei
 
// ENDE Konfiguration //
 
// Erforderliche Daten in Formular eingeben //

function start ($host_def, $user_def, $pass_def, $db_def, $dateiname_def, $pfad_def) {
   echo "<html>
         <head> <title> DB Backup </title></head>
         <body style=\"font-family:Arial,Verdana\"> <form name=\"db-backup\" method=\"get\" action=\"sqldump.php\">
           <table width=\"400\" border=\"0\" align=\"center\" cellpadding=\"2\" cellspacing=\"0\">
            <tr>
              <td colspan=\"2\"><div align=\"center\">
                 <h3>Datenbank Sichern / Zurückspielen</h3>
               </div></td>\n
            </tr>\n
            <tr>
              <td><p> </p>
               <h4>Zugangsdaten:</h4></td>\n
              <td> </td>\n
            </tr>\n
            <tr>
              <td> </td>\n
              <td> </td>\n
            </tr>\n
            <tr>
              <td>Datenbank </td>\n
              <td><input name=\"db\" type=\"text\" id=\"db2\" value=\"$db_def\"></td>\n
            </tr>\n
            <tr>
              <td>DB-Host: </td>\n
              <td><input name=\"host\" type=\"text\" id=\"host2\" value=\"$host_def\"></td>\n
            </tr>\n
            <tr>
              <td>DB-User </td>\n
              <td><input name=\"user\" type=\"text\" id=\"user2\" value=\"$user_def\"></td>\n
            </tr>\n
            <tr>
              <td>DB-Passwort </td>\n
              <td><input name=\"pass\" type=\"text\" id=\"pass2\" value=\"$pass_def\"></td>\n
            </tr>\n
            <tr>
              <td>Pfad zur sqldump.php <font size =\"2\"><br>
               (vom Hauptverzeichnis aus, ohne "/" am Anfang und Ende!) </font></td>\n
              <td><input name=\"pfad\" type=\"text\" id=\"pfad3\" value=\"$pfad_def\"></td>\n
            </tr>\n
            <tr>
              <td>Dateiname </td>\n
              <td><input name=\"dateiname\" type=\"text\" id=\"dateiname3\" value=\"$dateiname_def\"></td>\n
            </tr>\n
            <tr>
              <td><h4> </h4>
               <h4>gewünschte Aktion:</h4></td>\n
              <td> </td>\n
            </tr>\n
            <tr>
              <td> <p>
                 <input name=\"op\" type=\"radio\" value=\"dump\" checked>
                 Sichern
                 <input type=\"radio\" name=\"op\" value=\"redump\">
                 Zurückschreiben</p>
               <p>  </p></td>\n
              <td> </td>\n
            </tr>\n
            <tr>
              <td><input name=\"submit\" type=\"submit\" id=\"submit\" value=\"Abschicken\"></td>\n
              <td><input name=\"cancel\" type=\"reset\" id=\"cancel\" value=\"Abbrechen\"></td>\n
            </tr>\n
           </table><p align=\"center\"><font size=\"1\">Å  by <a href=\"mailto:martin@myfreising.de\">Martin Kloker</a></font></p>
   </form>
   </body>
   </html>";
}

// DB auslesen und in dump.sql speichern //

function dump($host, $user, $pass, $db, $dateiname, $pfad) {

  MYSQL_CONNECT($host, $user, $pass) or die ( "<H4>Datenbankserver nicht erreichbar</H4>");
  MYSQL_SELECT_DB($db) or die ( "<H4>Datenbank nicht vorhanden</H4>");
  MYSQL_CLOSE();
 
  $pfad = getenv('DOCUMENT_ROOT')."/$pfad";
  system(sprintf(
    'mysqldump --opt -h %s -u %s -p%s %s > %s/%s',
    $host,
    $user,
    $pass,
    $db,
    $pfad,
   $dateiname
  ));
  echo "<p><b>Die Datenbank $db wurde unter $pfad/$dateiname gesichert!</b></p><a href=\"sqldump.php\">zurück</a>";
 
  }

// Dump in DB zurueckschreiben //

function redump ($host, $user, $pass, $db, $dateiname) {   

  system(sprintf(
    'mysql -h %s -u %s -p%s %s < ./%s',
    $host,
    $user,
    $pass,
    $db,
   $dateiname
  ));
  echo "<p><b>Der Dump <i>$dateiname</i> wurde in $db zurückgeschrieben</b></p><a href=\"sqldump.php\">zurück</a>";

}




switch($op) {

   case "dump":
   dump($host, $user, $pass, $db, $dateiname, $pfad);
   break;
   
   case "redump":
   redump($host, $user, $pass, $db, $dateiname);
   break;
   
   default:
   start($host_def, $user_def, $pass_def, $db_def, $dateiname_def, $pfad_def);
   break;


   }
 
?>


ortiz

hmm,  wieso funktioniert nur dieses schöne Skript bei mir nicht? :(

ich sehe nur folgende Fehlermeldung:
Warning: Division by zero in /var/www/web1/html/db/sqldump.php on line 96

als Pfad habe ich eingegeben:
$pfad_def= 'var/www/web1/html/db';

Die Datei habe ich als sqldump.php unter /db/sqldump.php abgelegt.

Martin

du darfst ned den Systempfad, sondern einfach den vom www-root angeben. Dann sollts gehen.
Den document root liest es dann selbst aus.

Das Skript hab ich bei puretec / 1und1 getestet. Kann also nicht garantieren, dass es überall läuft...

[Editiert am 14/9/2003 von Martin]