mysql myflash原理_如何利用 Myflash 解析 binlog ?
新美大在 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 ?相关推荐
- mysql安装原理_全面解读MySQL主从复制,从原理到安装配置
为什么需要主从复制? 1.在业务复杂的系统中,有这么一个情景,有一句sql语句需要锁表,导致暂时不能使用读的服务,那么就很影响运行中的业务,使用主从复制,让主库负责写,从库负责读,这样,即使主库出现了 ...
- mysql主从复制原理_你知道MySQL主从复制的原理吗?
主从复制是怎么实现的呢?更新语句会记录 binlog,它是一种逻辑日志.有了这个 binlog,从服务器会获取主服务器的 binlog 文件,然后解析里面的 SQL 语句,在从服务器上面执行一遍,保持 ...
- mysql in 原理_深入理解MySql子查询IN的执行和优化
IN为什么慢? 在应用程序中使用子查询后,SQL语句的查询性能变得非常糟糕.例如: SELECT driver_id FROM driver where driver_id in (SELECT dr ...
- mysql优化原理_【MySQL】我必须得告诉你们的MySQL优化原理3(下)INNODB配置
INNODB:使用最广的存储引擎 innodb-buffer-pool-size 若是大部分是InnoDB表,那么InnoDB缓冲池或许比其余任何东西都更须要内存,InnoDB缓冲池缓冲的数据:索引. ...
- mysql数据库系统原理_数据库系统原理及MySQL应用教程
作 者:李辉 等 编著 著作 定 价:56 出 版 社:机械工业出版社 出版日期:2016年01月01日 页 数:374 装 帧:平装 ISBN:9787111525127 本书以MySQL为平台,全 ...
- netty实现mysql协议_基于Netty模拟解析Binlog
前言 最近一段时间一直再看mysql binlog相关的内容,也整理了几篇相关的文章,对mysql的事件以及通讯协议在理论上有了一个大概的了解,但是缺少实战:本文的目的就是从实战出发,了解binlog ...
- mysql auto_increment 原理_[Mysql]mysql原理之Auto_increment
2019独角兽企业重金招聘Python工程师标准>>> 引言 MySQL中auto_increment字段估计大家都经常用到,特别是innodb引擎.我也经常用,只知道mysql可以 ...
- 扫地机器人返充原理_扫地机器人全解析
文章引用自 薛先生 ,版权完全归属薛先生.其公众号:Alphatree and Evelyn2018-12-12 思考出发点: 那个多数人印象中乱碰乱撞.还拖着脏污满屋跑的添乱扫地机,还需要多久才能变 ...
- mysql query 原理_[转]MySQL的Query Cache原理
QueryCache(下面简称QC)是根据SQL语句来cache的.一个SQL查询如果以select开头,那么MySQL服务器将尝试对其使用QC.每个Cache都是以SQL文本作为key来存的.在应用 ...
最新文章
- 使用bitblt提高GDI+绘图的效率(转)
- RHEL6.4更改为CentOS6.4的yum源
- Spring Cloud Spring Boot mybatis分布式微服务云架构(三)属性配置文件详解(1)
- IDE神器intellij idea的基本使用
- jax-rs jax-ws_JAX-WS入门
- 开发者论坛一周精粹(第四十七期)服务器变更已备案域名需要重新备案吗?
- 日志文件导入到mysql_导入日志文件到mysql数据库表
- 防火墙在setup进入不了
- 微信支付phpv3给我们留下的坑
- 管理感悟:工作计划的作用
- 【LuoguP4770】[NOI2018] 你的名字
- HTML怎么让左边占满整个竖屏,关于移动端页面强制竖屏
- 如何评价微软在数据中心使用FPGA代替传统CPU的做法?
- 浅析dToF和iToF
- hdu 2044 一只小蜜蜂...
- android简单视频播放器,推荐用于Android超简单视频播放器的ArtPlayer
- 计算机要学什么知识,学电脑要先学什么 学电脑要学习什么知识
- Android Material 常用组件详解(六)—— Progress indicators、Slider 使用详解
- 使用高德地图API实现历史轨迹查询
- 计算机基础——计算机网络
热门文章
- python生成器generator和迭代器Iterator测试
- Android之知识总结
- 笨办法学python3_软件测试需要学什么(个人软件测试学习路线)
- java 交集怎么写_Java里面如何求两个集合的交集
- Leecode刷题热题HOT100(2)——两数相加
- 容器入门(1) - 安装和使用Docker Registry
- 项目管理工具project软件学习(八) - 关键路径查询、资源可用性
- 在ASP.NET Core 2.2 Web应用程序项目中自定义Bootstrap
- 客户端更新功能实现_exlive1.0|监控客户端功能更新
- 给一个div innerhtml 后 没有内容显示的问题_实战:仅用18行JavaScript构建一个倒数计时器...