ICode9

精准搜索请尝试: 精确搜索
首页 > 数据库> 文章详细

MySQL工具之binlog2sql闪回操作

2021-04-14 15:58:00  阅读:236  来源: 互联网

标签:闪回 start -- mysql binlog2sql python usr MySQL



MySQL工具之binlog2sql闪回操作


工具官网: https://github.com/danfengcao/binlog2sql

本文所有依赖包链接: https://share.weiyun.com/57HUxNi


---binlog2sql工具安装过程
1、安装系统依赖包
yum -y install gcc libffi-devel automake autoconf libtool make zlib* zlib-devel openssl-devel openssl* bzip2*
2、安装Python2.7
cp /soft/Python-2.7.16.tgz /usr/src/
cd /usr/src/
tar -zxvf Python-2.7.16.tgz
cd /usr/src/Python-2.7.16
vi /usr/src/Python-2.7.16/Modules/Setup.dist
找到以下内容,去掉前边的注释:
#SSL=/usr/local/ssl
#_ssl _ssl.c \
#       -DUSE_SSL -I$(SSL)/include -I$(SSL)/include/openssl \
#       -L$(SSL)/lib -lssl -lcrypto 
和:
#zlib zlibmodule.c -I$(prefix)/include -L$(exec_prefix)/lib -lz
--编译安装
./configure --prefix=/usr/local/python2.7
make && make install
ln -s /usr/local/python2.7/bin/python2.7 /usr/bin/python2.7
3、安装setup-tools
chmod 775 setuptools-0.6c11-py2.7.egg
sh setuptools-0.6c11-py2.7.egg
  
4、安装依赖包
方法A:可以通过pip安装相应的依赖包
(1)首先安装pip命令
tar -xzvf pip-10.0.1.tar.gz
cd pip-10.0.1
python setup.py install
ln -s /usr/local/python2.7/bin/pip /usr/bin/pip
pip install --upgrade pip
(2)解压binlog2sql软件:
unzip binlog2sql-master.zip -d /usr/local/
cd /usr/local/binlog2sql-master
pip install -r requirements.txt
[root@rhel6lhr binlog2sql-master]# pip list
Package           Version
----------------- -------
mysql-replication 0.13   
pip               19.2.3 
PyMySQL           0.7.11 
setuptools        0.6rc11
wheel             0.29.0 
方法B:单独安装PyMySQL、wheel和python-mysql-replication包
(1)PyMySQL-0.8.0安装
tar -zxvf PyMySQL-0.8.0.tar.gz
cd PyMySQL-0.8.0
python setup.py install
(2)wheel-0.31.0安装
tar -xzvf wheel-0.31.0.tar.gz
cd wheel-0.31.0
python setup.py install
(3)python-mysql-replication安装
unzip python-mysql-replication-master.zip
cd python-mysql-replication-master
python setup.py install
  
 
GRANT SELECT, REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'flash_lhr'@'%' identified by 'lhr';
show master status;
CREATE TABLE ftb(id INT ,name varchar(30));
INSERT INTO ftb values(1,'a'),(2,'b');
python2.7 /usr/local/binlog2sql-master/binlog2sql/binlog2sql.py -h192.168.59.130 -P3309 -uroot -plhr -dlhrdb -tftb --start-file='rhel6lhr-bin.000005'
python binlog2sql.py -h127.0.0.1 -P3307 -uflash -pflash -dtest -ta1 --start-file='mysql-binlog.000008' --start-position=259 --stop-position=10446 -B >> flashback.sql

 







原文:  https://www.cnblogs.com/hmwh/p/9140416.html


文档结构:

 

在生产环境中如果遇到误删,改错数据的情况,利用mysql闪回工具binlog2sql,可以实现数据的快速回滚,从binlog中提取SQL,并能生成回滚SQL语句。Binlog以event作为单位记录数据库变更的数据信息,闪回就是可以重现这些变化数据信息之前的操作。也就是说,对于insert操作,会生成相反的update语句。这块工具只能使用在binlog格式为row模式下,且只支持DML语句不支持DDL语句。

binlog2sql下载地址: https://github.com/danfengcao/binlog2sql

本文所有依赖包链接:https://share.weiyun.com/57HUxNi

