新美大在 binlog2sql 的基础只是开源了一款新的小工具叫 Myflash;用于解析binlog 实现快速数据恢复,类似 Oracle 中的 Flashback 功能,不过目前仅支持MySQL 5.6、5.7版本(MariaDB 10 已经引入了 Flashback 功能)。在这里进行了简单测试,以后恢复 DML 误操作就更简单一些了。

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.6

rm: 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/bash

file_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.flashback

arr=`find ${file_path} -name "binlog_output_base.0*"|sort -n`

for i in ${arr}

do

mysqlbinlog ${i} | mysql -S /opt/mysql/mysql.sock

done

–验证数据mysql> select count(1) from Test;

+----------+

| count(1) |

+----------+

|   100001 |

+----------+

1 row in set (0.02 sec)

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

mysql myflash原理_如何利用 Myflash 解析 binlog ?相关推荐

  1. mysql安装原理_全面解读MySQL主从复制,从原理到安装配置

    为什么需要主从复制? 1.在业务复杂的系统中,有这么一个情景,有一句sql语句需要锁表,导致暂时不能使用读的服务,那么就很影响运行中的业务,使用主从复制,让主库负责写,从库负责读,这样,即使主库出现了 ...

  2. mysql主从复制原理_你知道MySQL主从复制的原理吗?

    主从复制是怎么实现的呢?更新语句会记录 binlog,它是一种逻辑日志.有了这个 binlog,从服务器会获取主服务器的 binlog 文件,然后解析里面的 SQL 语句,在从服务器上面执行一遍,保持 ...

  3. mysql in 原理_深入理解MySql子查询IN的执行和优化

    IN为什么慢? 在应用程序中使用子查询后,SQL语句的查询性能变得非常糟糕.例如: SELECT driver_id FROM driver where driver_id in (SELECT dr ...

  4. mysql优化原理_【MySQL】我必须得告诉你们的MySQL优化原理3(下)INNODB配置

    INNODB:使用最广的存储引擎 innodb-buffer-pool-size 若是大部分是InnoDB表,那么InnoDB缓冲池或许比其余任何东西都更须要内存,InnoDB缓冲池缓冲的数据:索引. ...

  5. mysql数据库系统原理_数据库系统原理及MySQL应用教程

    作 者:李辉 等 编著 著作 定 价:56 出 版 社:机械工业出版社 出版日期:2016年01月01日 页 数:374 装 帧:平装 ISBN:9787111525127 本书以MySQL为平台,全 ...

  6. netty实现mysql协议_基于Netty模拟解析Binlog

    前言 最近一段时间一直再看mysql binlog相关的内容,也整理了几篇相关的文章,对mysql的事件以及通讯协议在理论上有了一个大概的了解,但是缺少实战:本文的目的就是从实战出发,了解binlog ...

  7. mysql auto_increment 原理_[Mysql]mysql原理之Auto_increment

    2019独角兽企业重金招聘Python工程师标准>>> 引言 MySQL中auto_increment字段估计大家都经常用到,特别是innodb引擎.我也经常用,只知道mysql可以 ...

  8. 扫地机器人返充原理_扫地机器人全解析

    文章引用自 薛先生 ,版权完全归属薛先生.其公众号:Alphatree and Evelyn2018-12-12 思考出发点: 那个多数人印象中乱碰乱撞.还拖着脏污满屋跑的添乱扫地机,还需要多久才能变 ...

  9. mysql query 原理_[转]MySQL的Query Cache原理

    QueryCache(下面简称QC)是根据SQL语句来cache的.一个SQL查询如果以select开头,那么MySQL服务器将尝试对其使用QC.每个Cache都是以SQL文本作为key来存的.在应用 ...

最新文章

  1. 使用bitblt提高GDI+绘图的效率(转)
  2. RHEL6.4更改为CentOS6.4的yum源
  3. Spring Cloud Spring Boot mybatis分布式微服务云架构(三)属性配置文件详解(1)
  4. IDE神器intellij idea的基本使用
  5. jax-rs jax-ws_JAX-WS入门
  6. 开发者论坛一周精粹(第四十七期)服务器变更已备案域名需要重新备案吗?
  7. 日志文件导入到mysql_导入日志文件到mysql数据库表
  8. 防火墙在setup进入不了
  9. 微信支付phpv3给我们留下的坑
  10. 管理感悟:工作计划的作用
  11. 【LuoguP4770】[NOI2018] 你的名字
  12. HTML怎么让左边占满整个竖屏,关于移动端页面强制竖屏
  13. 如何评价微软在数据中心使用FPGA代替传统CPU的做法?
  14. 浅析dToF和iToF
  15. hdu 2044 一只小蜜蜂...
  16. android简单视频播放器,推荐用于Android超简单视频播放器的ArtPlayer
  17. 计算机要学什么知识,学电脑要先学什么 学电脑要学习什么知识
  18. Android Material 常用组件详解(六)—— Progress indicators、Slider 使用详解
  19. 使用高德地图API实现历史轨迹查询
  20. 计算机基础——计算机网络

热门文章

  1. python生成器generator和迭代器Iterator测试
  2. Android之知识总结
  3. 笨办法学python3_软件测试需要学什么(个人软件测试学习路线)
  4. java 交集怎么写_Java里面如何求两个集合的交集
  5. Leecode刷题热题HOT100(2)——两数相加
  6. 容器入门(1) - 安装和使用Docker Registry
  7. 项目管理工具project软件学习(八) - 关键路径查询、资源可用性
  8. 在ASP.NET Core 2.2 Web应用程序项目中自定义Bootstrap
  9. 客户端更新功能实现_exlive1.0|监控客户端功能更新
  10. 给一个div innerhtml 后 没有内容显示的问题_实战:仅用18行JavaScript构建一个倒数计时器...