mysql 闪回到指定时间_MySQL数据闪回工具

文章目录

一、 MySQL闪回工具

1.1 binlog2sql

1.2 MyFlash

二、总结

一、 MySQL闪回工具

1.1 binlog2sql

binlog2sql安装包及依赖包

asn1crypto-master.zip cairocffi-master.zip cryptography-master.zip ipaddress-master.zip pycparser-master.zip PyMySQL-master.zip setuptools-40.6.2.zip binlog2sql-master.zip cffi-1.11.5.tar.gz enum34-master.zip pip-18.1.tar.gz python-mysql-replication-master.zip wheel-0.32.3.tar.gz

使用要求

#my.cnf参数设置

server_id = 33061

log_bin = /var/log/mysql/mysql-bin.log

max_binlog_size = 1G

binlog_format = row

binlog_row_image = full

用户最小权限:select,super,replication client,replication slave

* select:需要读取server端information_schema.COLUMNS表,获取表结构的元信息,拼接成可视化的sql语句

* super/replication client:两个权限都可以,需要执行'SHOW MASTER STATUS', 获取server端的binlog列表

* replication slave:通过BINLOG_DUMP协议获取binlog内容的权限

基本用法

解析出标准SQL:python binlog2sql.py -h -P -u -p -d -t --start-file= --start-position=

解析出回滚SQL:python binlog2sql.py -h -P -u -p -d -t --start-file= --start-position= -B

**命令选项**

mysql连接配置:-h host; -P port; -u user; -p password

**解析模式 **

* --stop-never 持续同步binlog。可选。不加则同步至执行命令时最新的binlog位置。

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

* -B, --flashback 生成回滚语句,可解析大文件,不受内存限制,每打印一千行加一句SLEEP SELECT(1)。可选。与stop-never或no-primary-key不能同时添加。

**解析范围控制**

* --start-file 起始解析文件。必须。

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

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

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

* --start-datetime 从哪个时间点的binlog开始解析,格式必须为datetime,如'2016-11-11 11:11:11'。可选。默认不过滤。

* --stop-datetime 到哪个时间点的binlog停止解析,格式必须为datetime,如'2016-11-11 11:11:11'。可选。默认不过滤。

**对象过滤**

* -d, --databases 只输出目标db的sql。可选。默认为空。

* -t, --tables 只输出目标tables的sql。可选。默认为空。

注意点

* 闪回的目标:快速筛选出真正需要回滚的数据。

* 先根据库、表、时间做一次过滤,再根据位置做更准确的过滤。

* 由于数据一直在写入,要确保回滚sql中不包含其他数据。可根据是否是同一事务、误操作行数、字段值的特征等等来帮助判断。

* 如果只回滚某张表,并且该表有关联表,关联表并不会被回滚,需与业务方沟通清楚。

* 哪些数据需要回滚,让业务方来判断!

1.2 MyFlash

参数

全部参数请通过--help查看,以下只列举部分常用参数。

databaseNames

指定需要回滚的数据库名。多个数据库可以用“,”隔开。如果不指定该参数,相当于指定了所有数据库。

tableNames

指定需要回滚的表名。多个表可以用“,”隔开。如果不指定该参数,相当于指定了所有表。

start-datetime

指定回滚的开始时间。注意格式必须是 %Y-%m-%d %H:%M:%S。 如不指定,则不限定时间

stop-datetime

指定回滚的结束时间。注意格式必须是 %Y-%m-%d %H:%M:%S。 如不指定,则不限定时间

sqlTypes

指定需要回滚的sql类型。目前支持的过滤类型是INSERT, UPDATE ,DELETE。多个类型可以用“,”隔开。

binlogFileNames

指定需要回滚的binlog文件,目前只支持单个文件,后续会增加多个文件支持。

outBinlogFileNameBase

指定输出的binlog文件前缀,如不指定,则默认为binlog_output_base.flashback。

示例

回滚bin.000009中,所有与Messages_Center 表上delete操作有关的SQL,时间为‘2018-04-17 15:00:00‘ 之后。

1.过滤并重新生成回滚二进制日志

./flashback --databaseNames stdzwfw9release --tableNames Messages_Center --start-datetime 2018-04-17 15:00:00 --sqlTypes DELETE --binlogFileName bin.000009

2.应用生成的回滚日志

mysqlbinlog binlog_output_base.flashback | mysql -h-u-p

二、总结

对于MySQL来讲,数据闪回的方式一共有以下几种:

mysqlbinlog工具配合sed、awk。该方式先将binlog解析成类SQL的文本,然后使用sed、awk把类SQL文本转换成真正的SQL。但是该方式在SQL语句复杂的时候存在出错概率。

使用binlog2sql成熟工具,但是binlog2sql工具过滤选项支持较差,需要结合awk、sed等工具进行筛选,并且依赖MySQL server。

使用MyFlash工具,MyFlash不依赖于MySQL Server,过滤性好,但是解析出来的依旧为binlog文件,易读性差,业务确定不方便,需要用mysqlbinlog配合解决。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值