
SQLite Streaming Replication là gì?
SQLite streaming replication là kỹ thuật sao chép dữ liệu SQLite liên tục từ source đến destination trong thời gian thực. Khác với backup định kỳ, replication đảm bảo mọi thay đổi đều được đồng bộ gần như tức thì, giúp giải quyết bài toán fault tolerance cho SQLite — database file-based vốn chỉ hỗ trợ single-node gốc.
Trong bài viết này, chúng ta sẽ tìm hiểu hai công cụ hàng đầu hiện nay: Litestream (disaster recovery) và libSQL (open-source fork từ Turso).

Vấn đề của SQLite trong production
SQLite vô cùng tiện lợi cho development và các ứng dụng nhỏ. Tuy nhiên, khi triển khai production, có ba vấn đề chính:
- Không có replication gốc — SQLite chỉ ghi vào file cục bộ, không tự sao chép sang server khác
- Backup rủi ro — File copy trong lúc ghi sẽ gây corruption nếu không dùng
VACUUM INTOhoặcsqlite3_backup - Khả năng phục hồi hạn chế — Nếu server chết, bạn chỉ có backup cuối cùng (RPO không tốt)
Đó là lý do Litestream ra đời — giải pháp streaming replication nhẹ nhàng cho SQLite.
Litestream: Streaming Replication cho SQLite
Litestream là công cụ disaster recovery chạy background, liên tục sao chép thay đổi SQLite sang S3, SFTP, hoặc file local. Tác giả Ben Johnson đã thiết kế Litestream để:
- Chỉ giao tiếp qua SQLite API — Không đọc raw file, đảm bảo không gây corruption
- Incremental replication — Chỉ sao chép WAL pages thay đổi, không backup toàn bộ mỗi lần
- Checkpoint-safe — Dùng table nội bộ
_litestream_lockđể đồng bộ với WAL checkpoint
Cách Litestream hoạt động
Khi bắt đầu replicate, Litestream tạo table _litestream_lock trong database nguồn. Table này được sử dụng để:
- Mutex acquisition trên SQLite write lock
- Đồng bộ checkpoint (tránh duplicate pages)
- Lưu vị trí WAL offset cuối cùng đã replicate
Mọi thay đổi trong WAL file đều được Litestream bắt và push lên destination theo batch, thường với độ trễ dưới 1 giây.

Cài đặt và cấu hình
# Cài đặt Litestream
curl -sL https://github.com/benbjohnson/litestream/releases/latest/download/litestream-linux-amd64.tar.gz
| tar xvz && sudo mv litestream /usr/local/bin/
# Cấu hình replicaton đến S3
cat > /etc/litestream.yml <<EOF
dbs:
- path: /var/lib/app/data.sqlite3
replicas:
- type: s3
bucket: my-backup-bucket
path: litestream/db
endpoint: https://s3.amazonaws.com
access-key-id: $AWS_ACCESS_KEY_ID
secret-access-key: $AWS_SECRET_ACCESS_KEY
sync-interval: 5s
EOF
# Chạy Litestream
litestream replicate /var/lib/app/data.sqlite3
Khôi phục backup
# Khôi phục database từ S3
litestream restore -o /var/lib/app/data.sqlite3 s3://my-backup-bucket/litestream/db
# Khôi phục đến thời điểm cụ thể
litestream restore -timestamp "2026-09-01T10:00:00Z"
-o /var/lib/app/data.sqlite3 s3://my-backup-bucket/litestream/db
Tính năng point-in-time recovery đặc biệt hữu ích khi cần roll back dữ liệu sau sự cố.
Tại sao SQLite vẫn dùng trong production?
Dù có những giới hạn kể trên, SQLite vẫn được lựa chọn làm database chính trong nhiều hệ thống production lớn như:
- Adobe dùng SQLite trong cú pháp tài liệu của Photoshop
- WhatsApp lưu trữ tin nhắn trên thiết bị mobile
- Apple nhúng SQLite trong Core Data trên iOS/macOS
- Firefox dùng SQLite cho bookmarks, cookies, history
Lợi thế: zero configuration, zero maintenance, zero dependencies — chỉ cần một file duy nhất. Đây chính là lý do hơn 50 tỷ thiết bị trên thế giới sử dụng SQLite.
Rủi ro corruption khi backup sai
Nếu dùng cách copy thủ cản cp data.db backup.db trong lúc database đang ghi, bạn sẽ nhận được file lỗi thời hoặc bị corruption. Litestream tránh vấn đề này hoàn toàn bằng cách chỉ đọc WAL pages thông qua SQLite API — không bao giờ chạm đến raw file.
libSQL: Fork SQLite cho replication gốc
libSQL là open-source fork của SQLite do Turso phát triển, với hơn 17.000 GitHub stars. libSQL mở rộng SQLite với:
- Embedded replicas — Database replicated cục bộ trong chính ứng dụng của bạn
- Remote access — Truy cập database từ xa giống PostgreSQL/MySQL
- ALTER TABLE nâng cao — Sửa đổi column type và constraints
- WebAssembly UDF — Viết user-defined functions bằng Wasm
- Randomized ROWID — Ngăn chặn timing attacks trên auto-increment
So sánh Litestream và libSQL
| Tiêu chí | Litestream | libSQL |
|---|---|---|
| Phương pháp | Streaming backup đến S3/file | Embedded replicas + remote server |
| Lag replication | 5-60 giây (tùy config) | Near real-time qua libSQL server |
| Recovery model | Disaster recovery (full restore) | Continuous replication (live) |
| Storage backend | S3, SFTP, Google Cloud, Azure | Turso cloud hoặc self-hosted |
| Compatibility | SQLite gốc (100%) | SQLite-compatible nhưng có behavioral changes |
| Complexity | Rất thấp (1 binary, 1 config) | Cao hơn (server + replication protocol) |
Litestream + libSQL: Sử dụng kết hợp
Một pattern phổ biến là kết hợp cả hai: dùng libSQL embedded replica cho low-latency reads local, đồng thời dùng Litestream replicate libSQL file đến S3 để disaster recovery. Setup:
# libSQL replica cục bộ
./sqld --http-listen 127.0.0.1:8080
--primary-db-url file:///var/lib/app/data.db
--replica-db-url file:///var/lib/app/data-replica.db
# Litestream backup replica
litestream replicate /var/lib/app/data-replica.db
s3://my-backup/litestream/libsql-db
Cách này đảm bảo có hai lớp bảo vệ: replica cho reads nhanh, S3 backup cho khi server vật lý hỏng hoàn toàn.
LiteFS: Replication cho ứng dụng phân tán
LiteFS (do Fly.io phát triển) là giải pháp FUSE-based replication cho SQLite trên infrastructure phân tán. LiteFS:
- Tạo filesystem layer ghi lại mọi page-level change
- Primary node nhận writes, replicate sang secondary nodes
- Hỗ trợ multi-region với automatic failover
LiteFS phù hợp hơn Litestream khi bạn cần reads phân tán real-time thay vì chỉ backup.
Khi nào dùng gì?
- Litestream: Đơn giản nhất, đủ cho 90% trường hợp. Ideal cho VPS, Raspberry Pi, hoặc bất kỳ đâu có SQLite + S3.
- libSQL / Turso: Khi cần embedded replica low-latency hoặc remote access cho SQLite từ nhiều app server.
- LiteFS: Khi cần replication across multiple nodes trên distributed infrastructure như Fly.io.
SQLite không còn là database chỉ dùng cho development. Với các công cụ streaming replication hiện đại, bạn có thể chạy SQLite production-grade với độ tin cậy cao.
