爱库录 目录即站点,文件即文章

数据永远在自己手里-1

2026-09-17 · 快速上手 · 返回列表

title: "数据永远在自己手里:备份就是复制一个文件" date: 2026-09-17 tags: [数据主权, 自部署, SQLite, 备份] category: 快速上手 description: "你的博客数据不是锁在某个 SaaS 平台里的。它是你服务器上的一堆文件,随时可以复制、迁移、备份。"

数据永远在自己手里:备份就是复制一个文件

用过 SaaS 博客平台的人都有过这种焦虑:

  • 平台会不会倒闭?
  • 会不会突然涨价?
  • 导出格式是不是专有的?
  • 我的内容是不是在帮平台打工?

这种焦虑不是多余的。 Google Reader 关了,Tumblr 几经转手,Medium 越来越商业化。你在平台上写的内容,本质上不属于你。

爱库录的数据长什么样

data/
├── aiklog.db          # SQLite 数据库
├── aiklog.db-wal      # WAL 日志
└── aiklog.db-shm      # 共享内存

blog/
├── 关于/
│   └── 这个博客是怎么搭的.md
├── 技术/
│   ├── Go并发模式实战笔记.md
│   └── Docker多阶段构建实战.md
└── ...

两种数据,两种备份方式:

Markdown 文件

你的文章就是 .md 文件。可以用任何方式备份:

# 复制
cp -r blog/ /backup/blog/

# rsync 增量同步
rsync -av blog/ /backup/blog/

# Git 版本管理
cd blog && git add . && git commit -m "backup" && git push

SQLite 数据库

索引、配置、用户数据、标签、向量——都在一个 .db 文件里。

# 备份数据库
cp data/aiklog.db /backup/aiklog-$(date +%Y%m%d).db

# 或者用 SQLite 的在线备份(不锁库)
sqlite3 data/aiklog.db ".backup '/backup/aiklog.db'"

备份就是复制文件。 不需要 mysqldump,不需要导出工具,不需要停服务。

恢复

# 把备份文件复制回来
cp /backup/aiklog.db ./data/aiklog.db
cp -r /backup/blog/ ./blog/

# 启动服务
./aiklog -addr 127.0.0.1:8780 -db ./data/aiklog.db

恢复也是复制文件。 分钟级完成。

迁移

换服务器?换系统?

# 在旧服务器上打包
tar czf aiklog-backup.tar.gz data/ blog/

# 传到新服务器
scp aiklog-backup.tar.gz new-server:~/

# 在新服务器上解压并启动
tar xzf aiklog-backup.tar.gz
./aiklog -addr 127.0.0.1:8780 -db ./data/aiklog.db

整个博客 5 分钟内迁移到新服务器。

为什么选 SQLite

很多人问:为什么不用 MySQL / PostgreSQL?

| | MySQL/PostgreSQL | SQLite | |---|---|---| | 安装 | 需要单独安装配置 | 无需安装,内嵌 | | 备份 | mysqldump / pg_dump | 复制一个文件 | | 迁移 | 导出/导入/版本兼容 | 复制一个文件 | | 运维 | 需要管理进程、用户、权限 | 无需运维 | | 性能 | 高并发强 | 单机足够 |

对于个人博客,SQLite 的优势远大于它的局限。 单机部署、简单备份、零运维——这些才是个人博客真正需要的。

如果你需要多人协作、高并发,SQLite 不是最佳选择。但对于 99% 的个人博客场景,它完全够用。

数据格式的可迁移性

Markdown

Markdown 是纯文本。任何编辑器都能打开,任何系统都能导入。不存在「格式锁定」的问题。

未来不想用爱库录了?你的 .md 文件可以直接导入 Hugo、Hexo、Obsidian、Notion——几乎所有知识管理工具都支持 Markdown。

SQLite

SQLite 是世界上部署最广泛的数据库。数据在 .db 文件里,可以用任何 SQLite 工具读取、查询、导出。

# 用命令行查看数据
sqlite3 data/aiklog.db "SELECT title, slug FROM articles;"

# 导出为 CSV
sqlite3 -header -csv data/aiklog.db "SELECT * FROM articles;" > articles.csv

# 导出为 JSON
sqlite3 -json data/aiklog.db "SELECT * FROM articles;" > articles.json

你的数据不是锁在专有格式里的。 它在标准文件格式里,随时可以导出、迁移、转换。

一句话总结

你的内容是你写的,数据应该在你手里。

不是信任某个平台不会倒闭,而是即使平台倒了,你的内容也不会丢。

这才是「自部署」的真正意义。


相关:[[13MB 单二进制:一条命令跑起博客]] — 了解如何部署。