2012-03-24 2 views
2

Я загружаю файлы с сервера с помощью WinSCP. Можно ли написать запрос для загрузки большой базы данных с помощью mysql-запроса? Или использовать любой другой метод я пытался с этим кодом, но я не в состоянии получить всю структуру базы данныхМожно ли загрузить большую базу данных с помощью запроса mysql

<?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; 



?> 

любой, пожалуйста, помогите мне ... спасибо

+2

mysqldump приходит на ум –

ответ

0

Нет, Тайм-аут будет происходить. Существует ограничение по умолчанию для времени, которое может выполнить скрипт.

Это определено под max_execution_time Настройки PHP ini. вы можете увеличить его ценность и попробовать.

4

Если вы используете SCP, у вас, по-видимому, есть доступ к серверу с оболочкой.
в данном случае я не вижу смысла в использовании каких-либо веб-инструментов для создания резервной копии базы данных

просто запустить mysqldump/mysql дамп/восстановление
, что это все

+0

даже с наружным доступом к оболочке exec ('mysqldump ...'); –

1

PHP скрипты не могут работать до бесконечности, то есть: после заданного количества времени (как определено в файле php.ini), обычно 60 секунд, сценарий будет завершен, и будет выброшена ошибка Timeout.

Пути пойти являются:

  • Либо использовать set_time_limit(0) в начале вашего скрипта, чтобы переопределить параметры в php.ini файлов, и есть сценарий запуска на неопределенное время (довольно излишним, если вы спросите я)
  • Tweak настройки в файле php.ini и max_execution_time переменных (довольно Overkill, а)
  • Рекомендуется: Используйте команду mysqldump через SSH (соединение Secure SHell). :-)
+0

У меня есть сценарий, который работает уже неделю. что я делаю неправильно? –

+0

@YourCommonSense Возможно, что я делаю ... неправильно тоже: http://www.developertutorials.com/tutorials/php/running-background-processes-in-php-349/ –

+0

Я запускаю его как автономный процесс, а не как дочерний процесс веб-сервера. –

Смежные вопросы