再来介绍另一个binlog文件解析的第三方工具my2sql

看腻了文字就来听听视频演示吧:https://www.bilibili.com/video/BV1rp4y1w74B/

github项目:https://github.com/liuhr/my2sql
gitee链接:https://gitee.com/mirrors/my2sql

my2sql

go版MySQL binlog解析工具,通过解析MySQL binlog ,可以生成原始SQL、回滚SQL、去除主键的INSERT SQL等,也可以生成DML统计信息。类似工具有binlog2sql、MyFlash、my2fback等,改工具基于my2fback、binlog_rollback工具二次开发而来。

用途

  • 数据快速回滚(闪回)
  • 主从切换后新master丢数据的修复
  • 从binlog生成标准SQL,带来的衍生功能
  • 生成DML统计信息,可以找到哪些表更新的比较频繁
  • IO高TPS高, 查出哪些表在频繁更新
  • 找出某个时间点数据库是否有大事务或者长事务
  • 主从延迟,分析主库执行的SQL语句
  • 除了支持常规数据类型,对大部分工具不支持的数据类型做了支持,比如json、blob、text、emoji等数据类型sql生成

github给出的产品性能对比

测试场景my2sqlbinlog2sql
1.1G binlog生成回滚SQL1分40秒65分钟
1.1G binlog生成原始SQL1分30秒50分钟
1.1G binlog生成表DML统计信息、以及事务统计信息40秒不支持

有闲得测试一下

使用限制

  • 使用回滚/闪回功能时,binlog格式必须为row,且binlog_row_image=full, DML统计以及大事务分析不受影响
  • 只能回滚DML, 不能回滚DDL,即drop table是恢复不了的
  • 支持指定-tl时区来解释binlog中time/datetime字段的内容。开始时间-start-datetime与结束时间-stop-datetime也会使用此指定的时区, 但注意此开始与结束时间针对的是binlog event header中保存的unix timestamp。结果中的额外的datetime时间信息都是binlog event header中的unix timestamp
  • 此工具是伪装成从库拉取binlog,需要连接数据库的用户有SELECT, REPLICATION SLAVE, REPLICATION CLIENT权限
  • MySQL8.0版本需要在配置文件中加入default_authentication_plugin =mysql_native_password,用户密码认证必须是mysql_native_password才能解析

下载安装

  • 方式一:下载二进制版本
    有编译好的linux版本(CentOS release 7.x)点击下载Linux版

image.png

  • 方式二:编译安装
    需要go语言环境来做编译
cd $GOPATH/src
git clone https://github.com/liuhr/my2sql.git
cd my2sql/
go build .

直接下载源码包,找到里面的二进制版本直接使用

[root@dba ~]# unzip my2sql-master.zip
[root@dba my2sql-master]# cd my2sql-master
[root@dba my2sql-master]# cp releases/centOS_release_7.x/my2sql /usr/bin/
[root@dba my2sql-master]# my2sql --help
my2back V1.0# 优先使用unique key作为where条件,默认false-U    prefer to use unique key instead of primary key to build where condition for delete/update sql-add-extraInfoWorks with -work-type=2sql|rollback. Print database/table/datetime/binlogposition...info on the line before sql, default false# 找出满足n条sql的事务,默认500条-big-trx-row-limit inttransaction with affected rows greater or equal to this value is considerated as big transaction. Valid values range from 1 to 10, default 30000 (default 30000)-databases stringonly parse these databases, comma seperated, default all.# 生成不带库名的sql-do-not-add-prifixDbPrefix table name witch database name in sql,ex: insert into db1.tb1 (x1, x1) values (y1, y1). # 为每个表生成一个sql文件-file-per-tableOne file for one table if true, else one file for all tables. default false. Attention, always one file for one binlog# 生成的sql是否带全列信息,默认false-full-columnsFor update sql, include unchanged columns. for update and delete, use all columns to build where condition.default false, this is, use changed columns to build set part, use primary/unique key to build where condition-host stringmysql host, default 127.0.0.1 . (default "127.0.0.1")-ignore-databases stringignore parse these databases, comma seperated, default null# 生成的insert语句是否去掉主键,默认false-ignore-primaryKey-forInsertfor insert statement when -workType=2sql, ignore primary key-ignore-tables stringignore parse these tables, comma seperated, default null# 当指定-mode=file 参数时,需要指定-local-binlog-file binlog文件相对路径或绝对路径,可以连续解析多个binlog文件,只需要指定起始文件名,程序会自动持续解析下个文件-local-binlog-file stringlocal binlog files to process, It works with -mode=file -long-trx-seconds inttransaction with duration greater or equal to this value is considerated as long transaction. Valid values range from 0 to 1, default 3600 (default 3600)# repl:默认,伪装成从库解析binlog;file:直接读取binlog文件解析-mode string	valid options are:  repl,file. repl: as a slave to get binlogs from master. file: get binlogs from local filesystem. default repl (default "repl")-mysql-type stringvalid options are:  mysql,mariadb. server of binlog, mysql or mariadb, default mysql (default "mysql")# 将生成的结果存放到制定目录-output-dir stringresult output dir, default current work dir. Attension, result files could be large, set it to a dir with large free space# 将生成的结果打印到屏幕,默认写到文件-output-toScreenJust output to screen,do not write to file-password stringmysql user password.-port uintmysql port, default 3306. (default 3306)-print-interval intworks with -w='stats', print stats info each PrintInterval. Valid values range from 1 to 600, default 30 (default 30)-server-id uintthis program replicates from mysql as slave to read binlogs. Must set this server id unique from other slaves, default 1113306 (default 1113306)# 要解析的sql类型,可选参数insert、update、delete,默认全部解析-sql stringvalid options are:  insert,update,delete. only parse these types of sql, comma seperated, valid types are: insert, update, delete; default is all(insert,update,delete)-start-datetime stringStart reading the binlog at first event having a datetime equal or posterior to the argument, it should be like this: "2020-01-01 01:00:00"-start-file stringbinlog file to start reading-start-pos uintstart reading the binlog at position (default 4)-stop-datetime stringStop reading the binlog at first event having a datetime equal or posterior to the argument, it should be like this: "2020-12-30 01:00:00"-stop-file stringbinlog file to stop reading-stop-pos uintStop reading the binlog at position (default 4)-tables stringonly parse these tables, comma seperated, DONOT prefix with schema, default all.# 线程数-threads uintWorks with -workType=2sql|rollback. threads to run (default 2)-tl stringtime location to parse timestamp/datetime column in binlog, such as Asia/Shanghai. default Local (default "Local")-user stringmysql user. -v    print version# 2sql:生成原始sql,rollback:生成回滚sql,stats:只统计DML、事务信息-work-type stringvalid options are:  2sql,rollback,stats. 2sql: convert binlog to sqls, rollback: generate rollback sqls, stats: analyze transactions. default: 2sql (default "2sql")

