1. 网站无法访问
也就几个小时没看,网站(也就是本站)竟然无法访问了,如下图这样只报了一个HTTP ERROR 500
。
多余的信息一个也没有,不管怎么刷新,控制台什么也没有输出。
2. 开始调查
2.1 网络
因为刚连过VPN,首先怀疑是网络问题。但是VPN断掉了还不起作用,换到手机的浏览器上也还是不行,而且手机用的是流量。错怪你了。
2.2 域名
域名没过期,域名解析没问题,ssl证书前几天才更新过。
2.3CDN
本站使用了阿里云的CDN,有理由怀疑CDN。但是并没有改过配置,而且CDN运行状态正常,就算把CDN停用了直接访问源站还是报500。也错怪你了。
2.4 服务器
服务器用的腾讯云的,实例状态正常,实例监控也正常。
在服务器上用docker
起了两个服务,在腾讯云控制台可以看到两个容器的状态都是运行中
。
一个容器是本站,现在访问报500
;另一个容器的服务可以正常访问。
通过查看nginx
的日志,除了从某个时间开始一直报500
就再没有别的异常。那么问题到底出在哪?
3. 解决问题
重启能解决大部分的问题,刚刚说过了有两个容器,谁有问题就重启谁,试试重启完会不会好,先恢复网站访问最重要。
两个红红的大字——失败,刺痛了我的双眼。为什么运行状态正常,一重启就失败了,为什么要这样对我?
去看了容器的日志,你猜它怎么说——Unknown database 'halo2'
。
这是我的docker-compose.yaml
配置,就是写的halo2
,而且一直是通过docker
启动服务的,也不会去改数据库的配置。
services:
halo:
省略...
command:
- --spring.r2dbc.url=r2dbc:pool:mysql://localhost:3306/halo2
省略...
其实看到Unknown database 'halo2'
的错误信息,我心里已经明白怎么回事了,这个库让我删了。
就在几个小时前,我发现和本站有关的数据库有两个,一个是halo
,一个是halo2
。
在几个月前我给本站换过一个新的库halo2
,halo
就闲置了,也没有想着去删它。然后就在对此事有些许遗忘的几个月之后,我把halo2
当做闲置的库,随手就给删了。
好在每天都有备份,原因找到就很好恢复了,备份真的真的真的很有必要(但是为啥在删除halo2
之前没想起备份呢)。
4. 反思
经过几个小时的排查,最后发现竟然是一个很搞笑又很低级的原因。
因为是个人的项目,这次的损失就是网站几小时无法访问。也因为是个人项目,就缺乏足够的警惕心和敬畏心,这是绝对不可以的。
如果是公司项目,这将是一个很严重很严重的事故,丢工作都是小意思的,虽然在公司不会有这么大的权限。
有以下两点反思:
任何操作,尤其是敏感操作,一定要小心再小心,不管是工作还是个人。
主动备份,只要有备份就还有救。
本次事故没有给任何人造成损失,就罚我晚上少吃一些吧。
以上。