本文共 3925 字,大约阅读时间需要 13 分钟。
my2sql是一款基于Golang开发的MySQL Binlog解析工具,能够从MySQL的binary log(binlog)中解析出原始SQL、回滚SQL以及去除主键的INSERT SQL等。它还支持生成DML统计信息,帮助用户分析数据库的操作频率。此外,my2sql还支持处理大事务和长事务分析,是一款功能强大的工具。
my2sql在以下场景中表现出色:
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和事务信息) |
./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
./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
./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_image=full。SELECT、REPLICATION SLAVE和REPLICATION CLIENT权限。default_authentication_plugin = mysql_native_password,并确保用户使用MySQL_native_password进行认证。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
INSERT INTO `lhrdb`.`student` (`id`,`number`,`name`,`add_time`,`content`) VALUES (1233,26,'ranran','2020-07-15 19:06:03',null);...
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/
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/