是否可以使用mysql查询下载大型数据库

时间:2012-03-24 05:00:43

标签: php mysql database

我正在使用WinSCP从服务器下载文件。是否可以使用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;



?>

任何人请帮助我......谢谢

4 个答案:

答案 0 :(得分:4)

如果你正在使用SCP,你显然有一个shell访问服务器 在这种情况下,我认为使用任何基于Web的工具来备份数据库没有意义

只需运行mysqldump / mysql即可转储/恢复 这都是

答案 1 :(得分:1)

只需在代码的开头使用set_time_limit(0)即可。

答案 2 :(得分:1)

PHP脚本无法无限期运行,即:在预先指定的时间后(如php.ini文件中所定义),通常为60秒,脚本将终止并且将抛出Timeout错误。

要走的路是:

  • 在脚本开头使用set_time_limit(0)覆盖php.ini文件中的设置,让脚本无限期运行(如果你问我,那就太过分了)
  • 调整php.ini文件和max_execution_time变量中的设置(也非常过分)
  • 推荐: 通过SSH(Secure SHell连接)使用mysqldump命令。 : - )

答案 3 :(得分:0)

不,超时会发生。脚本可以执行的默认时间限制。

这是在max_execution_time PHP ini设置下定义的。你可以增加它的价值并尝试。