mysql 利用binlog 恢复误删数据

    技术2023-08-11  88

    一 .先查看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),当然最好的是备份,请认真对待你的数据!!

    Processed: 0.018, SQL: 9