我有一个使用SQLite进行存储的应用程序,我想知道使用Windows DFS Replication将数据库文件备份到第二台服务器是否安全,该服务器已安装了该应用程序的冷备用实例。
可能相关的详细信息:
如果DFS在复制期间锁定了主数据库文件,那么我认为只要锁定的保持时间不长,这种方法就可以起作用。但是,我找不到有关如何实现DFS的足够信息。
更新:我已经在测试环境中实现了它,并且已经运行了好几天。在那段时间内我没有遇到任何问题,因此我很想采用这种解决方案。
DFS复制是高效的多主复制引擎可以用来保持服务器之间的文件夹同步有限带宽的网络连接。
[SQLite backup documentation所述,如果您关心一致性并保留所有数据,我可能会尽量避免使用它。
从历史上讲,已经创建了SQLite数据库的备份(副本)使用以下方法:使用SQLite API(即Shell工具)在数据库文件上建立共享锁。
- 使用外部工具(例如,unix'cp'实用程序或DOS'copy'命令)复制数据库文件。
- 放弃在步骤1中获得的数据库文件上的共享锁。
- 此过程在许多情况下都很好,通常非常快。但是,该技术具有以下缺点:
任何在创建备份时希望写入数据库文件的数据库客户端都必须等待,直到放弃共享锁。
- 不能用于在内存数据库之间复制数据。
- 如果在复制数据库文件时发生电源故障或操作系统故障,则备份数据库可能已损坏系统恢复之后。
对于DFS,在复制之前它甚至不会锁定数据库。
[我认为您最好的选择是使用某种热复制,您可能想使用SQLite Online Backup API,您可以在creating a hot backup with the Online Backup API上查看本教程。
或者,如果想要更简单的方法,可以尝试使用SymmetricDS,它是一种与SQLite兼容的开源数据库复制系统。
[还有其他选项(如litereplicator.io),但此选项已关闭,并且仅限于旧的SQLite版本和大约50MB大小的数据库
ps。如果您确实需要HA,复制或这种功能,我可能会离开SQLite。根据您选择的编程语言,很可能您已经抽象了DB层,可以使用MySQL或PosgreSQL。