一、前言

新年伊始,万象更新,先说点什么吧,当今日新月异的巨量信息不断冲击着人们的视觉,本人虽然不是一枚川粉吧,但也很热衷去吃瓜大统领的各种骚操作,四年来给我们普通人带来了不知道多少欢乐啊,还有各种让人惊愕的美式双标,哈哈哈,眼瞅着还有一个多星期大统领就要离我等而去了,还是有点莫名的失落啊,往后可就没瓜可吃啦。当然,还有让人惊愕到下巴的是,大统领过分而激烈的幕后操作(就是那个双标不能再双标的风景线了,国会山事件)直接招致了自我的“社会性死亡”,说好的美式民主和言论自由呢,墙倒众人推,凄凄惨惨戚戚向谁说理去啊!哈哈哈哈,孤家寡人的建国大统领只能在白房子里暗淡的度过为数不多的时光了,别怕,世界人民与你同在,上帝与你同在。当然,该理智还是要理智的,上帝也在奉劝你不要把手中的核按钮当中儿戏啊,一旦引发出灾难级的事故,你就成为了人类公敌啊!

额,跑题了,我本来想说的是最近博客上炸开锅的那件事 —— 链家程序员怒删公司 9TB 数据,被判 7 年! 但仔细想想,好像也没跑题啊,性质都是不同寻常的骚操作,川普幕后煽动的暴力事件直接招致了自己推特脸书的被封和被各种谴责,而这位程序员大佬怒删了自己公司的数据库,不管出发点是什么,同样都造成了无法逆转的被动局面。

二、删库事件

以前还只是听说“删库跑路”是一个梗,笑一笑就过去了,但如今的社会越来越重视信息安全,身为程序员也要培养自己的职业操守和修养,不管自己对公司如何的不满,也要在法律允许的范围内表达和宣泄情绪啊!

好奇之下,本能的搜了一下近些年这类的事故新闻还真不少啊,来看一下有哪些:

  • 2017年1月31日,Gitlab一名系统管理员误删库,发现问题300GB左右的数据只剩下约4.5GB,经过抢救,GitLab.com最终丢失了6小时的数据库数据;
  • 2017年4月5日,知名的VPS服务商DigitalOcean出现了一次删除生产数据库的事故,导致DigitalOcean的控制面板和API无法正常使用,时间长达4小时56分;
  • 2017年9月,广西某大型IT企业为客户进行扩容割接时,误操作将 HSS 设备里面的用户数据格式化删除,导致该运营商近80万用户数据丢失,从而无法通话和上网,波及七八个地市,事故重大;
  • 2018年6月4日14时许,被告人韩冰在位于本市海淀区上地三街福道大厦三层的链家网(北京)科技有限公司(以下简称链家公司),利用其担任链家公司数据库管理员并掌握公司财务系统root权限的便利,登录公司财务系统服务器删除了财务数据及相关应用程序,致使公司财务系统无法登录,链家公司为恢复数据及重新构建财务系统共计花费人民币18万元;
  • 2018年9月,顺丰一位高级工程师在升级系统数据库时,不慎将RUSS数据库删除,导致了顺丰线上发车功能约10小时无法使用,负面影响严重,最后该程序员被辞退,也被“跑路”了;
  • 2020年2月,微盟公司研发中心运维部核心运维人员贺某因为生活不如意、无力偿还网贷等个人原因,在酒后恶意删除公司SAAS业务数据,导致微盟旗下300万商户的线上业务全部停止,商铺后台的所有数据被清零,经过8天14个小时的抢修才得以正常运营。

虽然,删库常被开发和运维的程序员拿来调侃,但一旦发生给企业造成的事故还是很严重的,不仅是公司或者客户的损失问题了,还有可能自己要面临刑事责任,必须引起重视。

三、如何有效避免删库事故发生?

俗话说防患于未然,杜绝事故要从预防抓起,不同参与的人员,这里有几点建议可以参考,这里删库不仅指删除整个数据库,也包含了删除数据库表及表中的记录等

开发人员

线上出现问题,开发人员避免不了去操作生产环境的数据库,那么作为开发有以下几点建议:

  • 首先,肯定是尽量避免使用 rm -rf 命令了,脑海里要有操作删除数据后带来的风险意识;
  • 其次,养成备份的意识,考虑到连接的生产数据库或数据库表是否有备份,一定要先备份再操作;
  • 最后,则是给开发人员最好使用低等级、低权限的账号登录进行操作,控制其操作的权限范围,实在需要操作部分敏感表或数据项需要向上级申请。

运维人员

运维人员作为数据库管理员的角色,处理着客户反映的各种问题,避免不了和生产数据库打交道,那么作为运维有以下几点建议:

  • 首先,肯定是限制删除数据的行为发生了,可以分配其不同等级的权限账号使用;
  • 其次,避免不了删除数据的话,需要进行先备份再操作、或向上级申请等。
  • 最后,最好有运维日志,简单记录下此次维护进行了哪些操作,解决了什么问题等等,做到事故分析的可溯源,防止隐蔽的事故发生时过了时间找不到具体的操作。

