2012-03-24 12 views
2

Ich lade Dateien vom Server mit WinSCP.Ist es möglich, eine Abfrage zu schreiben, um eine große Datenbank mit MySQL-Abfrage herunterladen? Oder jede andere Methode i mit diesem Code versucht, aber ich bin nicht in der Lage, die gesamte DatenbankstrukturIst es möglich, eine große Datenbank mit mysql Abfrage herunterladen

<?php 

       if(file_exists('backup_sql/my_backup.zip')) 
       { 

       unlink('backup_sql/my_backup.zip'); 
       } 


       $tables='*'; 
       $host='MY HOST NAME'; 
       $user='MY_USERNAME'; 
       $pass='MYPASSWORD'; 
       $name='MY_DB_NAME'; 

     $link = mysql_connect($host,$user,$pass); 
      mysql_select_db($name,$link); 


      if($tables == '*') 
      { 
      $tables = array(); 
      $result = mysql_query('SHOW TABLES'); 
      while($row = mysql_fetch_row($result)) 
      { 
       $tables[] = $row[0]; 
      } 
      } 
      else 
      { 
      $tables = is_array($tables) ? $tables : explode(',',$tables); 
      } 
      $return=''; 

      foreach($tables as $table) 
      { 
      $result = mysql_query('SELECT * FROM '.$table); 
      $num_fields = mysql_num_fields($result); 


      $row2 = mysql_fetch_row(mysql_query('SHOW CREATE TABLE '.$table)); 
      $return.= "\n\n".$row2[1].";\n\n"; 

      for ($i = 0; $i < $num_fields; $i++) 
      { 
       while($row = mysql_fetch_row($result)) 
       { 

       $return.= 'INSERT INTO '.$table.' VALUES('; 
       for($j=0; $j<$num_fields; $j++) 
       { 
        $row[$j] = addslashes($row[$j]); 


        if (isset($row[$j])) { $return.= '"'.$row[$j].'"' ; } else { $return.= '""'; } 
        if ($j<($num_fields-1)) { $return.= ','; } 
       } 
       $return.= ");\n"; 
       } 
      } 
      $return.="\n\n\n"; 
      } 



      $rand_var=time(); 
      $files_to_zip = array(
      "'backup_sql/db-backup-'.$rand_var.'.sql'", 

     ); 

     $name = 'db-backup-'.$rand_var.'.sql'; 
$data = $return; 



?> 

jemand bitte helfen Sie mir zu bekommen ... Danke

+2

mysqldump kommt –

Antwort

0

Nein, Timeout auftreten. Es gibt ein Standard-Zeitlimit, für das ein Skript ausgeführt werden kann.

Das ist definiert unter max_execution_time PHP ini Einstellungen. Sie können den Wert erhöhen und versuchen.

4

Wenn Sie SCP verwenden, haben Sie offensichtlich einen Shell-Zugriff auf den Server.
in diesem Fall habe ich keinen Sinn sehen ausführen, um die Datenbank alle webbasierten Tools zur Unterstützung bei der Verwendung

nur mysqldump/mysql Dump/Restore
, die alle auf unbestimmte Zeit nicht ausgeführt

+0

sogar mit aus Shell-Zugriff exec ('mysqldump ...') in den Sinn; –

1

PHP-Skripte ist, das heißt: Nach einer vordefinierten Zeit (wie in der Datei php.ini definiert), normalerweise 60 Sekunden, wird das Skript beendet und ein Timeout Fehler wird ausgelöst.

Die Wege zu gehen:

  • Entweder set_time_limit(0) am Anfang des Skripts verwenden, um die Einstellungen in Ihren php.ini Dateien zu überschreiben, und haben das Skript auf unbestimmte Zeit (ganz ein Overkill laufen, wenn Sie fragen, me)
  • Tweak die Einstellungen in php.ini-Datei und die max_execution_time Variable (ein ziemlich viel des Guten, aber auch)
  • Empfohlen: Verwenden Sie den Befehl mysqldump über SSH (Secure SHell-Verbindung). :-)
+0

Ich habe ein Skript, das schon seit einer Woche läuft. was mache ich falsch? –

+0

@YourCommonSense Vielleicht, was ich mache ... falsch, auch: http://www.developerutorials.com/tutorials/php/running-background-processes-in-php-349/ –

+0

Ich betreibe es als Standalone-Prozess, nicht als Kind des Web-Server-Prozesses. –

Verwandte Themen