• ADADADADAD

    mysql 误删除数据-数据回滚[ mysql数据库 ]

    mysql数据库 时间:2024-12-25 09:58:16

    作者:文/会员上传

    简介:

    mysql 误删除本次使用的原美团开源Mysql 数据闪回工具传送门:https://github.com/Meituan-Dianping/MyFlash一,简介MyFlash的前身是binlong2,后续是由美团点评公司技术工程部开

    以下为本文的正文内容,内容仅供参考!本站为公益性网站,复制本文以及下载DOC文档全部免费。

    mysql 误删除

    本次使用的原美团开源Mysql 数据闪回工具

    传送门:https://github.com/Meituan-Dianping/MyFlash

    一,简介

    MyFlash的前身是binlong2,后续是由美团点评公司技术工程部开发维护的一个回滚DML操作的工具。该工具通过解析V4版本的二进制日志,完成回滚操作。相对已有的回滚工具,其增加了更多的过滤选项,让回滚更加容易。 该工具已经在美团点评内部使用

    二,限制
      二进制日志格式必须为【row】行级模式 ,且binlog_row_image =full仅支持5.6与5.7(如果是低版本的mysql 二种方案 1,升级mysql2,使用binlog2)
      binlog2sql工具的下载地址:只能回滚DML(增,删,改)三,详细说明3.1 安装部署
      git clone https://github.com/Meituan-Dianping/MyFlash.gitcd MyFlash/[root@gitlab MyFlash]# yum install glib2*[root@gitlab MyFlash]# gcc -w`pkg-config --cflags --libs glib-2.0` source/binlogParseGlib.c-o binary/flashback#动态编译
    3.2 开启mysql-binlog
    [root@gitlab mysql]# cat /etc/my.cnf|grep "log_bin*"# log_binlog-bin=mysql-bin#名字前缀log_bin=/var/lib/mysql/mysql-bin#路径log_bin_index=/var/lib/mysql/mysql-bin.index#索引binlog_format=row #binlog模式 (行、混合、sql语句)max_binlog_size = 512M #单个文件大小expire_logs_day = 30 #保留最近30天server-id = 1 #ID编号[root@gitlab mysql]# /etc/init.d/mysqld restartRestarting mysqld (via systemctl): [OK]登陆mysql 查看binlog开启情况mysql> show variables like '%log_bin%'


    注意:此工具必须使用row 行级模式

    show variables like'binlog%'; ##行级模式缺点,binlog日志会增大 原来的3倍优点:相对安全
    3.3 使用方法
    cd binary./flashback --helpUsage:flashback [OPTION...]Help Options:-?, --helpShow help optionsApplication Options:--databaseNames指定需要回滚的数据库名。多个数据库可以用“,”隔开。如果不指定该参数,相当于指定了所有数据库。--tableNames指定需要回滚的表名。多个表可以用“,”隔开。如果不指定该参数,相当于指定了所有表。--start-position指定回滚开始的位置。如不指定,从文件的开始处回滚。请指定正确的有效的位置,否则无法回滚--stop-position指定回滚结束的位置。如不指定,回滚到文件结尾。请指定正确的有效的位置,否则无法回滚--start-datetime 指定回滚的开始时间。注意格式必须是 “2016-11-17 14:40:00。 如不指定,则不限定时间--stop-datetime指定回滚的结束时间。注意格式必须是 %Y-%m-%d %H:%M:%S。 如不指定,则不限定时间--sqlTypes 指定需要回滚的sql类型。目前支持的过滤类型是INSERT, UPDATE ,DELETE。多个类型可以用“,”隔开。--maxSplitSize一旦指定该参数,对文件进行固定尺寸的分割(单位为M),过滤条件有效,但不进行回滚操作。该参数主要用来将大的binlog文件切割,防止单次应用的binlog尺寸过大,对线上造成压力--binlogFileNames指定需要回滚的binlog文件,目前只支持单个文件,后续会增加多个文件支持--outBinlogFileNameBase 指定输出的binlog文件前缀,如不指定,则默认为binlog_output_base.flashback--logLevel仅供开发者使用,默认级别为error级别。在生产环境中不要修改这个级别,否则输出过多--include-gtids指定需要回滚的gtid,支持gtid的单个和范围两种形式。--exclude-gtids指定不需要回滚的gtid,用法同include-gtids(跳过)
    3.4 测试用例

    1) 测试环境介绍:

    [root@gitlab binary]# cat /etc/redhat-release #系统版本7.4CentOS Linux release 7.4.1708 (Core) [root@gitlab binary]# uname -a #系统内核3.10 64位Linux gitlab.example.com 3.10.0-693.el7.x86_64 #1 SMP Tue Aug 22 21:09:27 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux[root@gitlab binary]# mysql -V#mysql 版本mysqlVer 14.14 Distrib 5.6.39, for Linux (x86_64) usingEditLine wrapper

    2)模拟数据
    我这里把测试库的一些数据拿啦,直接导入sql作为案例使用

     SELECT * FROM `sys_member_msg` WHERE id <=666


    3)模拟误删除

    delete from `sys_member_msg` where id<=666#在查看id小于666的就显示空了


    4)回滚指定文件中的所有【插入、删除、修改】语句
    row行级模式 查看binlong,需要添加参数(--base64-output=decode-rows -v)对输出结果解码。

    4.1 查看开启binlong

    mysql> show variables like 'log_%'; +----------------------------------------+--------------------------------+| Variable_name| Value|+----------------------------------------+--------------------------------+| log_bin| ON || log_bin_basename | /var/lib/mysql/mysql_bin || log_bin_index| /var/lib/mysql/mysql-bin.index |13 rows in set (0.00 sec)

    4.2 查看最新binlog位置

    mysql> show master status;#查看最新binlog位置+------------------+----------+--------------+------------------+-------------------+| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |+------------------+----------+--------------+------------------+-------------------+| mysql_bin.000007 | 16696881 ||| |+------------------+----------+--------------+------------------+-------------------+1 row in set (0.00 sec)

    4.3 生成回滚数据文件

    [root@gitlab binary]# time ./flashback--sqlTypes='DELETE' --binlogFileNames=/var/lib/mysql/mysql_bin.000007real0m0.053suser0m0.015ssys 0m0.035s#参数意思 看上面用法介绍#比如:开始时间-结束时间 --DML语句类型(增删改)、post点、大数据要拆分#默认产生一个binlog_output_base.flashback文件


    4.4 恢复到数据库

    [root@gitlab binary]# mysqlbinlog binlog_output_base.flashback |mysql -uroot -pEnter password:#输入mysql密码#没有反馈,应该OK了
    3.5查看数据回滚情况
    SELECT * FROM `sys_member_msg` WHERE id <=666
    四 总结:

    1,myflash 只支持 row 模式,如果你现在的binlog是其它模式,切换的时候,会影响主从同步
    2,row模式很安全,但是binlog数据量会增加 3-5倍
    3,查看row模式下的binlog 需要添加参数(--base64-output=decode-rows -v)对输出结果解码
    4,必要给开发生产数据库开放权限,让他们select去吧
    5,筛选恢复数据有很多比如:开始时间-结束时间 --DML语句类型(增删改)、post点、大数据要拆分后逐去恢复 等等

    最后希望所有运维的同志们,不在背锅,远离背锅。。。。
    mysql 误删除数据-数据回滚.docx

    将本文的Word文档下载到电脑

    推荐度:

    下载
    热门标签: mysql误删除sql