博客
关于我
【DB宝43】MySQL误操作闪回恢复利器之my2sql
阅读量:438 次
发布时间:2019-03-06

本文共 3915 字,大约阅读时间需要 13 分钟。

my2sql简介

my2sql是一款基于Golang开发的MySQL Binlog解析工具,能够从MySQL的binary log(binlog)中解析出原始SQL、回滚SQL以及去除主键的INSERT SQL等。它还支持生成DML统计信息,帮助用户分析数据库的操作频率。此外,my2sql还支持处理大事务和长事务分析,是一款功能强大的工具。

my2sql的用途

my2sql在以下场景中表现出色:

  • 数据快速回滚(Flashback):在主从切换或数据库故障后,能够快速恢复到指定时间点的数据状态。
  • 修复新主库丢失的数据:当主库发生故障或需要进行主从切换时,my2sql可以帮助恢复丢失的数据。
  • 生成标准SQL:通过解析binlog文件,my2sql可以生成原始的SQL语句,支持插入、更新、删除操作。
  • DML统计与分析:统计数据库表的DML操作数量,识别频繁更新的表以及长事务或大事务。
  • 分析主从延迟:帮助用户分析主库执行的SQL语句,了解延迟问题的根源。
  • 支持复杂数据类型:my2sql对大多数工具不支持的数据类型(如JSON、BLOB、TEXT、EMOJI等)提供了支持。

my2sql的优势

  • 功能全面:不仅支持回滚操作,还能生成原始SQL、去除主键的INSERT SQL等。
  • 性能优越:基于Golang开发,解析1.1GB的binlog文件仅需1分30秒,速度远快于其他类似工具。
  • 支持大数据处理:能够处理大规模的事务和长事务分析。

安装与使用

安装方法

方法一:编译安装

yum install -y golanggo versiongo env | grep GOPATHmkdir -p /root/go/srccd /root/go/srcgit clone https://github.com/liuhr/my2sql.gitcd my2sqlgo build .

方法二:下载预编译二进制文件

wget https://raw.githubusercontent.com/liuhr/my2sql/master/releases/my2sqlmv my2sql /usr/local/bin/my2sqlchmod +x /usr/local/bin/my2sql

使用命令

./my2sql -user root -password lhr -port 3306 -host 127.0.0.1 -work-type 2sql -start-file mysql-bin.011259 -start-datetime "2020-07-16 10:20:00" -stop-datetime "2020-07-16 11:00:00" -output-dir ./tmpdir

重要参数说明

参数名称 描述
-U 是否使用唯一键作为WHERE条件,默认false
-add-extraInfo 是否将数据库名称、表名、时间戳等信息以注释形式加入生成的SQL前,默认false
-big-trx-row-limit 定义一个大事务的行数阈值,默认500,用于识别影响多行数据的事务
-databases、-tables 用逗号分隔的数据库或表名过滤器
-sql 指定要解析的SQL类型,可选值:insert、update、delete,默认全部解析
-doNotAddPrefixDb 是否不添加数据库前缀到生成的SQL中,默认false
-file-per-table 是否为每个表生成单独的SQL文件,默认false
-full-columns 对于UPDATE SQL,是否包含未变更的列,默认false
-ignorePrimaryKeyForInsert 是否在生成的INSERT语句中去掉主键,默认false
-output-dir 指定生成结果存放的目录
-output-toScreen 将生成的结果打印到屏幕,默认写入文件
-threads 线程数,默认8个
-work-type 工作类型,可选值:2sql(生成原始SQL)、rollback(生成回滚SQL)、stats(统计DML和事务信息)

使用案例

6.1 解析出标准SQL

./my2sql -user root -password lhr -port 3306 -host 127.0.0.1 -databases lhrdb -tables student -work-type 2sql -start-file mysql-bin.011259 -start-pos 4 -stop-file mysql-bin.011259 -stop-pos 583918266 -output-dir ./tmpdir

6.2 解析出回滚SQL

./my2sql -user root -password lhr -port 3306 -host 127.0.0.1 -databases lhrdb -tables student -work-type rollback -start-file mysql-bin.011259 -start-pos 4 -stop-file mysql-bin.011259 -stop-pos 583918266 -output-dir ./tmpdir

6.3 统计DML及大事务

