我试图通过一个小的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;
}
?>
答案 0 :(得分:2)
.backup
命令只是复制数据库文件(正确处理事务隔离时)。
要恢复它,只需将其复制回来。