mysql 利用binlog 恢复误删数据

一 .先查看binlog功能是否开启 (登录mysql)

     show variables like '%log_bin%';

二.查看数据文件存方路径

     show variables like '%datadir%';

     或者 查看 /etc/my.cnf 文件 配置的 log-bin 路径 

     如果还找不到的话,可以使用下面步骤(登录mysql 内部命令):

    show master logs;  会显示所有的 binlog 文件

    show master status;  显示 最新的 binlog 文件

    find / -name  xx_bin.xx(binlog 文件名)

三:cat命令无法查看,可使用如下查看命令:

    show binlog events in ‘mysql-bin.000003’;

四:进行操作前要做好备份,防止误操作

    cp xx_bin.xx /homt/  (如:复制到home 文件夹下)

五: 执行如下命令 转换binlog日志为sql(如下是关键步骤)

     /www/server/mysql/bin/mysqlbinlog --base64-output=decode-rows -v --database=sq_yundan --start-datetime="2020-06-23             00:00:00" --stop-datetime="2020-07-26 16:50:00" /www/server/data/mysql-bin.000011 > my_yundan.sql

    mysqlbinlog 命令的参数说明
    --base64-output=decode-rows //数据转换正常的字符,如果不设置这个参数将显示base64的数据
    --database=DBName  //数据库名(一个mysql数据库比较多,指定方便恢复)
    --start-datetime="2020-06-23 00:00:00"  //恢复起始时间
    --stop-datetime="2020-07-26 16:50:00"  //恢复结束时间(注意:在误删操作之前,如果不是在误操作之前需要 转sql后 点开生成的sql -->编辑 --> 找到删除命令 --> 重新 保存)
    /www/server/data/mysql-bin.000011  //为数据恢复的日志文件
    my_yundan.sql  //恢复以后我们需要的文件名

六:将误删的数据库的结构 导出(表中不需要数据,有的话清空一下),然后导入到本地的mysql 或者在你本地 创建同名的数据           库,并将 上面 第 五 步骤生成的 my_yundan.sql  放到本地   最好放到mysql 文件夹下(放哪里都行,前提你的电脑有mysql环         境就行) 然后:

      运行如下命令:    mysql -uroot -p123456 sq_yundan < my_yundan.sql

 

到此:数据恢复了,挑选出你误删的数据,导出,导入到正式库 就可以了,此处利用Navicat

 

扩展

1.查看当前正在写入的binlog文件

show master status\G

2.如果需要过滤,只查询insert,update,delete的语句,可以这样写:

mysqlbinlog --no-defaults --database=数据库名 binlogs.000078 |grep update |more

3.Flush logs  刷新日志,会产生一个新编号的binlog文件

4.清空所有binlog日志命令 :reset master;  最好不要用,用了binlog日志就没了

5.开启bin-log

在 /etc/my.cnf 写入一下,重启mysql 即生效

 log-bin=mysql-bin binlog_format = ROW

总结:此方法只能对启动binlog日志的mysql进行恢复;没开启的请开启下吧(扩展中:5),当然最好的是备份,请认真对待你的数据!!

你可能感兴趣的:(数据库)