千家信息网

误删数据库怎么办

发表于:2024-11-22 作者:千家信息网编辑
千家信息网最后更新 2024年11月22日,这篇文章主要讲解了"误删数据库怎么办",文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习"误删数据库怎么办"吧!一般情况如果在大公司删库删表这种情况基本上不会
千家信息网最后更新 2024年11月22日误删数据库怎么办

这篇文章主要讲解了"误删数据库怎么办",文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习"误删数据库怎么办"吧!

一般情况如果在大公司删库删表这种情况基本上不会遇到,毕竟给咱们开发的账号不会开这么高的权限。但是在小公司的话就不一定,没这么规范,要是咱们手抖一下,不小心删错了咋办?

比如你delete错了,把别的行给删了。然后如果你的数据库binlog配置是

binlog_format = row 和 binlog_row_image = FULL

比如你的delete语句对应的binlog event 类型是

Delete_rows event

然后将它改成

Write_rows event;

把修改的binlog拿回原库重放就行了。

如果是你update的话,那binlog里面也是记录了数据修改前和修改后的值的,你只要对调这两行数据的位置就行。

推荐使用Flashback工具,工具的原理就是我上面说的那样。

还有这种操作不建议在主库上执行,一般情况是备份一个库,或者在哪个从库上执行这些操作,确认没问题的然后再回复主库确保主库的安全。

但是有些哥们可能比较猛,他可能是drop或者truncate哪个table了或者是drop database了。这种情况下binlog记得只会是一个drop/truncate语句,所以用上面的方法是搞不定的。

咋办呢,找之前的全量备份,没得话...你懂得

找到之前的全量备份然后配合增量的日志恢复。流程就是:

  1. 找到最近一次的全量备份。比如是2019-3-25 晚上11点

  2. 通过这个备份恢复出一个临时库

  3. 在日志备份里面找到2019-3-25 晚上11点之后的日志

  4. 将这些日志除了误删除的那个语句全部应用到临时库上

第4条这个操作,如果你的数据库实例用了GTID模式,就先

set gtid_next=(你的删除语句的GTID);begin;commit;

如果没用这个模式,那只能是应用到这个删除语句之前先用-stop-position参数执行到这个语句之前,然后-start-position开始这个语句之后的执行。

我们做主从备份,为了防止误删数据导致的问题,可以搞一个延迟一小时的从库,就比如我们是一个星期备份一次的,那我们如果在第七天出了什么错,需要恢复的话,那得跑多久啊!所以弄一个特殊的备库,通过

CHANGE MASTER TO MASTER_DELAY = N

来设置这个备库和主库有N秒的延迟,这样发现主库误操作了,马上再这个备库上执行 stop slave,然后通过上面的方法跳过误删除的命令,恢复数据!

感谢各位的阅读,以上就是"误删数据库怎么办"的内容了,经过本文的学习后,相信大家对误删数据库怎么办这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是,小编将为大家推送更多相关知识点的文章,欢迎关注!

0