18 10 月 2026

个人网站、小工具、游戏服的排行榜——小项目的第一道技术选择题就是「用什么数据库」。选重了浪费机器资源,选轻了以后哭。这篇用一张决策树 + 三个真实场景,讲清 SQLite 和 MySQL 在个人服务器上的取舍。

本文基于 财富云计算 NAT 型云服务器(无独立公网 IP、价格比独立 IP 机型省一半以上)的部署实践。结论先行:个人小项目默认 SQLite,出现明确信号再迁 MySQL。

一、两者在个人机器上的真实差别

不谈企业级理论,只看 2G/4G 小机器上的实际账:

维度SQLiteMySQL
是什么一个文件,库就是文件独立服务进程
内存占用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.html

MySQL 的完整运维(安装、备份、主从、优化)见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 博客 + 游戏服,一台机器多功能复用见一台服务器多功能规划。

延伸阅读
  1. 网站环境怎么选:LNMP 手动 / 宝塔面板 / Docker / 云开发
  2. 问卷表单系统搭建:SurveyKing / Formbricks,数据自己收
  3. 图床搭建:Lsky Pro / Lychee,自托管图片托管方案
  4. 邮件列表搭建:listmonk 自托管 Newsletter,把读者握在自己手里
  5. 文档站点搭建:MkDocs / VuePress / Docsify,产品文档与技术手册方案
  6. RSS 阅读器搭建:FreshRSS 自托管,把信息流拿回自己手里
  7. 短链接服务搭建:Shlink 自托管,链接数据自己掌握
  8. 网站状态监控页搭建:Uptime Kuma,服务器挂了第一时间知道
更多阅读
  1. 上一篇:top 命令高级用法:不止看内存占用,这么读才专业
  2. 下一篇:Docker 一键部署常用服务:博客、网盘、监控一套 compose 全起
发表评论 2