上面只是从人的角度考虑进行规避删库的风险,当然还可以从系统本身进行有效的机制建设:比如,多机房备份数据(本地备份和远程备份),又比如,利用网络可视化和AI实现智能风控对数据操作进行实时监控与告警等等。

四、删库如何进行恢复?

这里才是今天的重点了,虽然是万无一失是终极目标,但在没有备份的情况下,一旦发生了该怎么处理呢?首先,不能放弃自己,不能想着去跑路啊,哈哈哈。冷静,冷静,再冷静,好的心态有助于挽回当前糟糕的局面。

删库的情况有很多种,比如只删了数据库表的某一部分数据,比如只批量删除了某些数据库的表,也有可能误操作删了整个数据库。这里特此记录和备份一下,该怎么恢复哪些被删除的东西,希望自己永远也用不到~~~

1、Oracle数据库

1、恢复delete删除的数据

在delete数据后,如果被删除的数据块未被覆盖,可以利用闪回方式直接找回:

  • 确定删除数据的时间范围,使用以下语句查询删除的数据:
select * from 表名 as of timestamp to_timestamp('删除时间点','yyyy-mm-dd hh24:mi:ss');
  • 把查询到的删除数据重新插入原表:
-- 注意要保证主键不重复
insert into 表名 (select * from 表名 as of timestamp to_timestamp('删除时间点','yyyy-mm-dd hh24:mi:ss'));

如果表结构没有发生改变,还可以直接使用闪回整个表的方式来恢复数据(表闪回操作,要求用户必须要有flash any table权限):

-- 开启行移动
alter table 表名 enable row movement;
-- 恢复表数据
flashback table 表名 to timestamp to_timestamp('删除时间点','yyyy-mm-dd hh24:mi:ss')
-- 关闭行移动功能
alter table 表名 disable row movement;

2、恢复drop删除的数据

在drop删除表时,没有直接清空表所占的块,Oracle把这些已删除的表的信息放到了一个虚拟容器“回收站”中,而只是对该表的数据块做了可以被覆写的标志,所以在块未被重新使用前还是可以恢表的:

-- 查询这个“回收站”或者查询user_table视图来查找已被删除的表:
select object_name,original_name,type,droptime from user_recyclebin;
select table_name,dropped from user_tables;
-- 如果还能记住原表名,则可以用下面语句直接恢复:
flashback table 原表名 to before drop;
-- 如果记不住了,也可以直接使用回收站的表名进行恢复,然后再重命名:
flashback table "回收站中的表名(如:Bin$DSbdfd4rdfdfdfegdfsf==$0)" to before drop rename to 新表名;

误删数据库的话,使用数据库的闪回功能,可以使数据库回到过去某一状态:

alter database flashback on;
flashback database to scn SCNNO;
flashback database to timestamp to_timestamp('删除时间点','yyyy-mm-dd hh24:mi:ss');

特别注意,Oracle提供了“回收站”机制才使得找回误删的数据成为可能,而drop删除时加上purge选项,删除数据的同时会回收空间,造成永久性的删除了表数据, 因此慎用purge选项。

3、恢复truncate删除的数据

在truncate表时,不会产生日志记录和回滚段空间的使用,不能用闪回方式恢复,但在数据库有备份的情况下是可以用rman恢复的,但因恢复一张表而关停数据库是不可取的。

那有没有在不影响数据业务正常运行的情况下去快速恢复表呢?参考这里:oracle数据库中truncate表后如何快速恢复 。

2、MySQL数据库

1、通用情况

场景说明:在人为SQL语句造成的误操作或者没有主从复制等的热备情况宕机时,通过delete删了数据库表的数据,或者drop删了整个数据库,该怎么去修复呢?

恢复条件:mysql要开启binlog日志功能,并且要全备和增量的所有数据,对外要通知停机维护,禁止继续更新数据库。

参考这里:①. mysql数据库误删除后的数据恢复操作说明。
②. 无备份情况下恢复MySQL误删的表,这样做再也不用怕误删了。

2、极端情况

场景说明:备份,同时没有开启二进制日志,常规的恢复方法彻底走入死路。

恢复条件:使用事务日志恢复。

参考这里:记录一下误删除了mysql表中的数据后的恢复过程。

3、阿里云的mysql数据库环境

场景说明:适用于数据库环境为阿里云的RDS mysql5.7 高可用版的情况。

恢复条件:一定要开启RDS的SQL洞察功能可以查看sql记录。

参考这里:记一次删库后,我是如何恢复数据库和处理的。

小结

本人虽然还没遇到过误删数据的事情,但能感觉到恢复起来还是挺繁琐的,开发中要尽量避免误删才是最重要的。当然,如果遇到了这种事情也要淡定啊,办法总比困难多。未雨绸缪,这里就是我为什么整理记录的动机了,如果以后遇到的话再更新和分享恢复的思考过程吧。

