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

本文共 3925 字,大约阅读时间需要 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 golang
go version
go env | grep GOPATH
mkdir -p /root/go/src
cd /root/go/src
git clone https://github.com/liuhr/my2sql.git
cd my2sql
go build .

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

wget https://raw.githubusercontent.com/liuhr/my2sql/master/releases/my2sql
mv my2sql /usr/local/bin/my2sql
chmod +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/

    你可能感兴趣的文章
    Nodejs process.nextTick() 使用详解
    查看>>
    NodeJS yarn 或 npm如何切换淘宝或国外镜像源
    查看>>
    nodejs 中间件理解
    查看>>
    nodejs 创建HTTP服务器详解
    查看>>
    nodejs 发起 GET 请求示例和 POST 请求示例
    查看>>
    NodeJS 导入导出模块的方法( 代码演示 )
    查看>>
    nodejs 开发websocket 笔记
    查看>>
    nodejs 的 Buffer 详解
    查看>>
    NodeJS 的环境变量: 开发环境vs生产环境
    查看>>
    nodejs 读取xlsx文件内容
    查看>>
    nodejs 运行CMD命令
    查看>>
    Nodejs+Express+Mysql实现简单用户管理增删改查
    查看>>
    nodejs+nginx获取真实ip
    查看>>
    nodejs-mime类型
    查看>>
    NodeJs——(11)控制权转移next
    查看>>
    NodeJS、NPM安装配置步骤(windows版本)
    查看>>
    NodeJS、NPM安装配置步骤(windows版本)
    查看>>
    nodejs下的express安装
    查看>>
    nodejs与javascript中的aes加密
    查看>>
    nodejs中Express 路由统一设置缓存的小技巧
    查看>>