1) 首先需要准备好 Myflash 测试环境

大家可以去这里下载源程序:https://github.com/Meituan-Dianping/MyFlash

这里的测试环境是 Redhat Linux 6.5,直接解压 myflash 无法运行,发现 glibc 版本不匹配,需要 2.14 版本。因此首先需要编译新版本的 glibc。

–下载 glibc 2.14

---下载lib包

# wget http://ftp.gnu.org/gnu/glibc/glibc-2.14.tar.gz# wget http://ftp.gnu.org/gnu/glibc/glibc-ports-2.14.tar.gz# tar -xvf glibc-2.14.tar.gz# tar -xvf glibc-ports-2.14.tar.gz# mv glibc-ports-2.14 glibc-2.14/ports# mkdir glibc-build-2.14# cd glibc-build-2.14/

–编译

# ../glibc-2.14/configure --prefix=/usr --disable-profile --enable-add-ons --with-headers=/usr/include --with-binutils=/usr/bin# make

–拷贝 libc.so.6 到 /lib64

[root@killdb glibc-build-2.14]# cp libc.so.6 /lib64/libc-2.14.so

–删除原来的 libc

[root@killdb lib64]# rm -rf /lib64/libc.so.6rm: error while loading shared libraries: libc.so.6: cannot open shared object file: No such file or directory[root@killdb lib64]# export LD_PRELOAD=/lib64/libc-2.14.so[root@killdb lib64]# rm -rf /lib64/libc.so.6[root@killdb lib64]# ln -s /lib64/libc-2.14.so /lib64/libc.so.6

–make install

# make install

–确认是否 OK

可以看到已经可以了,支持最新的 GLIBC_2.14 了。下面开始测试 myflash。

2) 如下是针对 Myflash 的简单测试过程

–创建测试表

mysql> CREATE TABLE `Test` (-> `ID` int(11) NOT NULL AUTO_INCREMENT,-> `NAME` varchar(50) NOT NULL,-> PRIMARY KEY (`ID`)-> ) AUTO_INCREMENT=1000-> ;

–创建测试存储过程模拟 10 万条测试数据

mysql> delimiter $$mysql> create procedure pro_test()-> begin-> declare id int;-> set id = 100000;-> while id>0 do-> insert into Test(name) values ('www.killdb.com');-> set id = id-1;-> end while;-> end $$Query OK, 0 rows affected (0.00 sec)mysql> delimiter ;mysql> call pro_test();Query OK, 1 row affected (44.21 sec)

–模拟删除 5 万条数据

mysql> delete from Test limit 50000;Query OK, 50001 rows affected (0.54 sec)mysql> select count(1) from Test;+----------+| count(1) |+----------+| 50001 |+----------+1 row in set (0.01 sec)mysql>

–利用 Myflash 解析 binlog

这里简单的修改了一个小脚本,实现了半自动化。

[root@killdb binary]# ./flashback.sh[root@killdb binary]# cat flashback.sh#!/bin/bashfile_path=/root/myflash/binary/cd /root/myflash/binary./flashback --databaseNames enmotech --tableNames Test --sqlTypes delete --binlogFileNames=/opt/mysql/mysql-bin.000003./flashback --maxSplitSize=15 --binlogFileNames=binlog_output_base.flashbackarr=`find ${file_path} -name "binlog_output_base.0*"|sort -n`for i in ${arr}domysqlbinlog ${i} | mysql -S /opt/mysql/mysql.sockdone

–验证数据

mysql> select count(1) from Test;+----------+| count(1) |+----------+| 100001 |+----------+1 row in set (0.02 sec)

可以看到数据很容易就恢复出来了,效率非常高。比 binsql2sql 要高很多。整个恢复过程大概 1~2 秒。不仅是 delete,实际对于 insert 和 update 的 DML 操作,都是支持的。

原文发布时间为:2018-04-25

本文作者:李真旭

本文来自云栖社区合作伙伴“数据和云”,了解相关信息可以关注“数据和云”。