./my2sql -user root -password lhr -port 3306 -host 127.0.0.1 -databases lhrdb -tables student -work-type stats -start-file mysql-bin.011259 -start-datetime "2020-07-16 10:20:00" -stop-datetime "2020-07-16 11:00:00" -big-trx-row-limit 500 -long-trx-seconds 300 -output-dir ./tmpdir

限制

  • 回滚功能要求:binlog格式必须为row,且binlog_row_image=full
  • 支持范围:只能回滚DML操作,不能回滚DDL(数据定义语言)。
  • 时区支持:可以指定时区来解释binlog中的时间字段,支持UTC或其他时区。
  • 权限要求:解析binlog需要数据库用户具备SELECTREPLICATION SLAVEREPLICATION CLIENT权限。
  • MySQL 8.0+支持:需在MySQL配置文件中启用default_authentication_plugin = mysql_native_password,并确保用户使用MySQL_native_password进行认证。
  • 案例演示

    准备MySQL环境

    docker run -d --name mysql3306 -h mysql3306 -p 3306:3306 -v /etc/mysql/mysql3306/conf:/etc/mysql/conf.d -e MYSQL_ROOT_PASSWORD=lhr -e TZ=Asia/Shanghai mysql:5.7.30

    执行DML操作

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

    解析binlog生成标准SQL

    my2sql -user root -password lhr -port 3306 -host 192.168.66.35 -databases lhrdb -tables student -work-type 2sql -start-file mysql3306-bin.000004 -start-pos 154 -stop-file  mysql3306-bin.000004 -stop-pos  2131 -output-dir /my2sql/

    执行闪回操作

    my2sql -user root -password lhr -port 3306 -host 192.168.66.35 -databases lhrdb -tables student -work-type rollback -start-file mysql3306-bin.000004 -start-pos 154 -stop-file  mysql3306-bin.000004 -stop-pos  2131 -output-dir /my2sql/

    统计DML及大事务

    my2sql -user root -password lhr -port 3306 -host 192.168.66.35 -databases lhrdb -tables student -work-type stats -start-file mysql3306-bin.000005 -start-pos 19097041 -stop-file  mysql3306-bin.000005 -stop-pos  53302083 -output-dir /my2sql/

    通过以上案例,可以看出my2sql在数据库管理、数据恢复以及性能分析等方面提供了强大的支持,适合开发者和DBA在日常工作中使用。

    转载地址:http://jjnyz.baihongyu.com/

    你可能感兴趣的文章
    NIFI大数据进阶_离线同步MySql数据到HDFS_02_实际操作_splitjson处理器_puthdfs处理器_querydatabasetable处理器---大数据之Nifi工作笔记0030
    查看>>
    NIFI大数据进阶_连接与关系_设置数据流负载均衡_设置背压_设置展现弯曲_介绍以及实际操作---大数据之Nifi工作笔记0027
    查看>>
    NIFI数据库同步_多表_特定表同时同步_实际操作_MySqlToMysql_可推广到其他数据库_Postgresql_Hbase_SqlServer等----大数据之Nifi工作笔记0053
    查看>>
    NIFI汉化_替换logo_二次开发_Idea编译NIFI最新源码_详细过程记录_全解析_Maven编译NIFI避坑指南001---大数据之Nifi工作笔记0068
    查看>>
    NIFI集群_内存溢出_CPU占用100%修复_GC overhead limit exceeded_NIFI: out of memory error ---大数据之Nifi工作笔记0017
    查看>>
    NIFI集群_队列Queue中数据无法清空_清除队列数据报错_无法删除queue_解决_集群中机器交替重启删除---大数据之Nifi工作笔记0061
    查看>>
    NIH发布包含10600张CT图像数据库 为AI算法测试铺路
    查看>>
    Nim教程【十二】
    查看>>
    Nim游戏
    查看>>
    NIO ByteBuffer实现原理
    查看>>
    Nio ByteBuffer组件读写指针切换原理与常用方法
    查看>>
    NIO Selector实现原理
    查看>>
    nio 中channel和buffer的基本使用
    查看>>
    NIO基于UDP协议的网络编程
    查看>>
    NISP一级,NISP二级报考说明,零基础入门到精通,收藏这篇就够了
    查看>>
    Nitrux 3.8 发布!性能全面提升,带来非凡体验
    查看>>
    NI笔试——大数加法
    查看>>
    NLog 自定义字段 写入 oracle
    查看>>
    NLog类库使用探索——详解配置
    查看>>
    NLP 基于kashgari和BERT实现中文命名实体识别(NER)
    查看>>