SQLite是否支持复制?

时间:2009-12-11 13:58:34

标签: sql database-design sqlite replication embedded-database

在嵌入SQLite3并使用内存数据库的应用程序中,是否可以在应用程序的两个运行实例之间复制数据库?我可以用自制协议手动复制我的所有数据库访问,但它似乎应该在数据库层内完成。

6 个答案:

答案 0 :(得分:12)

蛮力方法:发送“.dump”命令以创建数据的文本表示。将该数据读入第二个数据库。不确定你可以使用它。

如果您需要细粒度更新(将每个副本发送到另一个副本),请查看sqlite3_update_hook

但是你打算如何处理错误?例如,当app2中的数据库副本由于某种原因无法进行更新时会发生什么?

要解决此问题,请将数据库移至服务器进程并让两个应用程序通信。

答案 1 :(得分:2)

Lsyncd - Live Syncing (Mirror) Daemon可能在这里有用。它使用rsync在文件级别上进行连续复制。

答案 2 :(得分:2)

开箱即用,没有。 有少量第三方选项:

SQLite同步:https://ampliapps.com/sqlite-sync/这个似乎很有吸引力,因为它可以复制到其他数据库以及SQLite,并且不会修改SQLite引擎。我还没有尝试过。

Litereplica:http://litereplica.io/仅限一种方式。似乎已经有点了。

LiteSync:http://litesync.io/双向复制。很新,但Litereplica的演变可能比它看起来更成熟。我尝试了一下它似乎工作顺利,开发人员正在研究一些错误。你必须使用开发人员修改过的SQLite引擎,这似乎是一个有关的依赖。您也没有太多控制权,例如如果不重新打开数据库,你就不能说现在复制。

答案 3 :(得分:1)

如果要在内存数据库中进行复制,则需要查看berkeley DB (BDB)。但是BDB的数据模型是字符串字典,因此您失去了SQL的灵活性。加上它有三个条款许可,所以如果你的项目是商业的,你需要获得许可。

答案 4 :(得分:0)

不,不是因为项目的范围是一个简单的进程内数据库。但由于数据库只是一个文件,您可以根据纯文件复制操作,rsync或类似的东西编写自己的复制脚本。

如果您真的需要基于SQLite的客户端/服务器类型的RDBMS,可以查看SQLiteDBMS

答案 5 :(得分:0)

的Unison?你可以做的最好虽然是热备用,因为SQLite db在一个单片文件中。你不能在两个"实例之间循环#34;。热备份不是很糟糕,你只需轻松拿起另一个应用程序+数据库,与MySQL主从或主动 - 被动相比,其中有一些手动干预并不容易。 MySQL复制传递SQL,而不仅仅是像unison / rsync这样的差异。但是,如果你有同一个主人,你就拥有了主人。

相关问题