setup-tools下载地址:

https://pypi.python.org/packages/2.7/s/setuptools/setuptools-0.6c11-py2.7.egg

python2.7下载地址: https://www.python.org/downloads/source/

 

实验环境:

数据库版本:

mysql5.7.20

操作系统:red-hat 6.7

 python:2.7.15

 

1、环境准备

1、安装python2.7

1.1首先安装python2.7(6.x默认是安装2.6)

安装参考:http://www.cnblogs.com/balaamwe/p/3480430.html

[root@mysql5 binlog2sql-master]# rpm -qa|grep make

make-3.81-20.el6.x86_64

automake-1.11.1-4.el6.noarch

cmake-2.8.12.2-4.el6.x86_64

 

如果没有安装make工具

yum -y install gcc automake autoconf libtool make

 

查看是否安装zlib库

rpm -qa|grep zlib

zlib-1.2.3-29.el6.x86_64

zlib-devel-1.2.3-29.el6.x86_64

 

安装zlib

yum install zlib-devel

 

检查是否安装ssl 库

[root@mysql5 binlog2sql-master]# rpm -qa|grep openssl

openssl-1.0.1e-42.el6.x86_64

openssl-devel-1.0.1e-42.el6.x86_64

 

安装openssl

yum install openssl*

 

安装bzip2依赖库

yum install -y bzip2*

 

 

2. 编译安装python2.7.15

 

cp /soft/Python-2.7.15.tgz /usr/src/

  cd /usr/src/

  tar -zxvf Python-2.7.15.tgz

vi /usr/src/Python-2.7.15/Modules/Setup.dist

 

 找到   

 

#SSL=/usr/local/ssl

#_ssl _ssl.c \

#       -DUSE_SSL -I$(SSL)/include -I$(SSL)/include/openssl \

#       -L$(SSL)/lib -lssl -lcrypto
......
#zlib zlibmodule.c -I$(prefix)/include -L$(exec_prefix)/lib -lz

 

 把注释去掉

 编译

 

cd /usr/src/Python-2.7.15

./configure --prefix=/usr/local/python2.7

make all

make install

make clean

make distclean

 

(一句一句粘贴)

 

 

建立python2.7 软链

mv /usr/bin/python /usr/bin/python.bak

ln -s /usr/local/python2.7/bin/python2.7 /usr/bin/python2.7

ln -s /usr/bin/python2.7 /usr/bin/python

  

 

2、安装setup-tools

chmod 775 setuptools-0.6c11-py2.7.egg

sh setuptools-0.6c11-py2.7.egg

  

3、安装依赖包

(1)PyMySQL-0.8.0安装

tar -zxvf PyMySQL-0.8.0.tar.gz

cd PyMySQL-0.8.0

python setup.py install

 

 

(2)wheel-0.31.0安装

tar -xzvf wheel-0.31.0.tar.gz

cd wheel-0.31.0

python setup.py install

 

 (3)python-mysql-replication安装

unzip python-mysql-replication-master.zip

cd python-mysql-replication-master

python setup.py install

 

 

(4)通过pip安装相应的依赖包

tar -xzvf pip-10.0.1.tar.gz

cd pip-10.0.1

python setup.py install

 

 

解压binlog2sql软件:

unzip binlog2sql-master.zip

 

cd /soft/binlog2sql-master

pip install -r requirements.txt(前面包都安装成功后,这句就可以不用了)

 

 

2、恢复演练

1、查看参数使用

cd /soft/binlog2sql-master/binlog2sql/

python binlog2sql.py --help

 

 

值得注意的就是--start-datetime,--stop-datetime格式为datetime即%Y-%m-%d %H:%M:%S。

 

2、闪回要求

1、mysql 服务是开启,离线无法进行binlog。

2、binlog_format 必须是ROW格式。

3、DDL语句无法做到闪回,只能解析DML语句。

 

3、DML语句闪回测试

删除test库下a1表的前2000行(共10000行)

 

 

delete from a1 limit 2000;(drop table 是不能够闪回的)

select count(*) from a1;

 

 

a)     test库创建闪回用户

grant select,replication slave,replication client on *.* to 'flash'@'%' identified by 'flash';

 

 

