送给mysql dba们一颗速效救心丸,闪回之binlog2sql

2023-12-13 08:58

本文主要是介绍送给mysql dba们一颗速效救心丸,闪回之binlog2sql,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

做了多年oracle dba,对oralce的闪回是一往情深.如今搞起了mysql,找了个不错的闪回工具,分享给大家吧。


1.下载
https://github.com/danfengcao/binlog2sql
http://rpmfind.net
Search: python-pip
pip 是一个Python包管理工具,主要是用于安装 PyPI 上的软件包。


2. 安装


# yum install python-setuptools -y
# rpm -ivh python-pip-7.1.0-1.el6.noarch.rpm   --rpmfind.net 下载上传安装
# pip install PyMySQL
# pip install -r requirments.txt
# pwd
/usr/local/binlog2sql-master/binlog2sql-master
# less README.md  --这个必须要看个十遍,八遍的才行


3. 测试用例


(root@localhost) [kk]> create database roidba;
Query OK, 1 row affected (0.00 sec)
  
(root@localhost) [kk]> use roidba
Database changed
(root@localhost) [roidba]> create table roidba ( id int,name varchar(10));
Query OK, 0 rows affected (0.15 sec)
  
(root@localhost) [roidba]> insert into roidba values(1,'mysql');
Query OK, 1 row affected (0.00 sec)
  
(root@localhost) [roidba]> insert into roidba values(2,'oracle');
Query OK, 1 row affected (0.00 sec)
  
(root@localhost) [roidba]> insert into roidba values(3,'mariadb');
Query OK, 1 row affected (0.00 sec)
(root@localhost) [roidba]> delete from roidba;
Query OK, 3 rows affected (0.01 sec)
(root@localhost) [roidba]> select * from roidba;
Empty set (0.00 sec)


4. 创建闪回用户


(root@localhost) [roidba]> GRANT SELECT,REPLICATION SLAVE,REPLICATION CLIENT ON *.* TO flashback@'%' identified by 'flashback';  
Query OK, 0 rows affected (0.04 sec)
  
(root@localhost) [roidba]> flush privileges;
Query OK, 0 rows affected (0.05 sec)
 
5. 闪回的要求


1)知道大概的时间点2017-01-12 18:00 ~ 2017-01-12 18:00
2)知道binlog信息
(root@localhost) [roidba]> show binary logs;
+------------------+----------------+
| Log_name  | File_size |
+------------------+----------------+
| mysql-bin.000001 |3828 |
| mysql-bin.000002 | 238 |
| mysql-bin.000003 |1231 |
+------------------+---------------+
 
6. 解析


--binlog中解析的sql
[root@mysql-121 binlog2sql-master]# python binlog2sql/binlog2sql.py -h192.168.80.132 -P3306 -uflashback -pflashback -droidba -troidba --start-file='mysql-bin.000003' --start-datetime='2017-01-12 18:00:00' --stop-datetime='2017-01-12 18:30:00'
INSERT INTO `roidba`.`roidba`(`id`, `name`) VALUES (1, 'mysql'); #start 239 end 413 time 2017-01-12 18:10:54
INSERT INTO `roidba`.`roidba`(`id`, `name`) VALUES (2, 'oracle'); #start 492 end 667 time 2017-01-12 18:11:00
INSERT INTO `roidba`.`roidba`(`id`, `name`) VALUES (3, 'mariadb'); #start 746 end 922 time 2017-01-12 18:11:08
DELETE FROM `roidba`.`roidba` WHERE `id`=1 AND `name`='mysql' LIMIT 1; #start 1001 end 1200 time 2017-01-12 18:11:14
DELETE FROM `roidba`.`roidba` WHERE `id`=2 AND `name`='oracle' LIMIT 1; #start 1001 end 1200 time 2017-01-12 18:11:14
DELETE FROM `roidba`.`roidba` WHERE `id`=3 AND `name`='mariadb' LIMIT 1; #start 1001 end 1200 time 2017-01-12 18:11:14
USE roidba;
GRANT SELECT, REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'flashback'@'%' IDENTIFIED BY PASSWORD '*6DE874C277DDA35061BD526FB38B6A3C8B3A9254';
USE roidba;
flush privileges;
 
7. 闪回


--闪回sql
# python binlog2sql/binlog2sql.py -h192.168.80.132 -P3306 -uflashback -p'flashback' -droidba -troidba --start-file='mysql-bin.000003' --start-position=1001 --stop-position=1200 -B > rollback.sql
[root@mysql-121 binlog2sql-master]# less rollback.sql
INSERT INTO `roidba`.`roidba`(`id`, `name`) VALUES (3, 'mariadb'); #start 1001 end 1200 time 2017-01-12 18:11:14
INSERT INTO `roidba`.`roidba`(`id`, `name`) VALUES (2, 'oracle'); #start 1001 end 1200 time 2017-01-12 18:11:14
INSERT INTO `roidba`.`roidba`(`id`, `name`) VALUES (1, 'mysql'); #start 1001 end 1200 time 2017-01-12 18:11:14
--开始回滚
[root@mysql-121 binlog2sql-master]# mysql -ubackup -pbackup -h192.168.80.132 <./rollback.sql   --具有插入权限才可以
8.验证
自己多测试,多动手,看别人做很简单,其实真的自己上手就不一定了,少说多做,少扯淡。

