使用Windows DFS复制备份SQLite

5
我有一个应用程序使用SQLite进行存储,我想知道是否安全使用 Windows DFS Replication 将数据库文件备份到第二个服务器上,该服务器安装了应用程序的冷备份实例。
可能相关的细节:
1.尽管DFS支持双向复制,但在这种情况下,只写入主DB文件,因此复制实际上是单向的。 2.主DB文件位于写入它的进程所在的同一台服务器上。 3.当前SQLite配置为使用标准Rollback Journal,但如果需要,可以切换到Write-Ahead Log
如果DFS在复制期间锁定主DB文件,则认为只要锁定不太长时间,这种方法就可以工作。但是,我找不到关于DFS如何实现的足够信息。

更新:我已在测试环境中实现了此功能,并运行了数天。在此期间,我没有遇到任何问题,因此我倾向于采用这种解决方案。

1个回答

2
考虑到DFS Replication 面向文件和文件夹,你可以使用它来在带宽有限的网络连接之间保持服务器上的文件夹同步。然而,如果你关心一致性和数据完整性,我建议你避免使用它,正如SQLite备份文档所述:历史上,复制SQLite数据库的备份(副本)是通过以下方法创建的:
1. 使用SQLite API(即shell工具)在数据库文件上建立共享锁。 2. 使用外部工具(例如unix的“cp”实用程序或DOS的“copy”命令)复制数据库文件。 3. 释放在步骤1中获得的数据库文件的共享锁。
这种方法在许多情况下都有效,并且通常非常快。但是,这种技术有以下缺点:
1. 在创建备份时,任何想要写入数据库文件的客户端必须等待共享锁被释放。 2. 它无法用于将数据复制到内存中的数据库,也无法从内存中的数据库复制数据。 3. 如果在复制数据库文件时发生断电或操作系统故障,则在系统恢复后备份数据库可能会损坏。
在DFS的情况下,甚至不会在复制之前锁定数据库。因此,我认为你最好使用某种热备份,你可以尝试使用SQLite Online Backup API,你可以查看使用在线备份API创建热备份的教程
如果你想要更简单的解决方案,你可以尝试使用SymmetricDS,它是一个开源的数据库复制系统,与SQLite兼容。还有其他选择(如litereplicator.io),但它已经闭源,并且仅适用于旧版SQLite和大小约为50MB的数据库。另外,如果你真的需要HA、复制或类似功能,我建议你远离SQLite,根据你所选的编程语言,你可能已经抽象出了DB层,可以使用MySQL或PosgreSQL。

好的解释。我们也可以迁移它吗? - Sreeram Nair

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接