【MySQL工具】my2sql-快速解析binlog

​​​​​​

目录

​​​​​​安装

my2sql简介

用途

工具优势

限制

账号所需权限

参数解析

场景

场景1 回滚


安装

安装比较简单 直接下载二进制命令即可使用

wget https://github.com/liuhr/my2sql/raw/master/releases/centOS_release_7.x/my2sql

my2sql简介

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

用途

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

工具优势

功能丰富,参考上文

基于golang实现,速度快,全量解析1.1Gbinlog只需要1分30秒左右,当前其他类似开源工具一般要几十分钟

限制

  • 使用回滚/闪回功能时,binlog格式必须为row,且binlog_row_image=full, DML统计以及大事务分析不受影响
  • 只能回滚DML, 不能回滚DDL
  • 支持指定-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权限

账号所需权限

grant REPLICATION CLIENT,REPLICATION SLAVE on *.* to my2sql@'%' identified by '9WJKXw8e';

grant select on dhr_organization_service.* TO my2sql@'%';

参数解析

参数

含义

-host string

mysql host, default 127.0.0.1 . (default "127.0.0.1")

实例IP

默认127.0.0.1

-port uint

mysql port, default 3306. (default 3306)

端口 默认3306

-server-id uint

this program replicates from mysql as slave to read binlogs. Must set this server id unique from other slaves, default 1113306 (default 1113306)

-user string

mysql user

用户

-password string

mysql user password.

用户密码

-databases string

only parse these databases, comma seperated, default all.

只解析这些数据库,逗号分隔,默认全部。

-tables string

only parse these tables, comma seperated, DONOT prefix with schema, default all.

只解析这些表,逗号分隔,不要以schema为前缀,默认全部。

-ignore-databases string

ignore parse these databases, comma seperated, default null

忽略解析的数据库,逗号分隔,默认为空

-ignore-tables string

ignore parse these tables, comma seperated, default null

忽略解析的表,逗号分隔,默认为空

-mysql-type string

valid options are: mysql,mariadb. server of binlog, mysql or mariadb, default mysql (default "mysql")

有效选项是:mysql,mariadb. server of binlog, mysql or mariadb,默认mysql(默认“mysql”)

-output-dir string

result output dir, default current work dir. Attension, result files could be large, set it to a dir with large free space

结果输出目录,默认当前工作目录。 注意,结果文件可能很大,将其设置为可用空间大的目录

-output-toScreen

Just output to screen,do not write to file

只输出到屏幕,不写入文件

-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")

有效选项是:repl,file。 repl:作为从获取二进制日志。 文件:从本地文件系统获取二进制日志。 默认repl(默认“repl”)

-sql string

valid 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 string

Start 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"

-stop-datetime string

Stop 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"

-start-file string

binlog file to start reading

-stop-file string

binlog file to stop reading

-start-pos uint

start reading the binlog at position (default 4)

-stop-pos uint

Stop reading the binlog at position (default 4)

-threads uint

Works with -workType=2sql|rollback. threads to run (default 2)

与 -workType=2sql|rollback 一起使用。 要运行的线程(默认 2)

-work-type string

valid options are: 2sql,rollback,stats. 2sql: convert binlog to sqls, rollback: generate rollback sqls, stats: analyze transactions. default: 2sql (default "2sql")

有效选项是:2sql,rollback,stats。 2sql:将binlog转换为sqls,rollback:生成回滚sqls,stats:分析事务。 默认值:2sql(默认“2sql”)

-tl string

time location to parse timestamp/datetime column in binlog, such as Asia/Shanghai. default Local (default "Local")

解析binlog中timestamp/datetime列的时区,如Asia/Shanghai。 默认本地(默认“本地”)

-print-interval int

works with -w='stats', print stats info each PrintInterval. Valid values range from 1 to 600, default 30 (default 30)

与 -w='stats' 一起使用,打印每个 PrintInterval 的统计信息。 有效值范围从 1 到 600,默认 30(默认 30)

-U

prefer to use unique key instead of primary key to build where condition for delete/update sql