开干

# 参数要求,也是默认参数
binlog_format=ROW 
binlog_row_image=FULL# 伪装成从库解析binlog
my2sql -host 127.0.0.1 -user root -password root -port 3306 -mode repl -work-type 2sql -start-file mysql-bin.000011 -output-toScreen
# 直接读取binlog文件解析
my2sql -host 127.0.0.1 -user root -password root -port 3306 -mode file -local-binlog-file /mysqldata/data/mysql-bin.000011 -work-type 2sql -start-file /mysqldata/data/mysql-bin.000011 -output-toScreen# 重新生成一个binlog日志
mysql> flush logs;# 误删表数据
delete from t_student;
# 查看当前biglog日志所在的点
show master logs;# 立即定位结束时间
mysql> select now();# 根据操作时间解析binlog(定位时间缩小范围,避免解析多余的内容),生成回滚日志
my2sql -host 127.0.0.1 -user root -password root -port 3306 -databases mdb -tables t_student -work-type rollback -start-file mysql-bin.000011 -sql delete -start-datetime "2023-02-23 02:36:17" --stop-datetime "2023-02-23 02:38:17" -output-dir /mysqldata/backup/# 将生成的DML语句在库里source恢复
source /mysqldata/backup/rollback.11.sql

MySQL的binlog系列和奇技操作:

先来聊聊MySQL的binlog文件解析
接着说说mysqlbinlog解析工具如何做数据恢复
再来谈谈如何从binlog文件恢复误update的数据,模拟Oracle的闪回功能
接着聊聊如何从binlog文件恢复误delete的数据,模拟Oracle的闪回功能
借用binlog2sql工具轻松解析MySQL的binlog文件,再现Oracle的闪回功能
再来介绍另一个binlog文件解析的第三方工具my2sql
顺带来聊聊MySQL误删ibdata数据文件的恢复
MySQL大表直接复制文件的copy方式

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/150510.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

8.2 JUC - 4.Semaphore

目录 一、是什么?二、简单使用三、semaphore应用四、Semaphore原理 一、是什么? Semaphore:信号量,用来限制能同时访问共享资源的线程上限 二、简单使用 public class TestSemaphore {public static void main(String[] args) …

H桥级联型五电平三相逆变器Simulink仿真模型

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…

我写过的最蠢的代码

目录 前言正文蠢代码 - 1蠢代码 - 2蠢代码 - 3提醒! 蠢代码 - 4 总结 前言 每个人的身上都有毛毛 每个人的代码有些十分蠢,正巧,我也有! 一看到CSDN的活动《你写过的最蠢的代码是?》,我立刻想要参加来告诉…

热迁移中VirtIO-PCI设备的配置空间处理

文章目录 问题现象定位过程日志分析源端目的端 原理分析基本原理上下文分析复现分析patch分析 总结解决方案 问题现象 集群升级虚拟化组件版本,升级前存量运行并挂载了virtio磁盘的虚拟机集群内热迁移到升级后的节点失败,QEMU报错如下: 202…

练[BJDCTF2020]EasySearch

[BJDCTF2020]EasySearch 文章目录 [BJDCTF2020]EasySearch掌握知识解题思路关键paylaod 掌握知识 ​ 目录扫描,index.php.swp文件泄露,代码审计,MD5区块爆破,请求响应包的隐藏信息,.shtml文件RCE漏洞利用 解题思路 …

Hive 【Hive(七)窗口函数练习】

窗口函数案例 数据准备 1)建表语句 create table order_info (order_id string, --订单iduser_id string, -- 用户iduser_name string, -- 用户姓名order_date string, -- 下单日期order_amount int -- 订单金额 ); 2)装载语句 i…

