2017-04-17 6 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

고맙습니다, 저도 해봤습니다. chuggs는 약간의 에러로 돌아옵니다 : 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에 대해서는 알지 못합니다.