个人网站、小工具、游戏服的排行榜——小项目的第一道技术选择题就是「用什么数据库」。选重了浪费机器资源,选轻了以后哭。这篇用一张决策树 + 三个真实场景,讲清 SQLite 和 MySQL 在个人服务器上的取舍。
本文基于 财富云计算 NAT 型云服务器(无独立公网 IP、价格比独立 IP 机型省一半以上)的部署实践。结论先行:个人小项目默认 SQLite,出现明确信号再迁 MySQL。
一、两者在个人机器上的真实差别
不谈企业级理论,只看 2G/4G 小机器上的实际账:
| 维度 | SQLite | MySQL |
|---|---|---|
| 是什么 | 一个文件,库就是文件 | 独立服务进程 |
| 内存占用 | 0(读写时用一点) | 300-500M 常驻(小配置也要 300M+) |
| 安装 | 程序自带,零安装 | apt 装一套 + 初始化 + 调优 |
| 维护 | 备份 = 复制文件 | 备份 = mysqldump/binlog |
| 并发写 | 单写(写时锁库) | 多写,行级锁 |
| 网络访问 | 无(本机文件) | 有端口(也是攻击面) |
| 适合规模 | 单用户/低并发 | 多用户/高并发 |
对小机器最关键的是内存:一台 2G 的 NAT 型小机器跑 MySQL,光数据库就吃掉 300-500M——跑 SQLite 的程序只用几十兆。同样的机器,SQLite 让你把内存花在真正需要的地方(比如游戏服)。
二、决策树:30 秒做选择
你的项目是?
├─ 个人博客 / 展示页 / 单机小工具
│ └─ 写多读少?→ SQLite ✅
├─ 个人网站,日 IP < 1000
│ └→ SQLite ✅(Typecho 原生支持)
├─ 需要多人同时写(论坛、协作、排行榜实时更新)
│ └→ MySQL ✅
├─ 要存二进制大文件(图片/视频)
│ └→ 都不适合!走对象存储
│ https://z0w.cn/wiki/object-storage-static-guide.html
├─ 数据量 > 10GB 或单表 > 千万行
│ └→ MySQL ✅
├─ 要跨机器访问同一个库
│ └→ MySQL ✅(SQLite 是单机文件)
└─ 不确定,先试试
└→ SQLite 起步,出现下面三个信号再迁三、三个真实场景的答案
场景一:Typecho/WordPress 个人博客
答案:SQLite。Typecho 原生支持 SQLite,选它连数据库服务都不用装:
- 内存省 400M+
- 备份 = 打包一个
.db文件(备份方案现成) - 日 IP 几千以内的博客,SQLite 性能毫无压力
- 想换机器?文件拷走即迁移
教程见用云服务器搭建 Typecho 博客,SQLite 与 MySQL 的详细对比在 Typecho 主题选择与插件推荐里也有提到。
场景二:游戏服的排行榜 / 玩家数据
看并发:
| 情况 | 选择 | 原因 |
|---|---|---|
| 好友服 10 人,排行榜查看着玩 | SQLite | 写操作少,文件锁无感知 |
| 50 人 PVP 服,实时击杀榜 | MySQL | 高频并发写,SQLite 会锁库卡顿 |
| 和游戏服务端同机 | SQLite | 省下的内存给游戏服,见一台服务器多功能规划 |
场景三:小工具 / API 服务
自用的小工具(书签、待办、短链接)——SQLite,没有例外。这类项目并发 = 1(就是你),MySQL 纯属多余。
四、什么时候该从 SQLite 迁 MySQL
三个明确信号,出现任何一个再迁,不要提前焦虑:
| 信号 | 说明 |
|---|---|
写并发报错:日志出现 database is locked | 多人同时写,SQLite 锁库了 |
| 查询变慢:简单查询开始秒级 | 数据量或并发上来了 |
| 要多机访问:应用和库要分开部署 | SQLite 是文件,跨不了机器 |
迁移本身不可怕(工具成熟,网站数据库迁移实战有五步法),难受的是过早迁移——小机器上养一个 400M 的 MySQL,两年后回头看全是浪费。
五、SQLite 的正确使用姿势
选了 SQLite,三件事做好:
1. 备份就是复制文件(但要避开写时刻)
# SQLite 在线备份(不锁库的安全方式)
sqlite3 /path/to/data.db ".backup '/backup/data_$(date +%F).db'"
# 或者用程序自带的 vacuum into
sqlite3 /path/to/data.db "VACUUM INTO '/backup/data_$(date +%F).db'"挂 crontab 每天跑,见crontab 计划任务完全指南。
2. WAL 模式提升并发(重要)
# 开启 WAL,读写不互斥,个人站也够用了
sqlite3 /path/to/data.db "PRAGMA journal_mode=WAL;"
# 程序侧对应配置:Typecho 等在配置文件里指定 SQLite 时自动适配3. 权限收紧
# 数据库文件只给应用用户读
chmod 600 /path/to/data.db
chown www-data:www-data /path/to/data.db
# 数据库目录不要放在 Web 可访问目录下!最后一条是血泪教训——.db 文件放在网站根目录被直接下载的事故,每年都有。
六、MySQL 什么时候用、怎么省着用
真到了该用 MySQL 的时候(多人协作、高并发),小机器上这样省:
# 小内存机器的 my.cnf 关键配置(2G 机器示例)
[mysqld]
innodb_buffer_pool_size = 256M # 别超过机器内存 1/4
performance_schema = OFF # 省 100M+
skip-name-resolve # 省 DNS 查询
max_connections = 50 # 个人服务 50 够
# 安全加固:改 root 密码、禁远程 root、删测试库
# https://z0w.cn/wiki/database-security-hardening.htmlMySQL 的完整运维(安装、备份、主从、优化)见MySQL 安装与优化入门、MySQL 备份与恢复实战。
七、常见疑问
Q:SQLite 真的能扛几千 IP 的网站吗?
能。Typecho + SQLite 扛日 IP 几千的博客是社区常态——读多写少的场景 SQLite 很从容。瓶颈通常在 PHP/带宽,不在数据库。
Q:SQLite 数据会损坏吗?
正常使用 + WAL 模式下很稳。做好每日备份(复制文件那么便宜),坏了回滚就是。
Q:先 SQLite 后迁 MySQL,应用要改代码吗?
大多数程序(Typecho、WordPress 等)两者都支持,切换 = 导数据 + 改配置,不用改业务代码。这正是「SQLite 起步」成本低的原因。
Q:Redis 算数据库吗,和这俩怎么配合?
Redis 是缓存/高速存储,不是主数据库。小项目里它的角色是「给 SQLite/MySQL 挡流量」,见Redis 安装与缓存应用。
结语
小项目选数据库的智慧就一句话:用满足当前需求的最轻方案,给未来留一条迁移的路。对绝大多数个人网站和小工具,这个最轻方案是 SQLite——不占内存、不用维护、备份就是一个文件。等并发真的来了,MySQL 在那里等你,迁移成本远没有想象的高。
配套阅读:MySQL 安装与优化入门、数据库安全加固与权限最小化、个人网站最省方案。
财富云计算 专注 NAT 型云服务器,无独立公网 IP、价格比独立 IP 机型省一半以上,2G 小机器也能跑 SQLite 博客 + 游戏服,一台机器多功能复用见一台服务器多功能规划。
延伸阅读
- 网站环境怎么选:LNMP 手动 / 宝塔面板 / Docker / 云开发
- 问卷表单系统搭建:SurveyKing / Formbricks,数据自己收
- 图床搭建:Lsky Pro / Lychee,自托管图片托管方案
- 邮件列表搭建:listmonk 自托管 Newsletter,把读者握在自己手里
- 文档站点搭建:MkDocs / VuePress / Docsify,产品文档与技术手册方案
- RSS 阅读器搭建:FreshRSS 自托管,把信息流拿回自己手里
- 短链接服务搭建:Shlink 自托管,链接数据自己掌握
- 网站状态监控页搭建:Uptime Kuma,服务器挂了第一时间知道

[...]docker system prune -f --volumes六、扩展:往这套里加什么需求加什么自己的博客Typecho 容器(Typecho 搭建)数据库MySQL/PostgreSQL 容器(SQLite 与 MySQL 怎么选先想清楚)游戏服用容器跑也行(Docker 部署游戏服务器),但注意性能和存档位置密码管理Vaultwarden(Bitwarden 自建)RSS 阅读FreshRS[...]
2026-10-18 回复
[...]netsh advfirewall firewall add rule name="GameRange" dir=in action=allow protocol=UDP localport=26901-26903完整的 Windows 环境准备(远程桌面连接、运行库安装、SteamCMD 用法、开机自启、8 个常见坑)见:《Windows 云服务器开服通用前置教程》→ htt[...]
2026-10-18 回复