我正在使用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;
?>
任何人请帮助我......谢谢
答案 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
变量中的设置(也非常过分)mysqldump
命令。 : - )答案 3 :(得分:0)
不,超时会发生。脚本可以执行的默认时间限制。
这是在max_execution_time
PHP ini设置下定义的。你可以增加它的价值并尝试。