我目前正在开发一个包含启用了WAL的SQLite3数据库的C项目。我们有一个HTTP Web界面,您可以通过该界面获得数据库的在线备份。目前,数据库文件可通过HTTP访问,这在很多方面都很糟糕。我现在的任务是实现一个新的备份算法。
SQLite-Online-Backup API似乎非常好用。在那里,您打开两个数据库连接,将一个数据库复制到另一个数据库。无论如何,在我的设置中,我无法确定是否有足够的空间来复制整个数据库,因为我们可能有很多统计信息和多媒体文件。对我来说,最好的解决方案是打开一个直接连接到stdout的SQLite连接,以便我可以通过CGI备份数据库。
无论如何,我没有在SQLite3 API中找到一种在stdout等特殊文件上打开数据库连接的方法。备份数据库的最佳做法是什么?如何执行SQLite3数据库的在线备份?
提前致谢!
答案 0 :(得分:0)
如果您需要为备份提供一些特殊的目标接口,则可以实现满足您需要的自定义VFS接口。请参阅sqlite3_open_v2()
的参数,您可以在其中传入VFS的名称。
(有关VFS和SQLite使用的OS接口的详细信息,请参阅https://www.sqlite.org/c3ref/vfs.html)
基本上每个sqlite3_backup_step()
调用都会编写一些数据块,您需要以某种方式将这些数据块传输到目标数据库。