优先使用唯一键而不是主键来构建删除/更新 sql 的 where 条件

-add-extraInfo

Works with -work-type=2sql|rollback. Print database/table/datetime/binlogposition...info on the line before sql, default false

与 -work-type=2sql|rollback 一起使用。 在sql前一行打印database/table/datetime/binlogposition...i等信息,默认false

-big-trx-row-limit int

受影响的行大于或等于此值的事务被视为大事务。 有效值范围从 1 到 10,默认 30000(默认 30000)

-do-not-add-prifixDb

Prefix table name witch database name in sql,ex: insert into db1.tb1 (x1, x1) values (y1, y1).

为表名添加库名

-file-per-table

One file for one table if true, else one file for all tables. default false. Attention, always one file for one binlog

如果为 true,则为一个表一个文件,否则为所有表一个文件。 默认false。 注意,一个binlog总是一个文件

-full-columns

For 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

对于更新 sql,包括未更改的列。 对于更新和删除,使用所有列来构建 where 条件。

默认 false,即使用更改的列来构建集合部分,使用主键/唯一键来构建 where 条件

-ignore-primaryKey-forInsert

for insert statement when -workType=2sql, ignore primary key

对于 -workType=2sql 时的插入语句,忽略主键

-local-binlog-file string

local binlog files to process, It works with -mode=file

要处理的本地 binlog 文件,它与 -mode=file 一起使用

-long-trx-seconds int

transaction with duration greater or equal to this value is considerated as long transaction. Valid values range from 0 to 1, default 3600 (default 3600)

持续时间大于或等于该值的事务被看做长事务。 有效值范围从 0 到 1,默认 3600(默认 3600)

场景

创建账号

最小权限 

SELECT, REPLICATION SLAVE, REPLICATION CLIENTgrant SELECT, REPLICATION SLAVE, REPLICATION CLIENT on *.* to my2sql identified by 'my2sql';

场景1 回滚

CREATE TABLE `student` (

`id` int(11) NOT NULL AUTO_INCREMENT,

`number` int(11) NOT NULL,

`name` varchar(255) DEFAULT NULL,

`add_time` timestamp NULL DEFAULT CURRENT_TIMESTAMP COMMENT '添加的时间',

`content` json DEFAULT NULL,

PRIMARY KEY (`id`),

UNIQUE KEY `idx_name` (`number`,`name`)

) ENGINE=InnoDB AUTO_INCREMENT=1234 DEFAULT CHARSET=utf8

INSERT INTO `my2sql_test`.`student` (`id`,`number`,`name`,`add_time`,`content`) VALUES (1233,26,'ranran','2020-07-15 19:06:03',null);

INSERT INTO `my2sql_test`.`student` (`id`,`number`,`name`,`add_time`,`content`) VALUES (1232,134,'asdf','2020-07-12 11:08:41',null);

INSERT INTO `my2sql_test`.`student` (`id`,`number`,`name`,`add_time`,`content`) VALUES (1231,21,'chenxi','2020-07-12 10:12:45',null);

INSERT INTO `my2sql_test`.`student` (`id`,`number`,`name`,`add_time`,`content`) VALUES (1229,20,'chenxi','2020-07-11 16:20:50',null);

INSERT INTO `my2sql_test`.`student` (`id`,`number`,`name`,`add_time`,`content`) VALUES (1227,18,'hanran','2020-07-06 21:55:48','{\"age\":13,\"author\":\"liuhan\"}');

delete from student;

my2sql -user my2sql -password  -port 3307 \

-host 127.0.0.1  -databases my2sql_test -tables student \

-work-type rollback -start-file mysql-bin.000326 -add-extraInfo -sql delete \

-start-datetime "2022-07-08 10:30:00" --stop-datetime "2022-07-08 10:35:00" \

-output-dir /home/backups/my2sql

场景2 生成正向SQL

my2sql -host 127.0.0.1 -user my2sql -password  -port 3307 \

-databases my2sql_test -tables student \

