2017-06-05 106 views
0

我試圖通過一個小的PHP腳本來備份一些sqlite3數據庫。該腳本將所有正確大小的文件成功輸出到適當的位置。問題出現了(我剛剛纔意識到這一點,當試圖將我的網站遷移到新的位置),這些備份不起作用。php備份sqlite3數據庫問題

當我去導入使用phpLiteAdmin這些備份,我得到一個錯誤near "SQLite": syntax error

如果我用記事本打開該文件++,所有的數據是存在的。該文件以SQLite format 3開頭,我認爲這是造成該問題的原因。但刪除此備份的副本不能解決問題。

我已經嘗試了很多不同的方法來備份數據庫,全部使用PHP的exec()命令來執行sqlite3代碼。

這是我目前的備份腳本。這基本上遍歷所有數據庫,並將它們備份到自己的文件夾中,並在backups文件夾中添加時間戳。我正在使用sqlite3的.backup輸出文件,目前擴展名爲.sql。我也嘗試過.schema.dump,但都沒有輸出任何內容。

我在這裏完全喪失了,我很幸運,我仍然擁有原始數據庫,但我需要能夠自動備份這些數據庫,以便在以後需要時進行恢復。

<? 
$today = date("m-d-Y"); 
$time = date("g:iA"); 

backup("db"); 
backup("development"); 
backup("inventory"); 
backup("permissions"); 
backup("reports"); 
backup("rollcall"); 
backup("upc"); 

$files = getDirContents('backups'); 
$start = "/home5/aspiretw/public_html/myticketroll/otherdb/modelfinder/pages/db/"; 

foreach($files as $value) { 
    $value = substr($value, strlen($start)); 
    @$act = explode("_", $value); 
    @$act = explode("/", $act[0]); 

    if(strtotime("$act[2] 17:14:40") > strtotime('-7 days')) { 
     unlink($value); 
    } 
} 

function backup($db) { 

    global $today, $time; 

    $dir = "backups/$db/"; 
    if (!is_dir($dir)) { 
     mkdir($dir, 0777, true); 
    } 

    $path = $dir.$today."_".$db."_".$time.".sql"; 

    exec("sqlite3 '$db' '.backup '".$path."''"); 
} 

function getDirContents($dir, &$results = array()){ 
    $files = scandir($dir); 

    foreach($files as $key => $value){ 
     $path = realpath($dir.DIRECTORY_SEPARATOR.$value); 
     if(!is_dir($path)) { 
      $results[] = $path; 
     } else if($value != "." && $value != "..") { 
      getDirContents($path, $results); 
      if(substr($path, -4) == ".bak") { 
       $results[] = $path; 
      } 
     } 
    } 

    return $results; 
} 
?> 

回答

1

.backup命令只是複製數據庫文件(同時正確處理事務隔離)。

要恢復它,只需將其複製回來。