2013-10-23 44 views
1

我想在bash脚本 内部实现sqlite数据库的二进制备份,并将其设置为cron作业。安全备份意味着在复制数据库文件之前写入锁定。 我发现庆典互动配方(http://ajacevedo.com/resources/sqlite/):bash脚本中sqlite的安全副本

$ sqlite3 databasename.sqlite3 
sqlite> begin immediate; 
<press CTRL+Z> 
$ cp -a databasename.sqlite3 databasename.sqlite3.backup 
$ fg 
sqlite> rollback; 
sqlite> .exit 

我知道,有在的.backup源码,但它似乎并没有做写锁 (Is sqlite locked during .backup)。 我不是一个bash专家不幸的。是否有可能在bash脚本中实现该代码,该脚本可以作为cron作业执行(非交互式)? 可能会使用pid或其他类型的魔法。

+0

我想你需要使用'expect'来编写与'sqlite3'的交互脚本。 – chepner

+0

这个配方在预写日志(WAL)模式下不适用于sqlite数据库:您也需要复制预写日志(-wal文件)。 – Fabian

回答

1

即使是由.backup使用的读取锁也可以防止其他人写入。

(备份定期滴锁,允许其他程序,而无需太长时间等待运行;如果任何写操作已经发生了,它重新同步。)

1

以下命令可以在bash脚本中使用:

sqlite3 your_db.sqlite ".backup your_backup.sqlite" 

可以使用sqlite3 db_name.sqlite "command"以bash写入Sqlite3查询。

.backup也是在工作中进行备份的安全方式。这里提到的好笔记:https://www.sqlite.org/howtocorrupt.html