MongoDB集群管理

1、副本集-Replica Sets 1.1、简介 MongoDB中的副本集(Replica Set)是一组维护相同数据集的mongod服务。 副本集可提供冗余和高 可用性,是所有生产部署的基础。 也可以说,副本集类似于有自动故障恢复功能的主从集群。通俗的讲就…

基于安卓android微信小程序的旅游app系统

项目介绍 随着人民生活水平的提高,旅游业已经越来越大众化,而旅游业的核心是信息,不论是对旅游管理部门、对旅游企业,或是对旅游者而言,有效的获取旅游信息,都显得特别重要.自助定制游将使旅游相关信息管理工作规范化、信息化、程序化,提供旅游景点、旅游线路,旅游新闻等服务本…

根据中序与后序遍历结果构造二叉树

文章前言:对于中序与后序遍历不是太清楚的小白同学,作者推荐: 二叉树的初步认识_加瓦不加班的博客-CSDN博客 解题思路: 先通过后序遍历结果定位根节点 再结合中序遍历结果切分左右子树 代码实现: //1. pre-order 前…

网络和系统操作命令

目录 ping:用于检测网络是否通畅,以及网络时延情况。ipconfig:查看计算机的IP参数配置信息,如IP地址、默认网关、子网掩码等信息。netstat:显示协议统计信息和当前TCP/IP网络连接。tasklist:显示当前运行的…

接口测试复习Requests PyMysql Dubbo

一。基本概念 接口概念:系统与系统之间 数据交互的通道。 接⼝测试概念:校验 预期结果 与 实际结果 是否⼀致。 特征: 测试⻚⾯测试发现不了的问题。(因为:接⼝测试 绕过前端界⾯。 ) 符合质量控制前移理…

C++设计模式-抽象工厂(Abstract Factory)

目录 C设计模式-抽象工厂(Abstract Factory) 一、意图 二、适用性 三、结构 四、参与者 五、代码 C设计模式-抽象工厂(Abstract Factory) 一、意图 提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们…

【VIM】VIm初步使用

玩转Vim-从放弃到入门_哔哩哔哩_bilibili

java基础-第7章-常用类

一、包装类 概述 Java提供了两个类型系统,基本类型与引用类型,使用基本类型在于效率,然而很多情况,会创建对象使用,因为对象可以做更多的功能,如果想要我们的基本类型像对象一样操作,就可以使…

在WIN10平台上体验Microsoft古老的Quick C 1.0编程

前言: 90年代初,微软出了Quick系统对抗Borland Turbo系列,其中包括 QuickBasic, QuickPascal和Quick C。1991年,Quick C for Windows 1.0发布,后来它被Visual C取代。我自己觉得微软成就在那个winstub.exe桩上&#xf…

【ElasticSearch】深入了解 ElasticSearch:开源搜索引擎的力量

文章目录 前言一、初识 ElasticSearch 搜索引擎1.1 ElasticSearch 的核心概念1.2 ElasticSearch 的演进历程1.3 ElasticSearch 的优势与未来 二、正排索引与倒排索引:数据库与 ElasticSearch 的差异2.1 对正排索引的认识2.2 对倒排索引的认识2.3 正排索引 vs. 倒排索…

【yolov系列:yolov7改进添加SIAM注意力机制】

yolo系列文章目录 文章目录 yolo系列文章目录一、SimAM注意力机制是什么?二、YOLOv7使用SimAM注意力机制1.在yolov7的models下面新建SimAM.py文件2.在common里面导入在这里插入图片描述 总结 一、SimAM注意力机制是什么? 论文题目:SimAM: A …

P1017 [NOIP2000 提高组] 进制转换

#include<iostream> #include<cstdio> #include<cmath> #include<cstring> using namespace std;void zhuan(int n,int r) {if(n0) return ;int mn%r;//m为余数 if(m<0) m-r,nr;//如果余数小于0&#xff0c;转化为正数//将余数转化为ascll码方便输出…

土木硕设计院在职转码上岸

一、个人介绍 双非土木硕&#xff0c;98年&#xff0c;目前在北京&#xff0c;职位为前端开发工程师&#xff0c;设计院在职期间自学转码上岸&#x1f33f; 二、背景 本人于19年开始土木研究生生涯&#xff0c;研二期间去地产实习近半年(碧桂园和世茂&#xff0c;这两家的地产…

flex 布局:元素/文字靠右

前言 略 使用flex的justify-content属性控制元素的摆放位置 靠右 <view class"more">展开更多<text class"iconfont20231007 icon-zhankai"></text></view>.more {display: flex;flex-direction: row;color: #636363;justify-co…