SQLite 流式复制-Litestream
在传统观念中,SQLite 只是一个"单机数据库",不适合生产环境的关键业务。为什么?因为缺乏容灾能力。比如如下场景:应用运行在单个服务器上
数据库简单、快速、无需维护
某天服务器突然宕机,磁盘损坏
所有数据丢失,没有备份
这就是许多小团队面临的困境:PostgreSQL 和 MySQL 的主从复制太复杂,但 SQLite 又缺少容灾方案。Litestream 的出现打破了这道鸿沟。
Litestream是一个开源的 SQLite 流式复制工具,由 Ben Johnson(知名 Go 开发者,曾创建 BoltDB)开发。它作为独立的后台进程运行,持续监控 SQLite 数据库的变化,并将增量数据复制到云存储(如 S3、Google Cloud Storage 等)。采用Go语言编写开发并在Apache-2.0协议下授权使用。
Litestream is a standalone disaster recovery tool for SQLite. It runs as a background process and safely replicates changes incrementally to another file or S3. Litestream only communicates with SQLite through the SQLite API so it will not corrupt your database.
让 SQLite 也能享受类似 PostgreSQL、MySQL 的流式复制能力,但无需复杂的数据库服务器架构。
核心特性
1. 实时流式复制
Litestream 监控 SQLite 的 WAL(Write-Ahead Log)文件,一旦有新的数据变更,立即将其打包成 LTX(Litestream Transaction Log)文件并上传到远程存储。
低延迟:秒级复制,数据丢失窗口极小
增量备份:只传输变更的数据,节省带宽和存储成本
异步处理:不阻塞应用读写操作
2. 多云存储支持
支持几乎所有主流对象存储:
Amazon S3
Google Cloud Storage
Azure Blob Storage
MinIO(兼容 S3 协议的自建存储)
本地文件系统
3. 时间点恢复(Point-in-Time Recovery)
Litestream 保留了完整的事务历史,允许将数据库恢复到任意时间点:
# 恢复到特定时间点
litestream restore -timestamp "2026-08-22T10:00:00Z" -o restored.db s3://mybucket/db
# 恢复到最新状态
litestream restore -o restored.db s3://mybucket/db
4. 分层存储优化
为了平衡恢复速度和存储成本,Litestream 采用分层存储策略:
L0 层:最近的数据变更,保留 5 分钟(默认)
L1/L2/L3 层:压缩后的历史数据,定期合并
快照层:完整的数据库副本,每 24 小时创建一次(默认)
工作原理:从 WAL 到 LTX
要理解 Litestream 的工作原理,需要先了解 SQLite 的 WAL 机制。
WAL(Write-Ahead Log)
SQLite 支持一种叫做 WAL 的日志模式:
数据变更时,先写入 -wal 文件,而不是直接修改数据库文件
定期将 WAL 中的数据"检查点"(Checkpoint)回数据库文件
可以实现原子性事务和并发读取
其巧妙之处在于:接管了 SQLite 的 Checkpoint 过程。
LTX 文件
Litestream 的核心工作流程:
启动一个长期运行的事务,阻止其他进程执行 Checkpoint
持续读取 WAL 中的新页面
将这些页面打包成 LTX 文件,每个文件分配一个单调递增的事务 ID(TXID)
上传到远程存储
手动触发 Checkpoint,确保数据一致性
LTX 文件的优势:
包含校验和,确保数据完整性
支持 TXID 追踪,实现精确恢复
可以合并压缩,减少存储开销
实战参考
官方提供单一二进制文件,安装非常简单:
基本使用
1. 配置文件(litestream.yml):
YAML
dbs:
- path: /path/to/your/database.db
replicas:
- url: s3://my-bucket/database.db
access-key-id: ${AWS_ACCESS_KEY_ID}
secret-access-key: ${AWS_SECRET_ACCESS_KEY}
2. 启动复制:
litestream replicate
3. 恢复数据:
litestream restore -o restored.db s3://my-bucket/database.db
适用场景
单服务器应用
博客、CMS、小型 SaaS
不需要分布式架构,但需要容灾保护
边缘计算
IoT 设备、边缘节点
本地存储,远程备份
开发测试环境
快速搭建,自动备份
无需维护数据库集群
预算有限的项目
SQLite + Litestream 的成本远低于托管数据库服务
一台服务器即可运行
不适用场景
高并发写入
SQLite 的写入性能有限(约几千 TPS)
需要考虑使用 PostgreSQL
多节点写入
SQLite 是单机数据库
Litestream 只支持单主复制
实时分析
需要复杂的查询优化
考虑使用专门的 OLAP 数据库
几种开源方案对比
| 特性 | SQLite + Litestream | PostgreSQL + 流复制 | MySQL + 主从 |
| 部署复杂度 | (一星)极简 | (四星)复杂 | (四星)复杂 |
| 运维成本 | (一星)极低 | (三星)中等 | (三星)中等 |
| 硬件需求 | (一星)极低 | (四星)高 | (四星)高 |
| 容灾能力 | (三星)良好 | (五星)优秀 | (四星)优秀 |
| 时间点恢复 | 支持 | 支持 | 支持 |
| 多副本支持 | 单副本 | 多副本 | 多副本 |
| 适用规模 | 小型应用 | 中大型应用 | 中大型应用 |
常见问题
Q: Litestream 会影响数据库性能吗?
A: 影响很小。它是异步复制,读取 WAL 文件不会阻塞应用的读写操作。测试显示,性能影响 < 5%。
Q: 数据丢失窗口有多大?
A: 取决于配置。默认情况下,Litestream 每秒检查一次 WAL 变更,因此数据丢失窗口最多 1-2 秒。
Q: 可以在多个位置恢复数据库吗?
A: 可以。Litestream 支持从同一个副本恢复到多个位置,适合灾难恢复和数据分析场景。
Q: 支持 Windows 吗?
A: 支持。Litestream 提供了 Windows 二进制文件,可以作为 Windows 服务运行。
Q: 如何处理大型数据库?
A: Litestream 通过增量复制处理大型数据库。初始复制可能需要较长时间,但后续复制只传输变更数据。
最新版本:0.x
v0.5.17于2026年8月下旬发布。
项目主页:https://github.com/benbjohnson/litestream/