DAY013 – 订单数据库文件被移走

举报
yd_287083129 发表于 2026/11/07 20:26:23 2026/11/07
【摘要】 故障场景故障现象:首页与 API health 正常,但订单接口返回 500,应用日志提示数据库文件无法打开。服务器状态:server2:状态 INJECTED;开始时间 2026-07-25 05:00:28 +0800;影响范围 演练项目受影响,SSH 不受影响,非演练业务不应受影响。 排障过程先看项目文档实际 curl 本地订单接口查看后端日志报错“error=no such tab...

故障场景

故障现象:首页与 API health 正常,但订单接口返回 500,应用日志提示数据库文件无法打开。

服务器状态:

server2:状态 INJECTED;开始时间 2026-07-25 05:00:28 +0800;影响范围 演练项目受影响,SSH 不受影响,非演练业务不应受影响。

排障过程

先看项目文档

实际 curl 本地订单接口

查看后端日志

报错“error=no such table: orders”,没有找到对应的表,说明是数据库方面导致的问题

先看项目中代码是如何使用数据库的

可以看出数据库使用的 sqlite3,这个轻量数据库没有数据库服务器,环境变量中所指的 orders.db 就是数据库本身,所以我们主要花功夫在这个数据库文件上

看完代码后我们知道数据库文件在 /opt/hermes-drills/day013/data/orders.db

文件存在但是大小为 0,有可能本来没有文件,由于启动程序才被 sqlite3.connect("orders.db") 导致创建文件

发现没有任何表

是不是初始化数据库的过程出了问题

查找初始化数据库相关文件和代码

data 目录下有另外一份数据库相关文件,名称高度类似,并且检测 sql 代码中关于建表语句的命令也检测出 orders.db.moved 中有匹配内容

这次我放机灵点,ls 时把 -a 也加上,不错过隐藏文件

可以看到 orders.db.moved 占用 12KB,可能它才是真正我们需要的数据库

文件类型确实是数据库类型

看看它是不是存放有我们的 orders 表

当前可以判断 orders.db.moved 才是我们真正需要的数据库文件

现在应该保留现场,方便后期回溯,运维做事不做绝嘛。这只是个模拟故障的场景,实际生产环境,说不定就成删库事故了

恢复了

生产环境我们其实还应该看什么导致了这次事故并记录下来,确定责任

可以看审计日志、history 历史、grep -R 搜索相关脚本的关键字

但我这个环境时 codex 的脚本远程制造的,就先到这里了

原文首发于个人博客:liujixiang.de5.net

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0)

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。