【记录】删库如何进行恢复?相关推荐

  1. MySQL删库数据延迟恢复策略

    stop slave; change master to master_delay = 1800; #1800s后才同步 start slave;

  2. 删库不跑路,MySQL 数据库恢复教程

    在工作中,我们误删数据或者数据库,我们一定需要跑路吗?我看未必,程序员一定要学会自救,神不知鬼不觉的将数据找回. 在 MySQL 数据库中,我们知道 binlog 日志记录了我们对数据库的所有操作,所 ...

  3. mysqldump全量恢复_删库不跑路-详解MySQL数据恢复

    日常工作中,总会有因手抖.写错条件.写错表名.错连生产库造成的误删库表和数据的事情发生,那么,如果连数据都恢复不了,还要什么 DBA. 相关文章 MySQL备份策略:https://segmentfa ...

  4. 『数据库』你以为删库跑路就能让你老板内(lei)牛(liu)满面--数据库的恢复技术

    数据库从入门到精通:戳我 文章目录 一. 事务的基本概念 1.事务 1.1what's the 事务: 1.2事务的定义 1.2.1 事务的显示定义 1.2.2 事务的隐式定义方式 2.事务的ACID ...

  5. binlog日志_【删库跑路】使用Binlog日志恢复误删的MySQL数据

    前言 "删库跑路"是程序员经常谈起的话题,今天,我就要教大家如何删!库!跑!路! 开个玩笑,今天文章的主题是如何使用Mysql内置的Binlog日志对误删的数据进行恢复,读完本文, ...

  6. linux mysql恢复数据_删库不跑路详解MySQL数据恢复

    作者:程淇铭 出处:https://segmentfault.com/a/1190000020116271 日常工作中,总会有因手抖.写错条件.写错表名.错连生产库造成的误删库表和数据的事情发生,那么 ...

  7. 【删库跑路】使用Binlog日志恢复误删的MySQL数据

    前言 "删库跑路"是程序员经常谈起的话题,今天,我就要教大家如何删!库!跑!路! 开个玩笑,今天文章的主题是如何使用Mysql内置的Binlog日志对误删的数据进行恢复,读完本文, ...

  8. [MySQL]-删库后恢复

    [MySQL]-删库后恢复 sen格 | 2022年11月 本文旨在记录个人在数据库的删库恢复演练过程中的一些总结,如有不足,欢迎指正. 一.恢复场景 1)假设生产实例MySQL端口为:3306 2) ...

  9. mysql被删库如何恢复_mysql整个数据库被删除了怎么恢复

    展开全部 每个 DBA 是不是都有过删库的经e68a84e8a2ad62616964757a686964616f31333433626437历?删库了没有备份怎么办?备份恢复后无法启动服务什么情况?表 ...

最新文章

  1. android clean 框架,clean架构
  2. 【原】Java学习笔记020 - 面向对象
  3. Java当中 递归打印文件大小(面向不同的对象打印文件大小)
  4. Android下基于UVC的UsbCam的开发
  5. python公式_魔方字母公式转ABC公式python小工具
  6. 路由器端口转发linux服务器端口映射,路由器端口映射怎么设置?
  7. 批判性思维--如何高效学习
  8. 博科 5300 光纤交换机配置 备份和恢复
  9. 复数中欧拉公式与计算机,欧拉公式
  10. 产品之路第四年的再思考
  11. 使用O2OA二次开发搭建企业办公平台(十三)流程开发篇:报销审批流程表单开发
  12. 英特尔酷睿处理器后面的数字和字母含义
  13. linux下TC+HTB流量控制
  14. 研究生如何进行文献检索和文献阅读
  15. 爆聚美优品售假货,中国老龄商城有话说
  16. 域渗透基础之NTLM认证协议
  17. Gartner调查研究:中国的数字化发展较之世界水平如何?高性能计算能否占据主导地位?
  18. 怎么在微信朋友圈中发布长视频,不妨来看看,怎样将长视频发布到朋友圈
  19. 几分钟教你批量重命名文件,批量更改数据的方法
  20. resetlogs,noresetlogs,完全恢复,不完全恢复

热门文章

  1. 最快的计算机操作,世界十大最快的超级计算机
  2. 永远的谭嗣同--2005年四川高考满分作文
  3. 解决Retrofit和RxJava 抛出异常报错问题
  4. “应试教育的死穴,恰在于堵住了孩子“犯错”空间”——有感
  5. 2年5个月13天,从外包到拿下阿里offer,不相信屌丝也能有今天
  6. 针对大众点评网上商铺评论字体替换反爬的反反爬
  7. 2021年全国大学生电子设计竞赛F题中数字识别这一技术分支实践与学习笔记
  8. 在家赚钱的可靠方法,5个方法各个月入过万!
  9. 耳机声控,以及耳机拔出或者插入控制播放暂停
  10. android switch 空间,android Android UI(Switch)详解