查看当前binlog

 

 

当前binlog文件是mysql-binlog.000008,预估一下刚刚操作时间(由于测试机上时间不准,未带时间)。

cd /soft/binlog2sql-master/binlog2sql/

 

python binlog2sql.py -h127.0.0.1 -P3307 -uflash -pflash -dtest -ta1 --start-file='mysql-binlog.000008'

查看生成的恢复语句。

 

已下仅为一部分

 

 

可以看得SQL位置是在259到10446之间,进行过滤,生成回滚SQL。

 

python binlog2sql.py -h127.0.0.1 -P3307 -uflash -pflash -dtest -ta1 --start-file='mysql-binlog.000008' --start-position=259 --stop-position=10446 -B >> flashback.sql

 

 

最后应用回滚SQL语句:

source /soft/binlog2sql-master/binlog2sql/flashback.sql

 

测试成功!





binlog2sql

从MySQL binlog解析出你要的SQL。根据不同选项,你可以得到原始SQL、回滚SQL、去除主键的INSERT SQL等。

用途

  • 数据快速回滚(闪回)
  • 主从切换后新master丢数据的修复
  • 从binlog生成标准SQL,带来的衍生功能

项目状态

正常维护。应用于部分公司线上环境。

  • 已测试环境
    • Python 2.7, 3.4+
    • MySQL 5.6, 5.7

安装

shell> git clone https://github.com/danfengcao/binlog2sql.git && cd binlog2sql
shell> pip install -r requirements.txt

 

git与pip的安装问题请自行搜索解决。

使用

MySQL server必须设置以下参数:

[mysqld]
server_id = 1
log_bin = /var/log/mysql/mysql-bin.log
max_binlog_size = 1G
binlog_format = row
binlog_row_image = full

 

user需要的最小权限集合:

select, super/replication client, replication slave
建议授权
GRANT SELECT, REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO

 

权限说明

  • select:需要读取server端information_schema.COLUMNS表,获取表结构的元信息,拼接成可视化的sql语句
  • super/replication client:两个权限都可以,需要执行'SHOW MASTER STATUS', 获取server端的binlog列表
  • replication slave:通过BINLOG_DUMP协议获取binlog内容的权限

基本用法

解析出标准SQL

shell> python binlog2sql.py -h127.0.0.1 -P3306 -uadmin -p'admin' -dtest -t test3 test4 --start-file='mysql-bin.000002'
输出:
INSERT INTO `test`.`test3`(`addtime`, `data`, `id`) VALUES ('2016-12-10 13:03:38', 'english', 4); #start 570 end 736UPDATE `test`.`test3` SET `addtime`='2016-12-10 12:00:00', `data`='中文', `id`=3 WHERE `addtime`='2016-12-10 13:03:22' AND `data`='中文' AND `id`=3 LIMIT 1; #start 763 end 954DELETE FROM `test`.`test3` WHERE `addtime`='2016-12-10 13:03:38' AND `data`='english' AND `id`=4 LIMIT 1; #start 981 end 1147

 

解析出回滚SQL

shell> python binlog2sql.py --flashback -h127.0.0.1 -P3306 -uadmin -p'admin' -dtest -ttest3 --start-file='mysql-bin.000002' --start-position=763 --stop-position=1147
输出:
INSERT INTO `test`.`test3`(`addtime`, `data`, `id`) VALUES ('2016-12-10 13:03:38', 'english', 4); #start 981 end 1147UPDATE `test`.`test3` SET `addtime`='2016-12-10 13:03:22', `data`='中文', `id`=3 WHERE `addtime`='2016-12-10 12:00:00' AND `data`='中文' AND `id`=3 LIMIT 1; #start 763 end 954

 

选项

mysql连接配置

-h host; -P port; -u user; -p password

解析模式

--stop-never 持续解析binlog。可选。默认False,同步至执行命令时最新的binlog位置。

-K, --no-primary-key 对INSERT语句去除主键。可选。默认False

-B, --flashback 生成回滚SQL,可解析大文件,不受内存限制。可选。默认False。与stop-never或no-primary-key不能同时添加。

--back-interval -B模式下,每打印一千行回滚SQL,加一句SLEEP多少秒,如不想加SLEEP,请设为0。可选。默认1.0。

