php backup sqlite3 db issue



我正在尝试通过一个小的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;
}
?>

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

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

最新更新