开源,不开放贡献

2021-01-28 22:25:59

Litestream是用于SQLite的独立流复制工具。它作为后台进程运行,并安全地将更改增量复制到另一个文件或S3。 Litestream仅通过SQLite API与SQLite通信,因此它不会破坏您的数据库。

如果您需要支持或有关于改进Litestream的想法,请访问GitHub Discussions聊天。

您可以从“发行版”页面下载.deb文件,然后运行以下命令:

您也可以从发行版页面下载系统的发行版二进制文件,并将其作为独立的应用程序运行。

Litestream提供了一个可用于生产部署的配置文件,但您也可以在试用时在命令行上指定单个数据库和副本。

首先,您需要创建一个S3存储桶,我们将其称为“ mybkt"在这个例子中。您还需要设置您的AWS凭证:

接下来,可以使用要备份的数据库的路径和副本目标的URL来运行litestreamplicat命令。

如果您对本地数据库进行更改,则这些更改将每10秒复制到S3。在另一个终端窗口中,您可以从S3副本还原数据库:

您的数据库应还原到发送到S3的最后一个复制状态。您可以使用下面指定的基于配置的方法来调整复制频率和其他选项。

基于配置的安装为您提供了更多复制选项。默认情况下,配置文件位于/etc/litestream.yml中,但是您可以使用-config PATH标志将路径传递给任何litestream命令。您还可以设置LITESTREAM_CONFIG环境变量以指定新路径。

该配置指定一个或多个数据库以及每个数据库的一个或多个副本位置的列表。以下是一些常见的配置:

这会将/ path / to / db中的数据库复制到" / db"中。 S3存储桶中名为" mybkt"的路径。

默认情况下,副本将保留快照&随后的24小时WAL更改。当快照寿命超过保留阈值时,将拍摄并上传新快照,并删除先前的快照和WAL文件。

您可以按副本配置此设置。时间是使用Go持续时间解析的,因此允许使用小时(h),分钟(m)和秒(s)的时间单位,但不允许使用天,周,月和年。

您还可以通过使用addr字段指定绑定地址来启用Prometheus度量标准端点来监视复制:

名称-如果您使用多个副本,请为副本指定一个可选名称。

validation-interval-定期检查之间的间隔,以确保还原的备份与当前数据库匹配。默认禁用。

保存配置后,您将需要开始复制。如果安装了.deb文件,请运行:

#使用/etc/litestream.yml配置进行复制。$ litestreamplicat#使用不同的配置路径进行复制。$ litestream copy -config /path/to/litestream.yml

litestream命令将初始化,然后无限期地等待更改。您应该看到目标副本路径现在已填充了generation目录。里面应该有一个16个字符的十六进制生成目录,里面应该有快照& WAL文件。在对源数据库进行更改时,更改将被增量复制到副本中。

Litestream可以还原以前的快照并重放所有复制的WAL文件,默认情况下,它将还原到最新的WAL文件,但您也可以执行时间点还原。

数据库只能还原到不存在的路径,因此您不必担心意外覆盖当前数据库。

#将数据库还原到原始路径。$ litestream restore / path / to / db#将数据库还原到新位置。$ litestream restore -o / path / to / restored / db / path / to / db#从副本URL还原。 $ litestream restore -o / path / to / restored / db s3:// mybkt / db#将数据库还原到特定时间点。$ litestream restore -timestamp 2020-01-01T00:00:00Z / path / to /D b

时间点还原仅具有WAL文件本身时间戳的分辨率。默认情况下,litestream将每分钟启动一个新的WAL文件,因此时间点还原仅精确到分钟。

SQLite提供了WAL(预写日志)日记模式,该模式将页面写到-wal文件中,然后最终将其复制到原始数据库文件中。此复制过程称为检查点。 WAL文件用作循环缓冲区,因此当WAL达到一定大小时,它将从头开始重新启动。

Litestream通过接管检查点流程并控制何时重新启动它来工作,以确保它复制每个新页面。仅当没有读取事务时才允许检查点,因此Litestream会针对每个数据库保持运行中的读取事务,直到准备好检查点为止。

将SQLite WAL文件复制到称为影子WAL的单独位置,以确保它不会被SQLite覆盖。该影子WAL充当临时缓冲区,以便副本可以复制到其目标位置(例如,另一个文件路径或S3)。影子WAL文件在完全复制后将被删除。您可以在数据库文件旁边找到影子目录作为隐藏目录。如果数据库文件名为/var/lib/my.db,则影子目录将为/var/lib/.my.db-litestream。

Litestream将快照分组,并将所有随后的WAL更改划分为“几代”。如果最初复制数据库,则将开始一代,如果litestream检测到WAL复制不再连续,则将开始新一代。如果litestream进程停止并且允许另一个进程检查WAL,则会发生这种情况。

与SQLite相似,litestream是开源的,但不提供贡献。 这使代码库中没有专有或许可的代码,但也有助于我继续维护和构建litestream。 作为BoltDB的作者,我发现接受并维护第三方补丁程序使我精疲力尽,最终我将项目存档。 编写数据库和 低级复制工具涉及细微差别,简单的一行更改会在准确性和性能上产生深刻而出乎意料的变化。 小额捐款通常需要我花费几个小时来正确测试和验证它们。 感谢社区的参与,错误报告和& 功能要求。 我除了欢迎外,什么都不想离开。但是,我决定让这个项目保持封闭状态,以确保我的个人健康和项目的长期生存。