解析范围控制

--start-file 起始解析文件,只需文件名,无需全路径 。必须。

--start-position/--start-pos 起始解析位置。可选。默认为start-file的起始位置。

--stop-file/--end-file 终止解析文件。可选。默认为start-file同一个文件。若解析模式为stop-never,此选项失效。

--stop-position/--end-pos 终止解析位置。可选。默认为stop-file的最末位置;若解析模式为stop-never,此选项失效。

--start-datetime 起始解析时间,格式'%Y-%m-%d %H:%M:%S'。可选。默认不过滤。

--stop-datetime 终止解析时间,格式'%Y-%m-%d %H:%M:%S'。可选。默认不过滤。

对象过滤

-d, --databases 只解析目标db的sql,多个库用空格隔开,如-d db1 db2。可选。默认为空。

-t, --tables 只解析目标table的sql,多张表用空格隔开,如-t tbl1 tbl2。可选。默认为空。

--only-dml 只解析dml,忽略ddl。可选。默认False。

--sql-type 只解析指定类型,支持INSERT, UPDATE, DELETE。多个类型用空格隔开,如--sql-type INSERT DELETE。可选。默认为增删改都解析。用了此参数但没填任何类型,则三者都不解析。



限制(对比mysqlbinlog)

  • mysql server必须开启,离线模式下不能解析
  • 参数  binlog_row_image 必须为FULL,暂不支持MINIMAL
  • 解析速度不如mysqlbinlog

优点(对比mysqlbinlog)

  • 纯Python开发,安装与使用都很简单
  • 自带flashback、no-primary-key解析模式,无需再装补丁
  • flashback模式下,更适合 闪回实战
  • 解析为标准SQL,方便理解、筛选
  • 代码容易改造,可以支持更多个性化解析


About Me

........................................................................................................................

● 本文作者:小麦苗,部分内容整理自网络,若有侵权请联系小麦苗删除

● 本文在itpub、博客园、CSDN和个人微 信公众号( xiaomaimiaolhr)上有同步更新

● 本文itpub地址: http://blog.itpub.net/26736162

● 本文博客园地址: http://www.cnblogs.com/lhrbest

● 本文CSDN地址: https://blog.csdn.net/lihuarongaini

● 本文pdf版、个人简介及小麦苗云盘地址: http://blog.itpub.net/26736162/viewspace-1624453/

● 数据库笔试面试题库及解答: http://blog.itpub.net/26736162/viewspace-2134706/

● DBA宝典今日头条号地址: http://www.toutiao.com/c/user/6401772890/#mid=1564638659405826

........................................................................................................................

● QQ群号: 230161599(满) 、618766405

● 微 信群:可加我微 信,我拉大家进群,非诚勿扰

● 联系我请加QQ好友 ( 646634621 ),注明添加缘由

● 于 2019-07-01 06:00 ~ 2019-07-31 24:00 在西安完成

● 最新修改时间:2019-07-01 06:00 ~ 2019-07-31 24:00

● 文章内容来源于小麦苗的学习笔记,部分整理自网络,若有侵权或不当之处还请谅解

● 版权所有,欢迎分享本文,转载请保留出处

........................................................................................................................

● 小麦苗的微店: https://weidian.com/s/793741433?wfr=c&ifr=shopdetail

● 小麦苗出版的数据库类丛书: http://blog.itpub.net/26736162/viewspace-2142121/

● 小麦苗OCP、OCM、高可用网络班: http://blog.itpub.net/26736162/viewspace-2148098/

● 小麦苗腾讯课堂主页: https://lhr.ke.qq.com/

........................................................................................................................

使用 微 信客户端扫描下面的二维码来关注小麦苗的微 信公众号( xiaomaimiaolhr)及QQ群(DBA宝典)、添加小麦苗微 信, 学习最实用的数据库技术。

........................................................................................................................

欢迎与我联系

 

 




来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/26736162/viewspace-2651416/,如需转载,请注明出处,否则将追究法律责任。

标签:闪回,start,--,mysql,binlog2sql,python,usr,MySQL
来源: https://blog.51cto.com/lhrbest/2705856

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有