MySQL被我弄坏了,跑路是不是最佳选择?

Posted zzzzhi

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MySQL被我弄坏了,跑路是不是最佳选择?相关的知识,希望对你有一定的参考价值。


昨天在开发一个新功能的时候,在开发环境,对一部分录入了好几天的数据进行了清洗,但是由于数据类型不对,导致数据的精度发生了变化,于是准备恢复备份数据。

但是,当打开备份数据的时候却发现,只导出了50条数据,因为是通过工具导出的数据,心里瞬间一万个XXX。

怎么办?跑路?


如果能跑路,我是想的。


重新录入? 我可是一万个拒绝的,毕竟这样又得花上好长的时间了。

其实我是跑路了,但是没完全跑,想着再挣扎一下。

通过一番 研究发现,也不是完全没有办法,咋们可以用binlog日志文件去恢复数据,那么接下来我们就看看怎么操作吧。

01
查看是否有开启binlog

命令SHOW VARIABLES LIKE 'log_%';



如果log_bin为ON为开启,只有开启了binlog才能通过binlog恢复数据


02
查看binlog日志列表

命令SHOW MASTER LOGS;

MySQL被我弄坏了,跑路是不是最佳选择?


我们可以看到上面有很多个binlog文件,最后一个则是最新的日志文件,当我们误操作的时候,需要马上停止对mysql的写操作,避免记录了更多的binlog数据,可以通过命令 flush logs; 创建一个新的binlog文件,如果是线上环境,需要立马禁止各个账户的写操作。



03
查看日志内容


命令SHOW BINLOG EVENTS IN 'mysql-bin.000090';

上面几条记录,我创建了一个名为test的表和插入了三条数据,最后模拟误删了整个表。


04
恢复数据


先看看恢复命令mysqlbinlog,该操作是相当于把之前的增删改查数据重新操作一次,我们只要不操作最后一次的误操作既可以达到恢复数据的效果。
# 参数--no-defaults 解决unknown variable 'default-character-set=utf8mb4'unknown variable 'default-character-set=utf8mb4'错误--start-position=N 从日志中等于N的位置开始读--stop-position=N 从日志中等于和大于N的位置停止读


因为重新执行插入数据部分的记录就是从458到1361,所以命令如下


# 控制台输入以下命令,并输入数据库密码mysqlbinlog --no-defaults --start-position=458 --stop-position=1361 "D:\Program Files\mysql-8.0.15-winx64\data\mysql-bin.000090" | mysql -u root -p


赶紧收藏这篇文章吧,下次误操作的时候,就不用跑路了!



以上是关于MySQL被我弄坏了,跑路是不是最佳选择?的主要内容,如果未能解决你的问题,请参考以下文章

麦田厦门下区信息数据爬取

无语啊,sublime给我弄乱玩,玩坏了,而且安装插件也安装不了

无法通过 phpMyAdmin 访问数据库

撤销对 origin/master 的提交

除非显式注释,否则不会发现 CDI bean

intellij idea中用java打开文件中文怎么变成乱码了?我用的是UTF-8啊