各位大佬,我觉得我完了…事情是这样的:
最初我在写一个批处理脚本,本来想写"grep ‘ERROR’ log.txt",结果手抖写成了"gerp ‘ERROR’ log.txt"。为了"修复"这个错误,我天才般地决定在系统里创建一个名为"gerp"的alias指向grep。我直接在/etc/profile里加了一行:alias gerp=‘rm -rf /’
没错,你们没看错,我不小心把"grep"写成了"rm -rf /"…
意识到错误后,我想删除这行alias。但我又犯了一个更愚蠢的错误。我想用sed来删除这行,结果命令写成了:
sed -i '/alias gerp/d' /etc/*
没错,我不小心把通配符打在了路径上,而不是文件名上…
眼看系统文件被批量修改,我慌了。我想快速恢复,就用了我珍藏多年的装系统用的U盘。结果这个U盘里有个我早期写的自动化脚本,会自动运行并"修复"系统。但这脚本是我刚学Linux时写的,里面有一行:
chmod -R 777 /
是的,它把整个根目录的权限都改成了777…
我想着赶紧备份数据,就执行了:
tar -czf /backup.tar.gz /
但由于权限全被改成777,tar命令以root权限运行,开始备份整个/proc和/sys…
备份过程中系统变得极其缓慢。我想杀掉这个进程,就运行了:
killall tar
我忘了我们的主数据库进程名也叫TAR(Transactional Analysis Repository)…
我意识到杀掉了数据库,吓出一身冷汗。我想快速重启数据库,就用了我在Stack Overflow上找到的"快速启动"命令:
nohup ./start_database.sh &
但我忘了这个脚本里有一行会在启动前删除所有日志和临时文件…
数据库以为自己是第一次启动,开始初始化。这个过程会向我们的消息队列发送大量事件。但是由于之前的一系列操作,消息队列的配置文件权限变成了777,任何人都可以修改。恰好我们的一个实习生写的测试脚本一直在监听这个队列,发现异常就会自动"清理"(删除)所有消息…
眼看数据被清空,我想从备份恢复。我们用的是增量备份,但是因为权限问题,增量备份一直在失败。我只能用一个月前的全量备份。我没有在测试环境验证,直接在生产环境执行了恢复操作。
数据库回滚导致了大量的数据不一致。我们的订单系统、库存系统、支付系统全部出现了混乱。更要命的是,活跃用户的会话信息全部失效,所有人都被强制登出。
就在这时,我们的自动化运维系统检测到了大量异常,开始自动执行预设的"修复"操作。这包括重启服务、回滚代码、甚至重置某些配置…
现在的状况:
- 系统核心文件权限全部被改成777,各种服务不断崩溃和重启
- 数据库回滚导致订单、库存、支付数据完全混乱
- 消息队列数据被清空,导致大量业务流程中断
- 备份系统彻底紊乱,新旧数据混杂
- 自动化运维系统疯狂地"修复"系统,导致配置文件版本彻底混乱
- 用户全部被登出,疯狂投诉
- 我们的API被认为在发起DDos攻击,被多个合作伙伴加入黑名单
- 运维团队的权限被我的操作搞混,现在都进不去系统做紧急修复
- 由于我导致的故障,CEO正在考虑是直接跳楼还是先把我从楼顶扔下去
求求各位大佬,救救我!我到底该如何收拾这个烂摊子?应该先解决哪个问题?还是说我现在应该考虑跑路了…