这篇关于送给mysql dba们一颗速效救心丸,闪回之binlog2sql的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/487860

相关文章

MySQL中删除重复数据SQL的三种写法

《MySQL中删除重复数据SQL的三种写法》:本文主要介绍MySQL中删除重复数据SQL的三种写法,文中通过代码示例讲解的非常详细,对大家的学习或工作有一定的帮助,需要的朋友可以参考下... 目录方法一:使用 left join + 子查询删除重复数据(推荐)方法二:创建临时表(需分多步执行,逻辑清晰,但会

Mysql 中的多表连接和连接类型详解

《Mysql中的多表连接和连接类型详解》这篇文章详细介绍了MySQL中的多表连接及其各种类型,包括内连接、左连接、右连接、全外连接、自连接和交叉连接,通过这些连接方式,可以将分散在不同表中的相关数据... 目录什么是多表连接?1. 内连接(INNER JOIN)2. 左连接(LEFT JOIN 或 LEFT

mysql重置root密码的完整步骤(适用于5.7和8.0)

《mysql重置root密码的完整步骤(适用于5.7和8.0)》:本文主要介绍mysql重置root密码的完整步骤,文中描述了如何停止MySQL服务、以管理员身份打开命令行、替换配置文件路径、修改... 目录第一步:先停止mysql服务,一定要停止!方式一:通过命令行关闭mysql服务方式二:通过服务项关闭

SQL Server数据库磁盘满了的解决办法

《SQLServer数据库磁盘满了的解决办法》系统再正常运行,我还在操作中,突然发现接口报错,后续所有接口都报错了,一查日志发现说是数据库磁盘满了,所以本文记录了SQLServer数据库磁盘满了的解... 目录问题解决方法删除数据库日志设置数据库日志大小问题今http://www.chinasem.cn天发

mysql主从及遇到的问题解决

《mysql主从及遇到的问题解决》本文详细介绍了如何使用Docker配置MySQL主从复制,首先创建了两个文件夹并分别配置了`my.cnf`文件,通过执行脚本启动容器并配置好主从关系,文中还提到了一些... 目录mysql主从及遇到问题解决遇到的问题说明总结mysql主从及遇到问题解决1.基于mysql

MySQL的索引失效的原因实例及解决方案

《MySQL的索引失效的原因实例及解决方案》这篇文章主要讨论了MySQL索引失效的常见原因及其解决方案,它涵盖了数据类型不匹配、隐式转换、函数或表达式、范围查询、LIKE查询、OR条件、全表扫描、索引... 目录1. 数据类型不匹配2. 隐式转换3. 函数或表达式4. 范围查询之后的列5. like 查询6

Linux下MySQL8.0.26安装教程

《Linux下MySQL8.0.26安装教程》文章详细介绍了如何在Linux系统上安装和配置MySQL,包括下载、解压、安装依赖、启动服务、获取默认密码、设置密码、支持远程登录以及创建表,感兴趣的朋友... 目录1.找到官网下载位置1.访问mysql存档2.下载社区版3.百度网盘中2.linux安装配置1.

PostgreSQL如何用psql运行SQL文件

《PostgreSQL如何用psql运行SQL文件》文章介绍了两种运行预写好的SQL文件的方式:首先连接数据库后执行,或者直接通过psql命令执行,需要注意的是,文件路径在Linux系统中应使用斜杠/... 目录PostgreSQ编程L用psql运行SQL文件方式一方式二总结PostgreSQL用psql运

SQL中的外键约束

外键约束用于表示两张表中的指标连接关系。外键约束的作用主要有以下三点: 1.确保子表中的某个字段(外键)只能引用父表中的有效记录2.主表中的列被删除时,子表中的关联列也会被删除3.主表中的列更新时,子表中的关联元素也会被更新 子表中的元素指向主表 以下是一个外键约束的实例展示

基于MySQL Binlog的Elasticsearch数据同步实践

一、为什么要做 随着马蜂窝的逐渐发展,我们的业务数据越来越多,单纯使用 MySQL 已经不能满足我们的数据查询需求,例如对于商品、订单等数据的多维度检索。 使用 Elasticsearch 存储业务数据可以很好的解决我们业务中的搜索需求。而数据进行异构存储后,随之而来的就是数据同步的问题。 二、现有方法及问题 对于数据同步,我们目前的解决方案是建立数据中间表。把需要检索的业务数据,统一放到一张M