2017-04-17 27 views
0

我被要求在旧的vps服务器上设置一个定时备份。该网站运行在经典的ASP上,我一直在试图找到使用ASP进行备份的代码,但无法看到它的简单代码。PHP MySql备份不起作用 - 无错误显示

我已经尝试使用我在PHP网站上使用的PHP代码进行备份,它不会显示错误或创建备份文件。在网站上运行的PHP版本是5.2.17

这是我试过的PHP代码。

$fileNameBackup = 'daily-db-backup-'.date('Y-m-d').'.sql.gz'; 
$return_var = NULL; 
$output = NULL; 
$uniqueFilename = uniqid(); 
$command = "mysqldump -u ".$user." -h ".$host." -p ".$password." ".$database." | gzip > ".$fileNameBackup; 
exec($command, $output, $return_var); 

我该从哪里出发?如果有错误,我会有一些反对,但没有想法,有人可以帮我吗?

+1

你在哪里检查错误?你看过日志吗? –

回答

1
<?php 
set_time_limit (0); 
!defined('DB_HOST_NAME') ? define('DB_HOST_NAME',"localhost") : '' ; 
!defined('DATABASE') ? define('DATABASE',"yourdb") : '' ; 
!defined('USERNAME') ? define('USERNAME',"root") : '' ; 
!defined('PASSWORD') ? define('PASSWORD',"") : '' ; 

$DBCONN = new PDO("mysql:host=".DB_HOST_NAME.";dbname=".DATABASE,USERNAME,PASSWORD); 
$DBCONN->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING); 
$sql = "SHOW TABLES FROM ".DATABASE; 
$result = $DBCONN->prepare($sql); 
$result->execute(); 
while($tblnms=$result->fetch()){ 
    $table_name[] = $tblnms[0]; 
} 
function backup_tables($host,$user,$pass,$name,$tables) 
{ 
    $link = mysql_connect($host,$user,$pass); 
    mysql_select_db($name,$link); 
    $return = ""; 
    // Get all of the tables 
    if($tables == '*') { 
     $tables = array(); 
     $result = mysql_query('SHOW TABLES'); 
     while($row = mysql_fetch_row($result)) { 
      $tables[] = $row[0]; 
     } 
    } else { 
     if (is_array($tables)) { 
      $tables = explode(',', $tables); 
     } 
    } 

    // Cycle through each provided table 
    foreach($tables as $table) { 
     $result = mysql_query('SELECT * FROM '.$table); 
     $num_fields = mysql_num_fields($result); 

     // First part of the output – remove the table 
     // $return .= 'DROP TABLE ' . $table . ';<|||||||>'; 

     // Second part of the output – create table 
     $row2 = mysql_fetch_row(mysql_query('SHOW CREATE TABLE '.$table)); 
     $return .= "\n\n" . $row2[1] . ";\n\n"; 

     // Third part of the output – insert values into new table 
     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]); 
        $row[$j] = str_replace("\n","\\n",$row[$j]); 
        if (isset($row[$j])) { 
         $return .= '"' . $row[$j] . '"'; 
        } else { 
         $return .= '""'; 
        } 
        if ($j<($num_fields-1)) { 
         $return.= ','; 
        } 
       } 
       $return.= ");\n"; 
      } 
     } 
     $return.="\n\n\n"; 
    } 

    // Generate the filename for the sql file 
    $filess ='uploads/dbbackup_' . date('dmY').'_'.time() . '.sql'; 
    $zipfilenm='dbbackup_' . date('dmY').'_'.time() . '.zip'; 
    // Save the sql file 
    $handle = fopen($filess,'w+'); 
    fwrite($handle,$return); 
    fclose($handle); 

    if(extension_loaded('zip')) 
    { 
     // Checking ZIP extension is available 
     $zip = new ZipArchive(); // Load zip library 
     $zip_name = 'uploads/'.$zipfilenm; 
     if($zip->open($zip_name, ZIPARCHIVE::CREATE)!==TRUE) 
     { 
      // Opening zip file to load files 
      $error .= "* Sorry ZIP creation failed at this time"; 
     } 

     $zip->addFile($filess); // Adding files into zip 

     $zip->close(); 
     if(file_exists($zip_name)) 
     { 
      // push to download the zip 
      header('Content-type: application/zip'); 
      header('Content-Disposition: attachment; filename="'.$zip_name.'"'); 
      readfile($zip_name); 
      // remove zip file is exists in temp path 
      unlink($zip_name); 
     } 
    } 
    else 
    $error .= "* You dont have ZIP extension"; 

    mysql_close(); 
} 
backup_tables('localhost','root','','yourdb',"*"); 

?> 
+0

谢谢,我已经尝试了这一点,它随之而来,然后回来有错误: mysql_num_fields():提供的参数不是线57上的有效MySQL结果资源:$ result = mysql_query('SELECT * FROM' 。$表);和第63行:$ row2 = mysql_fetch_row(mysql_query('SHOW CREATE TABLE'。$ table)); 除了这些错误,它可能会起作用。 – GeneralTomfoolery

+0

即使这已经引发了一些错误它似乎工作,谢谢@ karunakaran – GeneralTomfoolery

1

尝试重新写mysqldump命令到这一点:

$command = "mysqldump -u ".$user." -h ".$host." -p".$password." ".$database." | gzip > ".$fileNameBackup; 

通知我-p后取出的空间,因为它应该是连续的。

docs -

的密码连接到服务器时使用。如果使用短期选项表格(-p),,则在选项和密码之间不能有空格。如果您在命令行中输入--password或-p选项后忽略密码值,mysql会提示输入密码值。

+0

谢谢,我确实尝试了这两种方法。没有快乐。感谢您的期待。 – GeneralTomfoolery

1

我会检查,以确保用户帐户IIS下(通常IIS_IUSRS)正在运行或MySQL的运行下有写权限您要备份的文件夹。在ASP代码会抛出一个访问拒绝错误,但我不知道PHP。