iis服务器助手广告广告
返回顶部
首页 > 资讯 > 数据库 >MySQL--------基于binlog实现闪回最佳实战
  • 741
分享到

MySQL--------基于binlog实现闪回最佳实战

2024-04-02 19:04:59 741人浏览 安东尼
摘要

1. 背景   * 为了数据安全,搭建了主从。实时主从备份只能防止硬件问题,比如主库的硬盘损坏。但对于误操作,则无能为力。比如在主库误删一张表,或者一个update语

1. 背景

   * 为了数据安全,搭建了主从。实时主从备份只能防止硬件问题,比如主库的硬盘损坏。但对于误操作,则无能为力。比如在主库误删一张表,或者一个update语句没有指定where条件,导致全表被更新。当操作被同步到从库上后,则主从都“回天无力”。

   * 闪回用于快速恢复由于误操作丢失的数据。在DBA误操作时,可以把数据库恢复到以前某个时间点(或者说某个binlog的某个pos)。比如忘了带where条件的update、delete操作,传统的恢复方式是利用全备+二进制日志前滚进行恢复,相比于传统的全备+增备,flashback显然更为快速、简单。

MySQL--------基于binlog实现闪回最佳实战

2. 测试环境

Mysql> show variables like 'version';
+---------------+------------+
| Variable_name | Value      |
+---------------+------------+
| version       | 5.6.36-log |
+---------------+------------+
1 row in set (0.03 sec)

mysql> show variables like 'datadir';
+---------------+--------------------+
| Variable_name | Value              |
+---------------+--------------------+
| datadir       | /data/mysql_data6/ |
+---------------+--------------------+
1 row in set (0.00 sec)

mysql> show variables like 'log_bin';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| log_bin       | ON    |
+---------------+-------+
1 row in set (0.00 sec)

mysql> show variables like 'binlog_fORMat';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| binlog_format | ROW   |
+---------------+-------+
1 row in set (0.00 sec)

mysql> show variables like 'binlog_row_p_w_picpath';
+------------------+-------+
| Variable_name    | Value |
+------------------+-------+
| binlog_row_p_w_picpath | FULL  |
+------------------+-------+
1 row in set (0.00 sec)


3. 闪回实战

  * 创建数据库测试表,并插入数据

mysql> create table users(
    -> id BIGINT NOT NULL AUTO_INCREMENT,
    -> name VARCHAR(255) NOT NULL,
    -> sex ENUM('M', 'F') NOT NULL DEFAULT 'M',
    -> age INT UNSIGNED NOT NULL DEFAULT '0',
    -> PRIMARY KEY (id)
    -> )ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
Query OK, 0 rows affected (0.04 sec)

mysql> insert into users values(null, 'tom', 'M', 25), (null, 'jak', 'F', 32), (null, 'ses', 'M', 45), (null, 'lisea', 'M', 35);
Query OK, 4 rows affected (0.13 sec)
Records: 4  Duplicates: 0  Warnings: 0

mysql> select * from users;
+----+-------+-----+-----+
| id | name  | sex | age |
+----+-------+-----+-----+
|  1 | tom   | M   |  25 |
|  2 | jak   | F   |  32 |
|  3 | ses   | M   |  45 |
|  4 | lisea | M   |  35 |
+----+-------+-----+-----+
4 rows in set (0.00 sec)


   * 下载闪回工具binlog2sql[ 由上海美团DBA团队出品 ]

[root@MySQL ~]# git clone https://GitHub.com/danfenGCao/binlog2sql.git
Initialized empty Git repository in /root/binlog2sql/.git/
remote: Counting objects: 244, done.
remote: Total 244 (delta 0), reused 0 (delta 0), pack-reused 244
Receiving objects: 100% (244/244), 121.72 KiB | 27 KiB/s, done.
Resolving deltas: 100% (124/124), done.


   * 安装相关依赖

[root@MySQL ~]# yum install pip -y
[root@MySQL ~]# pip install --upgrade pip
[root@MySQL ~]# pip install -r binlog2sql/requirements.txt


   * 提前刷新binlog [ 测试中好区分文件 ]

mysql> flush logs;
Query OK, 0 rows affected (0.02 sec)


   * 查看当前binlog信息

mysql> show master status;
+------------+----------+--------------+------------------+-------------------------------------------+
| File       | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set                         |
+------------+----------+--------------+------------------+-------------------------------------------+
| bin.000006 |      191 |              |                  | c7f82640-6b2d-11e7-9316-000c29f0b169:1-22 |
+------------+----------+--------------+------------------+-------------------------------------------+
1 row in set (0.01 sec)


   * 误操作,delete没带where条件