如何利用 Myflash 解析 binlog ?相关推荐

  1. mysql myflash原理_如何利用 Myflash 解析 binlog ?

    新美大在 binlog2sql 的基础只是开源了一款新的小工具叫 Myflash:用于解析binlog 实现快速数据恢复,类似 Oracle 中的 Flashback 功能,不过目前仅支持MySQL ...

  2. mysql同步binlog_利用MySQL的Binlog实现数据同步与订阅(下)

    利用MySQL的Binlog实现数据同步与订阅(下)​blog.yuanpei.me 终于到这个系列的最后一篇,在前两篇博客中,我们分别了介绍了Binlog的概念和事件总线(EventBus)的实现, ...

  3. 利用Spring-Boot解析Excel、用Java分析Excel、告别手动输入用程序读取Excel

    利用Spring-Boot解析Excel.用Java分析Excel.告别手动输入用程序读取Excel 一.资源 java读取Excel文件 二.修改 (一)中的代码中的 import service. ...

  4. Android利用Jsoup解析html 开发网站客户端小记。

    这些天业余时间比较多,闲来无事,想起了以前看过开发任意网站客户端的一篇文章,就是利用jsoup解析网站网页,通过标签获取想要的内容.好了废话不多说,用到的工具为 jsoup-1.7.2.jar包,具体 ...

  5. JAVA中利用DOM解析XML文档

    JAVA中利用DOM解析XML文档 package org.sws.utils; import java.io.File;import java.io.IOException; import java ...

  6. [Linux C]利用libxml2解析xml文件

    为了解析xml,可以使用Linux下默认安装的libxml2. /*a.c功能:利用libxml2解析xml文件 */#include <stdio.h> #include <std ...

  7. mysql binlog查看工具_【使用 Rust 写 Parser】4. 解析 binlog

    系列所有文章 PrivateRookie:[使用 Rust 写 Parser]1. 初识 nom​zhuanlan.zhihu.com PrivateRookie:[使用 Rust 写 Parser] ...

  8. 基于Netty模拟解析Binlog

    系列文章 MySql Binlog初识 MySql Binlog事件介绍篇 MySql Binlog事件数据篇 Mysql通讯协议分析 基于Netty模拟解析Binlog 前言 最近一段时间一直再看m ...

  9. Wget漏洞(CVE-2016-4971)利用方式解析

    漏洞描述 wget是一个用来入侵Web服务器并拦截敏感数据的计算机程序.它基于shellshock漏洞对目标进行入侵.(FB注释:wget名称的由来是"World Wide Web" ...

最新文章

  1. Ubuntu 安装docker-engine的三种方法
  2. 向MySQL数据库中插入数据,sql语句没问题,但插入失败也不报错?
  3. 《等离子体所毕业生经验分享会》观后感 2020-07-03
  4. oracle hint禁用索引,【轉】Oracle索引HINT的使用
  5. c++ map的使用方法[转]
  6. pythonprint中文教程_python中使用print输出中文的方法
  7. @font-face的用法,css3使用web字体教程
  8. 利用Nginx对不同的域名进行解析
  9. ❤️测试人的曲折职场路:从毕业的5K到20K,四年我换了3份工作…
  10. 在Python中没有测试[重复]
  11. Linux笔记 -- Pyhton虚拟环境Linux系统基本操作Vim编辑器基本操作
  12. C语言---双人贪吃蛇
  13. 全国大学生“高教杯“成图大赛:关于蜗轮蜗杆快速建模研究(一)
  14. presscad排样lisp_PRESSCAD统赢使用技巧(二)
  15. 贪心法--->1.会议安排问题
  16. 怎么用level2行情接口获取A股数据?
  17. python中x%y是什么意思_python是什么
  18. cluster by、group by操作
  19. 计算机基础知识(基础入门小白专属)九
  20. 数据的处理之工具推荐(MATLAB、Python、Panoply、CDO、NCL)

热门文章

  1. NET面试题:C#中的lock关键字有何作用
  2. 转:HTTP 协议 GET 、POST之不同
  3. java 广播地址,根据ip地址跟子网掩码获取广播地址的java实现
  4. windowbuilder点击按钮出现新界面_MIUI 10 负一屏,新界面新体验
  5. python throw_Python 生成器与它的 send,throw,close 方法(转帖以及记录)
  6. 牛人写SCI常用经典词和常用句型
  7. 细胞转染的操作步骤及注意事项
  8. 三丰三坐标编程基本步骤_数控车床编程,经典实例教程
  9. SLAM | SLAM流程图集合
  10. Qt学习(九):QT中使用线程