MySQL误删怎么办
使用delete误删
处理
使用flashback工具,原理是修改binlog的内容,拿回原库重放。需要binlog格式为row格式,并且binlog_row_image=FULL
执行流程:
● 对于Inser语句,对应的binlog event类型是write_rows_event,把它改写成delete_rows_event即可
● 对于delete语句,是将delete_rows_event改为write_rows_event
● 如果是update_rows,binlog里面记录了数据行修改前和修改后的值,对调这两行的位置即可
不建议直接在主库上执行这些操作,恢复数据比较安全的做法是恢复出一个备份,或者找一个从库作为临时库,在这个临时库上执行这些操作,然后再将确认过的临时库的数据,恢复回主库。因为如果在主库上操作的话,可能由于发现数据问题的时间晚了一点儿,导致已经在之前误操作的基础上,业务到吗又继续修改了其他数据,如果单独恢复这几行数据,而又未经确认的话,会造成数据的二次破坏。
预防
- 把sql_sage_update设置为on,如果我们忘记在delete或者update语句中写where条件,或者where条件里面没有包含索引字段的话,这条语句的执行就会报错,如果真的需要全删一个小标,可以在条件中增加where id>=0,但是delete全表是很慢的,需要生成回滚日志,写redo、写binlog,所以从性能上来说应该优先考虑使用truncate table或者drop table命令(这两个命令删除,binlog中就只会有truncate/drop语句)
- 代码上线前,必须经过SQL审计
误删库/表
方法一:
如果想恢复数据,就需要有全量备份+增量日志的方式,要求线上有定期的全量备份,并且实时备份binlog。
举例
假设当前库的备份策略是一天一备,假如有人中午12点误删了一个库,恢复流程如下:
- 取最近一次的全备,也就是当天的0点
- 用备份恢复出一个临时库
- 从日志备份里,取出凌晨0点之后的日志
- 把这些日志除了误删数据的语句外,全部应用到临时库
注意事项
加速数据恢复.
如果临时库上有多个数据库,可以在使用mysqlbinlog时,加上一个-database参数,用来指定误删表所在的库,这样就避免了在恢复数据时还要应用其他库日志的情况(读取无用日志)
跳过误操作的binlog
● 如果原实例没有使用GTID模式,只能在应用到包含指定错误的binlog的时候,先应用-stop-position参数执行到误操作之前的日志,然后再用-start-position从误操作之后的日志继续执行
● 如果实例使用了GTID模式,可以将错误操作的binlog gtid跳过
mysqlbinlog恢复数据慢怎么解决
主要原因:
● 如果是误删表,最好就是只恢复出这张表,但是mysqlbinlog工具并不能指定只解析一个表的日志
● 用mysqlbinlog解析出日志应用,应用日志的过程只能是单线程,MySQL的并行复制在这里用不上
加速的方法:在用备份恢复出临时实例后,将这个实例设置成备库的从库,这样:
- 在start slave之前,先通过执行change replication filter replicate_do_table=(tbl_name)命令。就可以让临时库只同步误操作的表
- 也可以用上并行复制来加速整个数据恢复过程
如果备库上已经删除了临时实例需要的binlog怎么办?
可以从binlog备份系统中找到需要的binlog,再放回备库中,比如临时实例需要的binlog从binlog_0005开始,而备库只有binlog_0007开始,可以找到binlog_0005和binlog_0006手动放回备库,
● 将两个binlog文件放到备库的日志目录下
● 打开日志目录的master.index文件,在文件开头加入缺少的这两个binlog名词
● 重启备库,让备库重新认识这两个日志文件
方法二:
使用延迟复制备库,设置从库同步binlog的延迟时间,一般主从存在的问题是,如果主库上有个表被删除了,这个命令很快就会被发送给所有的从库,导致所有的从库数据表也都被一起误删了。
通过 CHANGE MASTER TO MASTER_DELAY = N 命令,可以指定这个备库持续保持跟主库有 N 秒的延迟,比如你把 N 设置为 3600,这就代表了如果主库上有数据被误删了,并且在 1 小时内发现了这个误操作命令,这个命令就还没有在这个延迟复制的备库执行。这时候到这个备库上执行 stop slave,再通过之前介绍的方法,跳过误操作命令,就可以恢复出需要的数据。这样的话,你就随时可以得到一个,只需要最多再追 1 小时,就可以恢复出数据的临时实例,也就缩短了整个数据恢复需要的时间。
预防误删库/表
● 账号分离
○ 只给业务开发童鞋DML权限,不给truncate/drop权限
○ 即使是DBA团队成员,日志也都只能使用只读账号,必要的时候才是用有更新权限的账号
● 制定操作规范
○ 删表之前,必须先对表做改名操作, 观察一段时间,确保业务无影响以后再删
○ 改名的时候,要求给表名加固定的后缀(比如_to_be_deleted),然后删除表的动作必须通过管理系统执行,并且管理系删除表的时候,之恩给你删除固定后缀的表
使用rm命令误删整个MySQL实例
对于一个有高可用机制的MySQL集群来说,rm删除数据后,只要不是恶意的把整个集群删除,而只是删除了其中一个节点的数据的话,HA就会开始工作,选出一个新的主库,从而保证整个集群的正常工作。
MySQL误删怎么办相关推荐
- MySQL误删数据救命指南:必收藏
首先看下mysql误删数据排名最前的几种是: 1.误删文件 2.误删库.表 3.错误全表删除 / 更新 4.升级操作失误 都来看看你命中过几个,hoho. 简单说下我亲手造的一个大事故吧. 那大概是一 ...
- win32 mysql误删数据恢复_mysql误删数据恢复
原创 mysql误删数据恢复我这里搜了一下,貌似好多方法,搜索表后是因为表太多所以看不完所以就看到了这篇文章,你看看你的数据重建了吗?或者点击按钮在目录下的文件恢复? 试试这个,如果没有的话,说明这个 ...
- mysql误删了数据_MySQL误删数据
首先看下mysql误删数据排名最前的几种是: 1.误删文件 2.误删库.表 3.错误全表删除 / 更新 4.升级操作失误 都来看看你命中过几个,hoho. 简单说下我亲手造的一个大事故吧. 那大概是一 ...
- MySQL误删数据?快速恢复!
MySQL误删数据?快速恢复! 第一步:保证mysql已经开启binlog,查看命令: 查看binklog是否开启! show variables like '%log_bin%'; 查看binlog ...
- MySQL误删数据?快速恢复指南来了!
作者:一个人的孤独自白 cnblogs.com/-mrl/p/9959365.html 相信后端研发的同学在开发过程经常会遇到产品临时修改线上数据的需求,如果手法很稳那么很庆幸可以很快完成任务,很不幸 ...
- 1 恢复MySQL误删数据
作者:一个人的孤独自白 cnblogs.com/-mrl/p/9959365.html 相信后端研发的同学在开发过程经常会遇到产品临时修改线上数据的需求,如果手法很稳那么很庆幸可以很快完成任务,很不幸 ...
- mysql误删库恢复操作
前提:对mysql库进行全备和增量备份(全备就是对hive库进行完全备份,增量备份就是将mysql的binlog日志进行备份) 情景说明:由于误操作,将包含有多张表的数据库给误删了 要求:恢复误删的数 ...
- linux mysql 误删系统文件恢复_干货分享丨如何恢复Linux下误删/etc目录数据
对于运维工作者来说,可能最让人担心的,是服务器宕机: 最让人无助的,是被DDOS: 而最让人心惊肉跳的,是rm -rf *这个命令-- 当你执行rm -rf命令时,万一哪个变量没赋值 听说过被删空服务 ...
- MySQL误删数据后,查找操作日志并恢复数据
有时候直接操作数据库,可能会出现误删除一些数据的情况,比如删了某个表中某一行数据,事后发现该条数据是误删的,还需要恢复,但是又不太记得具体每个字段原来的数据是什么了,只能要查到之前删掉的数据每个字段值 ...
最新文章
- 久等了!支付宝集五福活动官宣: 今年又有新玩法
- 让OpenShift Serivce Mesh自动对服务注入sidecar
- html位置水平居中,html元素水平居中的几种方法
- 微软去年安全业务收入150亿美元、新勒索软件以威联通设备为目标|1月27日全球网络安全热点
- 通达信股票数据接口协议文档
- 关于数字化营销,这些知识点你一定要知道
- 日志易陈军:迭代加速,日志分析助力IT智能化
- 长沙县北部新城:“湖湘生态”蓝图已绘就,“右岸经济”起飞正当时
- 国土档案管理信息系统【档案查借阅登记】
- Element UI快速入门
- 安全产品的部署方式及位置
- 刷题方法(五步刷题法)
- 公积金网厅显示连接服务器错误,住房公积金网厅解决方案
- 小视频伪原创工具 苹果手机短视频去水印
- Android 6.0 JNI原理分析 和 Linux系统调用(syscall)原理
- linux的lib目录,Linux 目录结构:/lib 分析
- 安全数据集和开源工具
- java计算机毕业设计高校科研项目管理系统MyBatis+系统+LW文档+源码+调试部署
- Linux内核实验孟宁,《linux内核分析》实验二:时间片轮转多道程序运行原理
- java连接mysql执行ddl_JDBC执行DDL语句
热门文章
- 解决VUE项目更新后需要客户手动刷新浏览器问题
- 纯CSS3炫酷3D星空动画特效
- 【matplotlib】绘图模块介绍
- 使用Requests爬取猫眼电影
- 你以为Shell只是命令行?读懂这篇文,给你的工作赋能
- 【阅读笔记】联邦学习实战——联邦个性化推荐案例
- PHP微信支付 curl请求https://api.mch.weixin.qq.com/pay/unifiedorder 返回空的解决方案
- java epics_EPICS超入门-KEKe+e-.PDF
- 笔记本电脑更换固态硬盘
- 【C语言】初识C语言(下篇)