我試圖通過一個小的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;
}
?>