-work-type 2sql -start-file mysql-bin.000326 -add-extraInfo -sql delete \

-start-datetime "2022-07-08 10:30:00" --stop-datetime "2022-07-08 10:35:00" \

-output-dir /home/backups/my2sql

场景3 DML与事务统计

my2sql -user my2sql -password  -port 3307 \

-host 127.0.0.1 \

-work-type stats -start-file mysql-bin.000325 stop-file mysql-bin.000325 \

-big-trx-row-limit 5 -long-trx-seconds 3 \

-output-dir /home/backups/my2sql

场景4 解析本地

需要连接数据库 server

my2sql -user my2sql -password  -port 3307 \

-host 127.0.0.1  -databases objective_stage_20220707 -tables objective \

-work-type 2sql -start-file mysql-bin.000326 -add-extraInfo -sql delete \

-start-datetime "2022-07-07 17:30:00" --stop-datetime "2022-07-07 17:35:00" \

-output-dir /home/backups/

性能对比

1.2G binlog

my2sql

binlog2sql

正向本地

2线程

89秒

8线程

72秒

16线程

77秒

正向SQL

8线程

62秒

回滚SQL

8线程

35秒

2601 秒

参考

GitHub - liuhr/my2sql

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

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

相关文章

AUTOSAR系统服务篇 - BswM

文章目录 模式仲裁仲裁规则模式条件和逻辑表达式模式仲裁的要求立即操作和延时操作初始化后的仲裁行为模式控制模式处理周期模式控制的要求触发和条件动作列表可用动作初始化后的模式控制行为等待功能多分区支持BswM接口和端口模式请求端口模式切换端口模式切换通知组件类型和内…

上海亚商投顾:沪指震荡下跌 成交量继续下破8000亿

上海亚商投顾前言:无惧大盘涨跌,解密龙虎榜资金,跟踪一线游资和机构资金动向,识别短期热点和强势个股。 一.市场情绪 沪指昨日震荡调整,深成指、创业板指午后跌超1%,北证50指数跌超7%,超百只北…

Windows11编译Hadoop3.3.6源码

由于https://github.com/kontext-tech/winutils还未发布3.3.6版本,因此尝试源码编译 目录 环境和安装包准备,见2zlib编译方法一:方法二: 配置文件更改1. maven阿里云镜像2. Node版本3. 越过Javadoc检查 编译HadoopError,其他报错…

JavaScript中的异步处理方法

JavaScript中的异步处理是开发者在日常开发过程中必须面对的一个重要问题。由于JavaScript是单线程的,因此对于一些可能需要长时间执行的操作,如网络请求、IO操作等,如果采用同步的方式,可能会导致应用程序的阻塞,降低…

科研学习|论文解读——Deep learning for anomaly detection in log data: a survey

摘要 自动日志文件分析能够及早发现系统故障等相关事件。特别是,自学习异常检测技术能够捕捉日志数据中的模式,然后向系统操作员报告意外的日志发生,而无需提前提供或手动建模异常场景。最近,越来越多的利用深度学习方法来实现此目…

【Java】JDBC 之 PreparedStatement 和 Statement 的区别和理解【转载并梳理】

一、PreparedStatement 和 Statement 的含义和区别 1、含义 PreparedStatement:PreparedStatement 是预编译的,对于批量处理可以大大提高效率,也叫 JDBC存储过程。Statement:使用 Statement 对象,在对数据库只执行一…

ExoPlayer - Failed to initialize OMX.qcom.video.decoder.avc

人莫鉴于流水而鉴于止水,唯止能止众止 1. 背景 使用ExoPlayer,我不信你没遇到过这个问题: java.lang.IllegalArgumentException: Failed to initialize OMX.qcom.video.decoder.avc 详细内容如下图所示: 2. MediaCodec(解码器) …

ArkUI框架中的PersistentStorage和Environment深入详解【鸿蒙专栏-13】

文章目录 ArkUI框架中的PersistentStorage和EnvironmentPersistentStorage:保持状态的长存储概述限制条件使用场景初始化和访问属性示例流程图注意事项Environment:设备环境查询使用场景从UI中访问Environment参数应用逻辑使用Environment深入ArkUI框架的持久化存储与设备环境…

