删库不要跑,我站起来还可以删

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介: 原文地址:https://copyfuture.com/blogs-details/201909061555306597xvo4pefwz7sy68 删库不要跑,学学下面的操作,每天执行一次rm -rf /*不是梦 上午删完,下午恢复,一天就过去了,还不用加班 前些日子在菜鸟架构上看到一篇服务器误删文件的恢复过程文章,感觉挺有意思的,在这里进行分享一波。

原文地址:
https://copyfuture.com/blogs-details/201909061555306597xvo4pefwz7sy68

删库不要跑,学学下面的操作,每天执行一次rm -rf /*不是梦
上午删完,下午恢复,一天就过去了,还不用加班

前些日子在菜鸟架构上看到一篇服务器误删文件的恢复过程文章,感觉挺有意思的,在这里进行分享一波。

事故背景

大佬:"这里有个在生产服务器上安装Oracle的任务,部门的哪个妹子接一下"
然后有个妹子接受了大佬的安装Oracle的任务,妹子未注意到shell的语法,当变量未被赋值的时候,会是个空值。注意了,圈起来要考的。

妹子执行命令如下:

rm -rf $ORACLE_BASE/*

看到这条命令,你就知道有多危险了,更何况妹子用的是root账号??what?

“很幸运”,ORACLE_BASE不存在或者未赋值,上面命令变成大家熟悉的:

rm -rf /*

root用户?执行后,可以跑路了...
(插个小技巧:使用${var:=初始值},可以让未定义的变量或者空值进行赋初值)

当然,妹子没跑路,那个大佬也没跑路,稳稳的背下了恢复数据的大锅。

整个盘的文件都被删了,咋办~ ~

大佬的原文是:

mysql数据库不是在运行吗?linux能删除正在执行的文件?反正是彻底删除了,最后还剩一个tomcat的log文件,估计是文件过大,一时没有删除成功

看着妹子自责的眼神,又是因为这事是我安排她做的,也没有跟她讲清厉害关系,没有任何培训,责任只能一个人背了,况且怎么能让美女背负这个责任呢? 打电话到机房,将盘挂到另一台服务器上,ssh上去查看文件全部被清,这台服务器运行的可是一个客户的生产系统啊,已经运行大半年了,得尽快恢复啊。于是找来脱机备份的数据库,发现备份文件只有1kb,里面只有几行熟悉的mysqldump注释(难道是crontab执行的备份脚本有问题),最接近的备份也是2013年12月份的了,真是屋漏偏逢连夜雨啊。想起来一位领导说过的案例:当一个生产系统挂掉以后,发现所有备份都有问题,刻录的光盘也有划痕,磁带机也坏了(一个业界前辈,估计以前还用光盘做备份了),没想到今天真的应验到我的身上了,怎么办??

部门领导知道情况后,已经做了最坏的B计划:领导亲自带队和产品AA周日赶到客户所在的地市,星期一去领导层沟通;BB和CC去客户管理员那边想办法说服客户。。。


大佬接下来试了两种方法恢复数据:
ext3grep和extundelete,都是只能恢复一部分数据(原因:事故发生后,没有及时发现,造成部分数据写入磁盘,造成不可恢复问题。)

两个工具的下载地址(寄希望于工具?送四个字:听天由命):
ext3grep:https://code.google.com/p/ext3grep/
extundelete:http://extundelete.sourceforge.net/

庆幸的是:
binlog文件还在。没看到大佬说的是恢复的binlog文件还是说该文件存在另外的盘,反正就是binlog文件找到了。

那不用说,数据是没问题了。普及下binlog文件的认识。

binlog 基本认识

MySQL的二进制日志可以说是MySQL最重要的日志了,它记录了所有的DDL和DML(除了数据查询语句)语句,以事件形式记录,还包含语句所执行的消耗的时间,MySQL的二进制日志是事务安全型的。

一般来说开启二进制日志大概会有1%的性能损耗,这点消耗完全是可以接受的,为了数据的安全。

从binlog日志恢复数据

恢复语法格式:
mysqlbinlog mysql-bin.0000xx | mysql -u用户名 -p密码 数据库名

常用选项:
  --start-position=953                   起始pos点
  --stop-position=1437                   结束pos点
  --start-datetime="2013-11-29 13:18:54" 起始时间点
  --stop-datetime="2013-11-29 13:21:53"  结束时间点
  --database=zyyshop                     指定只恢复zyyshop数据库(一台主机上往往有多个数据库,只限本地log日志)
    
不常用选项:    
  -u --user=name              Connect to the remote server as username.连接到远程主机的用户名
  -p --password[=name]        Password to connect to remote server.连接到远程主机的密码
  -h --host=name              Get the binlog from server.从远程主机上获取binlog日志
  --read-from-remote-server   Read binary logs from a MySQL server.从某个MySQL服务器上读取binlog日志

小结:实际是将读出的binlog日志内容,通过管道符传递给mysql命令。这些命令、文件尽量写成绝对路径;

总结一波

说实话,错误挺低级的。应该比我以前写的一篇,redis key*的那种错误更加低级。

先看看大佬的总结:


  • 本次安排MM进行服务器维护时没有提前对她进行说明厉害情况,自己也未重视,管理混乱,流程混乱。一个在线的生产系统,任何一个改动一定要先谋而后动。
  • 自动备份出现问题,没有任何人检查。脱机备份人员每次从服务器上下载1k的文件却从未重视。需要明确大家在工作岗位上的责任。
  • 事故发生后,没有及时发现,造成部分数据写入磁盘,造成不可恢复问题。需要编写应用监控程序,服务一旦有异常,短信告警相关责任人。
  • 不能使用root用户来操作。应该在服务器上开设不同权限级别的用户。

我也简单的总结一下:
猜想,这个妹子应该是运维的小姐姐,不是开发人员(运维吗?过分了呀,那我也要转运维)

  • root用户,一定是不能随便用来用的,而且还是生成环境,按照需要来分配不同权限的账号使用
  • shell语法熟知过少?还是疏忽了,我猜应该是没重视
  • 不过直接用变量来rm -rf来调用,其实也是有问题的,需要把变量输出一下瞅瞅是啥值。建议是,如果是变量的路径需要rm -rf的,先把变量输出,再拷贝变量的值路径,进行删除
  • 了解下binlog是必要的
  • shell命令可以再熟悉熟悉

另外,出了这么大的事故,部门领导的做法不错

原文:

通过本次事故,几位跟这个项目和事故没有任何关系的同事,主动前来帮忙,查资料,帮测试,有一位同事还帮忙到晚上1点多钟进行数据恢复测试。同时产品经理在想到面向客户的巨大压力的情况下,没有慌乱而责怪开发人员和具体操作人,而让大家能静下心来想解决方案。部门领导也积极主动的帮忙想办法,陪我们加班测试,实时跟踪事情进程


真不知道我在线上环境来个rm -rf /*会背多大的锅,可能会n+1吧、
不过毕竟没有权限~ ~(跃跃欲试的表情此刻变成了弯眉)

建议在执行 rm -rf /* 类似的命令的时候,自己检查3遍,请小伙伴看看,有未知变量的,把变量输出一遍,就不会出现这种情况了。

吾非大神,与汝俱进

最后插播广告时间:公众号未关注的贝贝们可以来一波关注

感谢关注

相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
9月前
|
SQL 存储 安全
又有程序员删库跑路?还好我早有准备
又有程序员删库跑路?还好我早有准备
50 0
|
10月前
|
搜索推荐 算法
B站被删除的视频,该如何找回来?
B站被删除的视频,该如何找回来?
|
12月前
|
运维 安全 固态存储
不需要的binlog如何手动干掉?放心,这不是删库更不用跑路。
不需要的binlog如何手动干掉?放心,这不是删库更不用跑路。
102 0
咱们也聊聊删库跑路吧!
咱们也聊聊删库跑路吧!
|
SQL 运维 关系型数据库
我用几行代码实现了mysql数据库的自动备份,老板说小伙子不错!
我用几行代码实现了mysql数据库的自动备份,老板说小伙子不错!
|
SQL 存储 运维
同事删库跑路后,我连表名都不能修改了?
同事删库跑路后,我连表名都不能修改了?
|
运维 前端开发 JavaScript
删库跑路后的现场还原
遭遇删库跑路怎么办?可观测性是研发质量和产品的试金石,是企业城墙的基石,这里拿删库跑路举一个栗子,说明可观测性的重要程度,用好可观测性,能更了解系统,扩宽业务。
172 0
|
SQL 关系型数据库 MySQL
删库不跑路:我含泪写下了 MySQL 数据恢复大法…(2)
删库不跑路:我含泪写下了 MySQL 数据恢复大法…(2)
|
SQL 关系型数据库 MySQL
删库不跑路:我含泪写下了 MySQL 数据恢复大法…(3)
删库不跑路:我含泪写下了 MySQL 数据恢复大法…(3)
201 0
|
关系型数据库 MySQL 数据库
删库不跑路:我含泪写下了 MySQL 数据恢复大法…(1)
删库不跑路:我含泪写下了 MySQL 数据恢复大法…(1)