为什么很多 PHP 项目从 SQLite 开始

SQLite 非常适合早期项目:零安装、文件即数据库、部署简单。用来做 MVP、内部工具、轻量系统特别顺手。但当数据量和并发上来后,就会开始碰到限制,比如写入锁、备份运维、多人协作与报表性能。

什么时候该升级到 MySQL

  • 后台多人同时写入(订单、领券、记账)
  • 你需要托管数据库(Hostinger / 云主机常见)
  • 需要更强索引/统计/导出能力
  • 运维需求:备份、监控、权限分离

步骤 1:冻结写入(避免数据漂移)

迁移前建议安排维护窗口,暂停写入操作,避免导出后数据继续变化导致对不上。

步骤 2:导出 SQLite 的表结构与数据

如果你有命令行权限:

sqlite3 data/app.db .schema > schema.sql
sqlite3 data/app.db .dump > dump.sql

如果没有命令行,也可以写一个 PHP 脚本用 PDO 把数据读出来生成 INSERT 语句。

步骤 3:处理类型差异(最容易踩坑)

SQLite 对类型很宽松,但 MySQL 更严格。常见转换:

  • INTEGER PRIMARY KEYINT AUTO_INCREMENT PRIMARY KEY
  • TEXTVARCHAR(255)TEXT
  • 日期时间如果存成 TEXT,建议改为 DATETIME

步骤 4:创建 MySQL 表并补齐索引

创建新数据库后,先导入整理好的 schema。并且为常查字段加索引(例如:user_id、created_at、status),否则看板会变慢。

步骤 5:安全导入数据

导入顺序建议:

  1. 基础字典表
  2. 用户表
  3. 交易/日志/审计记录

导入前后务必核对行数与关键统计(总金额、总记录数)。

步骤 6:改造 PHP PDO 连接(建议做成可切换)

把连接集中到一个配置文件,然后用环境变量切换数据库:

// config.php
return [
  'db_driver' => 'mysql',
  'db_host'   => 'localhost',
  'db_name'   => 'scoryon',
  'db_user'   => 'user',
  'db_pass'   => 'pass',
];

步骤 7:验证关键流程

  • 登录/权限
  • 新增/编辑/删除
  • 统计报表与导出
  • 后台调整与审计日志

常见错误(避坑清单)

  • 没加索引 → 看板统计变慢
  • 字符集没统一(推荐 utf8mb4)
  • 日期时间比较逻辑不同
  • 没做导入前后数据核对

总结

“SQLite 起步 → MySQL 扩展”是非常聪明且现实的路线。只要迁移流程可复现、校验做扎实,就能在不破坏系统的前提下平滑升级。

如果你希望我帮你把真实系统迁移得更稳,可以看看 服务作品