FastApi接收不到Apifox发送的from-data字符串_解决方法

接收不到Apifox发送的from-data字符串_解决方法 问题描述解决方法弯路总结弯路描述纵观全局小结 问题描述 这里写了一个接口,功能是上传文件,接口参数是file文件和一个id字符串 gpt_router.post("/uploadfiles") async def create_upload_fi…

使用Feign简化Spring Boot微服务间的调用

摘要: 在微服务架构中,服务间的通信是至关重要的。Spring Cloud提供了多种工具,其中Feign是一款声明式的Web服务客户端,能够显著简化服务调用的过程。本文将详细介绍在Spring Boot应用中如何使用Feign进行微服务之间的调用。 正文…

配置自动化部署Jenkins和Gitea

配置自动化部署 这里使用的是JenkinsGitea 如果不知道怎么安装Jenkins和Gitea可以参考下面文章 https://blog.csdn.net/weixin_46533577/article/details/134644144 我的另一篇文章 介绍 前端 先说下自己的情况,因为自己服务器原因,使用的服务器内…

防篡改,Tripwire的快速安装与简洁使用

防篡改Tripwire 一、安装 1.准备(centos7的yum不带tripwire) wget https://mirrors.ustc.edu.cn/epel/7/x86_64/Packages/e/epel-release-7-14.noarch.rpm rpm -ivh epel-release-7-14.noarch.rpm yum -y install tripwire另一个方法 cd /etc/yum.rep…

面向对象的四大特性:封装、抽象、继承、多态

封装(Encapsulation) 封装也叫作信息隐藏或者数据访问保护。类通过暴露有限的访问接口,授权外部仅能通过类提供的方式来访问内部信息或者数据。它需要编程语言提供权限访问控制语法来支持,例如 Java 中的 private、protected、pu…

Linux基础项目开发1:量产工具——输入系统(三)

前言: 前面我们已经实现了显示系统,现在我们来实现输入系统,与显示系统类似,下面让我们一起来对输入系统进行学习搭建吧 目录 一、数据结构抽象 1. 数据本身 2. 设备本身: 3. input_manager.h 二、触摸屏编程 to…

Mysq8l在Centos上安装后忘记root密码如何重新设置

场景 Mysql8在Windows上离线安装时忘记root密码: Mysql8在Windows上离线安装时忘记root密码-CSDN博客 如果是在Windows上忘记密码可以参考上面。 如果在Centos中安装mysql可以参考下面。 CentOS7中安装Mysql8并配置远程连接和修改密码等: CentOS7中…

BEVFormer【人工智能】

BEVFormer 是一篇今年中稿 ECCV 2022 的论文,其中提出了一种纯视觉(camera)感知任务的算法模型,用于实现3D目标检测和地图分割任务。该算法通过提取环视相机(Bird’s Eye View Camera)采集到的图像特征&…

阿里云Windows server2016 安装Docker

阿里云Windows server2016 安装Docker 1 软件环境介绍2 下载更新2.1 windowsR 输入sconfig2.2 下载最新版的安装包,安装并重启2.3 下载并安装更新2.4 以管理员方式运行powershell2.5 将Tls修改成二级2.6 安装NuGet服务2.7 安装docker模块2.7 安装 docker包 32.8 查看…

Reactor模式

Reactor模式有点类似事件驱动模式。在事件驱动模式中,当有事件触发时,事件源会将事件分发到Handler(处理器),由Handler负责事件处理。Reactor模式中的反应器角色类似于事件驱动 模式中的事件分发器(Dispatc…

解析Top-K问题及堆排序算法

Top-K问题是在海量数据中找到最大或最小的K个元素,它在实际应用中非常常见,例如专业前10名、世界500强、富豪榜、游戏中前100的活跃玩家等。在面对大规模数据时,直接对数据进行排序可能效率低下,因为排序的时间复杂度通常为O(n lo…