踩坑记录后端数据库运维

中小软件项目的 10 个技术踩坑记录

汇总近三年中小项目中反复踩到的技术坑:从并发扣库存到慢查询优化,每一条都对应真实生产事故。

2025-07

1. 并发扣库存:先锁后查

:先查询库存再判断,超卖事故。 解法UPDATE ... SET stock = stock - 1 WHERE stock > 0,用原子操作 + 影响行数判断。

2. 慢查询:索引失效的常见原因

LIKE '%keyword%' 前缀模糊导致全表扫描。 解法:业务上改为前缀匹配,或引入 ES;必要时用覆盖索引。

3. 时区问题:永远存 UTC

:直接存东八区字符串,跨平台解析乱套。 解法:数据库统一 UTC,展示层再转本地时区。

4. 上传文件:务必做类型校验

:只看扩展名放行,被上传了 web shell。 解法:校验 MIME + 魔数 + 重命名存储 + 独立静态域。

5. 配置管理:敏感信息不进代码仓库

:数据库密码写死在代码里,仓库泄露全完。 解法:环境变量 + 密钥管理服务,.env 不进 git。

6. 定时任务:防重复执行

:多实例部署后定时任务重复跑,产生重复数据。 解法:分布式锁(Redis SETNX + 过期时间)。

7. 第三方接口:必须做超时与重试

:调用支付接口不设超时,接口挂了页面一直转圈。 解法:统一 HTTP 客户端,设置连接/读取超时 + 幂等重试。

8. 日志:关键节点必须留痕

:线上出问题查不到上下文,只能靠猜。 解法:请求 ID 贯穿全链路,关键操作打印结构化日志。

9. 数据库连接池:用完必还

:连接未释放,连接池耗尽服务假死。 解法:使用 ORM/连接池管理,禁止手写裸连接不关闭。

10. 备份:先演练恢复

:有备份但从没演练过,真出事时恢复失败。 解法:定期做恢复演练,备份文件异地存储。

写在最后

这 10 条几乎都是"看起来很简单,出事很严重"的典型。小项目更要注重基本功,把这些变成肌肉记忆。