php备份sqlite3 db问题

时间:2017-06-05 16:01:50

标签: php database sqlite

我试图通过一个小的PHP脚本备份一些sqlite3数据库。此脚本成功将所有正确大小的文件输出到正确的位置。问题出现了(我今天只是在尝试将我的网站迁移到新位置时才意识到这一点)这些备份无效。

当我使用phpLiteAdmin导入这些备份时,出现错误near "SQLite": syntax error

如果我在notepad ++中打开此文件,则所有数据都在那里。该文件以SQLite format 3开头,我相信这会导致问题。但是,在此备份的副本上删除此功能并不能解决问题。

我尝试了许多不同的方法来备份数据库,所有这些方法都使用PHP的exec()命令来执行sqlite3代码。

这是我当前的备份脚本。这基本上遍历所有数据库,并将它们备份到自己的文件夹中,并在backups文件夹中添加时间戳。我正在使用sqlite3' s .backup输出文件,目前扩展名为.sql。我也尝试了.schema.dump,但这些都没有输出任何内容。

我在这里完全失败了,我很幸运,我仍然拥有原始数据库,但我需要能够自动备份这些数据库,以便以后在需要时进行恢复。 / p>

    <?
$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 个答案:

答案 0 :(得分:2)

.backup命令只是复制数据库文件(正确处理事务隔离时)。

要恢复它,只需将其复制回来。