2018年八月二号,是黑暗的一天,在今天我碰到一个MySQL的坑,让我无意间删掉了整个表的数据,当时我心如死灰,感觉凉凉了!但是片刻之间我就立马上报该问题,运维立马停掉服务,(为什么停掉服务?脑壳想一想就明白了),我问问运维有没有备份,运维说备份是夜里两点备份的,用备份数据的话今天上午的新增的数据也是没有的,于是我马上用命令 show veriables like 'log_%'; 查看是否已开启日志,谢天谢地mysql开启了binlog,于是今天记录一下误删库利用binlog回滚的具体操作!
1、重中之重,误删库之后应该立马停掉服务,并且通知开发人员不要继续往数据库里面写东西,一面日志过大覆盖掉我们需要回滚的日志;
2、我马上根据 show veriables like 'log_%';这个命令定位到binlog的位置,找到最近的log;
3、binlog是二进制文件 vi vim cat 都不能直接查看到我们想看的东西,我们要是用mysql自带的工具查看,命令:
/usr/local/mysql/bin/mysqlbinlog --base64-output="decode-rows" -v /var/log/mysql/mysql-bin.000021
输出的日志使我们能看到的sql语句
4、接下来我按照 https://github.com/danfengcao/binlog2sql 这个链接的步骤,一步步将delete掉的数据都回滚成了insert语句
在按照上面这个链接做的时候,bin-log的位置由于权限不够,mysql无法重新启动,报错:(Starting MySQL.The server quit without updating PID file (/usr/local/mysql/data/mysql/izwz96bvf2t3
0nuubf3qbez.pid).)解决方法 :给予权限,执行 “chown -R mysql:mysql /var/data” “chmod -R 755 /usr/local/mysql/data” 然后重新启动mysqld!
这是一次宝贵的经验,此记录只是记录下具体的删库后怎么回滚的思路,剩余的操作需要看到的朋友动手去试一试!
转载至链接:https://my.oschina.net/u/3689525/blog/1922536