mysql> delete from users;
Query OK, 4 rows affected (0.01 sec)


   * binlog2sql工具通过文件输出操作信息,定位SQL开始位置与结束位置

   可通过--start-datetime与--stop-datetime定位时间

     由此得到开始position为239,结束position为483

[root@MySQL ~]# python binlog2sql/binlog2sql/binlog2sql.py  -hlocalhost -P3306 -uroot -p'123' -dmytest -tusers --start-file='bin.000006' 
DELETE FROM `mytest`.`users` WHERE `age`=25 AND `sex`='M' AND `id`=1 AND `name`='tom' LIMIT 1; #start 239 end 483 time 2017-07-19 01:02:49
DELETE FROM `mytest`.`users` WHERE `age`=32 AND `sex`='F' AND `id`=2 AND `name`='jak' LIMIT 1; #start 239 end 483 time 2017-07-19 01:02:49
DELETE FROM `mytest`.`users` WHERE `age`=45 AND `sex`='M' AND `id`=3 AND `name`='ses' LIMIT 1; #start 239 end 483 time 2017-07-19 01:02:49
DELETE FROM `mytest`.`users` WHERE `age`=35 AND `sex`='M' AND `id`=4 AND `name`='lisea' LIMIT 1; #start 239 end 483 time 2017-07-19 01:02:49


   * binlog2sql通过flashback生成回滚SQL

[root@MySQL ~]# Python binlog2sql/binlog2sql/binlog2sql.py -hlocalhost -P3306 -uroot -p'123' -dmytest -tusers --start-file='bin.000006' --start-position=239 --stop-position=483 -B > rollback.sql


   * 导入回滚SQL [ 导入前检查SQL语句是否正常 ]

[root@MySQL ~]# mysql -hlocalhost -uroot -p'123' < rollback.sql


   * 查看

mysql> select * from mytest.users;
+----+-------+-----+-----+
| id | name  | sex | age |
+----+-------+-----+-----+
|  1 | tom   | M   |  25 |
|  2 | jak   | F   |  32 |
|  3 | ses   | M   |  45 |
|  4 | lisea | M   |  35 |
+----+-------+-----+-----+
4 rows in set (0.00 sec)

 

4. 总结

以需求驱动技术,技术本身没有优略之分,只有业务之分。

您可能感兴趣的文档:

--结束END--

本文标题: MySQL--------基于binlog实现闪回最佳实战

本文链接: https://www.lsjlt.com/news/38862.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Flink CDC 基于mysql binlog 实时同步mysql表
    环境说明: flink 1.15.2 mysql 版本5.7    注意:需要开启binlog,因为增量同步是基于binlog捕获数据 windows11 IDEA 本地运行 先上官网使用说明和案例:MySQL CDC Connector ...
    99+
    2023-09-10
    flink mysql 数据库
  • 基于javax.validation结合spring的最佳实践
    前言 本人先将用到的配置、工具类贴出来,然后一步步告诉大家怎么使用 JSR303 是一套JavaBean参数校验的标准,它定义了很多常用的校验注解,我们可以直接将这些注解加在我们Ja...
    99+
    2024-04-02
  • Java基于Netty实现Httpserver的实战
    目录HTTP协议基础知识Netty的http协议栈基于Netty实现http serverHTTP协议基础知识 HTTP(超文本传输协议,英文:HyperText Transfer...
    99+
    2024-04-02
  • 基于Canal以及消息队列实现MySQL的Binlog近实时同步
    基于Canal以及消息队列实现MySQL的Binlog近实时同步 1.canal的应用场景 目前普遍基于日志增量订阅和消费的业务,主要包括 基于数据库增量日志解析,提供增量数据订阅和消费数据库镜像数据库实时备份索引构建和实时维护(拆分异构索...
    99+
    2023-08-21
    mysql 数据库 java
  • 基于numpy实现逻辑回归
    本文实例为大家分享了基于numpy实现逻辑回归的具体代码,供大家参考,具体内容如下 交叉熵损失函数;sigmoid激励函数基于numpy的逻辑回归的程序如下: import num...
    99+
    2024-04-02
  • 基于Pytorch实现逻辑回归
    本文实例为大家分享了Pytorch实现逻辑回归的具体代码,供大家参考,具体内容如下 1.逻辑回归  线性回归表面上看是“回归问题”,实际上处理的问题...
    99+
    2024-04-02
  • 基于OGG实现MySQL实时同步
    📢📢📢📣📣📣 哈喽!大家好,我是【IT邦德】,江湖人称jeames007,10余年DBA及大数据工作经验 一位上进心十足的【大数据领域博主】!😜😜😜 中国DBA联盟(ACDU)成员,目前服务于工业互联网 擅长主流Oracle、MySQL...
    99+
    2023-12-22
    mysql 数据库
  • OpenCV实战之基于Hu矩实现轮廓匹配
    目录前言一、查找轮廓二、计算Hu矩三、显示效果四、源码总结前言 本文将使用OpenCV C++ 基于Hu矩进行轮廓匹配。 一、查找轮廓 原图 测试图 vector<vect...
    99+
    2024-04-02
  • Python基于PyTorch实现卷积神经网络回归模型(CNN回归算法)项目实战
    说明:这是一个机器学习实战项目(附带数据+代码+文档+视频讲解),如需数据+代码+文档+视频讲解可以直接到文章最后获取。   1.项目背景 卷积神经网络,简称为卷积网络,与普通神经网络的区别是它的卷积层内的神经元只覆盖输入特征局部范...
    99+
    2023-09-18
    python pytorch cnn 卷积神经网络回归模型 深度学习
  • Python基于PyTorch实现循环神经网络回归模型(LSTM回归算法)项目实战
    说明:这是一个机器学习实战项目(附带数据+代码+文档+视频讲解),如需数据+代码+文档+视频讲解可以直接到文章最后获取。 1.项目背景 LSTM网络是目前更加通用的循环神经网络结构,全称为Long Short-Term Memor...
    99+
    2023-10-01
    python rnn pytorch 循环神经网络回归模型 深度学习
  • 基于Python实现五子棋-(人机对战)
    目录前言人人对战动态演示源码分享人机对战前言 快520了,咱们来玩玩五子棋陶冶情操。快拿这个和你女朋友去对线。(分了别来找我哇)。多的不说直接进入正题 人人对战 游戏规则:p1为黑子...
    99+
    2024-04-02
  • Java实战之基于TCP实现简单聊天程序
    目录一、如何实现TCP通信二、编写C/S架构聊天程序1.编写服务器端程序 - Server.java2.编写客户端程序 - Client.java3.测试服务器端与客户端能否通信4....
    99+
    2024-04-02
  • 基于sklearn实现LDA主题模型(附实战案例)
    目录 LDA主题模型 1.LDA主题模型原理 2.LDA主题模型推演过程 3.sklearn实现LDA主题模型(实战) 3.1数据集介绍 3.2导入数据 3.3分词处理  3.4文本向量化 3.5构建LDA模型 3.6LDA模型可视化  ...
    99+
    2023-09-09
    数据挖掘 数据分析 python sklearn
  • 基于Python实现俄罗斯方块躲闪小游戏
    俄罗斯方块是一款经典的益智游戏,最早由俄罗斯人阿列克谢·帕基特诺夫在1984年开发。据说他的灵感来自于儿时拼积木的经历。这款游戏最初在苏联的计算机上流行开来,后来又在世...
    99+
    2023-05-15
    Python俄罗斯方块躲闪游戏 Python方块躲闪游戏 Python 游戏
  • pytorch实战7:手把手教你基于pytorch实现VGG16
    手把手教你基于pytorch实现VGG16(长文) 前言 ​ 最近在看经典的卷积网络架构,打算自己尝试复现一下,在此系列文章中,会参考很多文章,有些已经忘记了出处,所以就不贴链接了,希望大家理解...
    99+
    2023-09-06
    pytorch 深度学习 python
  • 基于Python+Pygame实现变异狗大战游戏
    目录前言一、准备环境 二、代码展示三、效果展示前言 只有你想不到,没有我找不到写不了的好游戏! 哈喽。我是你们的栗子同学啦~ 今天小编去了我朋友家里玩儿,看到了一个敲可爱的...
    99+
    2023-03-03
    Python Pygame变异狗游戏 Python Pygame变异狗 Python Pygame 游戏
  • 基于JS如何实现飞机大战游戏
    今天小编给大家分享一下基于JS如何实现飞机大战游戏的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。演示技术栈(function...
    99+
    2023-07-02
  • 基于C#模拟实现回合制游戏
    目录前言规则简介功能介绍实现代码百度网盘链接前言 文章开始把我喜欢的这句话送个大家:这个世界上还有什么比自己写的代码运行在一亿人的电脑上更酷的事情吗,如果有那就是让这个数字再扩大十倍...
    99+
    2024-04-02
  • 基于Python怎么实现俄罗斯方块躲闪小游戏
    这篇“基于Python怎么实现俄罗斯方块躲闪小游戏”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“基于Python怎么实现俄罗...
    99+
    2023-07-05
  • Java实战之基于swing的QQ邮件收发功能实现
    目录一、电子邮件详解二、邮件发送三、邮件接收四、导包一、电子邮件详解 假设自己的电子邮件是me@163.com,对方的邮件是you@163.com 我们编写好文件填写好对...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作