mysql通过binlog做数据恢复

1 介绍

binlog(二进制日志)在 MySQL 中具有非常重要的作用。它记录了数据库的所有更改操作,主要用于数据恢复、复制和审计等方面。以下是 binlog 的主要作用:

1.数据恢复
binlog 可以用于恢复数据库中的数据。当数据库发生故障时,可以通过应用 binlog 来恢复数据到某个特定的时间点或事务
2.主从复制
binlog 是 MySQL 主从复制的基础。主服务器上的所有更改都会记录在 binlog 中,从服务器通过读取 binlog 来同步数据。这样可以实现数据的高可用性和负载均衡。
3.审计
binlog 记录了所有的数据更改操作,可以用来进行审计。例如,可以查看哪些用户在何时进行了哪些更改,这对于安全性和合规性非常重要。
4.故障诊断
binlog 可以帮助诊断数据库中的问题。通过查看 binlog 文件,可以了解数据库中发生了哪些具体的更改操作,从而定位问题原因。
5.数据迁移
binlog 可以用于数据迁移。通过读取 binlog 文件,可以在新的数据库实例上应用相同的更改,从而实现数据迁移。
6.数据一致性
binlog 可以保证数据的一致性。在分布式系统中,通过应用 binlog 可以确保多个节点之间的数据一致。
7.事务回滚
虽然 binlog 主要用于前向应用(即恢复到某个时间点),但在某些情况下也可以用于事务回滚。例如,在某些故障场景下,可以使用 binlog 来回滚部分事务。
8.数据备份
binlog 可以配合定期的全量备份来实现增量备份。通过结合全量备份和 binlog 文件,可以恢复到任意时间点的数据状态。

本文主要通过demo简单描述本地mysql(windows系统)如何配置和使用binlog做数据恢复。


2 演示

2.1 安装mysql

具体安装步骤可以参考我的上一篇文档。
https://blog.csdn.net/weixin_49702090/article/details/140555877

唯一差异是需要在 my.ini 配置文件中加上 binlog 的一些配置,以下是完整的 my.ini配置文件:

空行是为了给你们看方便,你们使用的时候最好不要有空行

[mysqld]
#设置3306端口
port=3306
#自定义设置mysql的安装目录,即解压mysql压缩包的目录
basedir=D:\\software\\1_mysql\\mysql-5.7.37-winx64
#自定义设置mysql数据库的数据存放目录
datadir=D:\\software\\1_mysql\\mysql-5.7.37-winx64\\data
#允许最大连接数
max_connections=200
#允许连接失败的次数,这是为了防止有人从该主机试图攻击数据库系统
max_connect_errors=10
#服务端使用的字符集默认为UTF-8
character-set-server=utf8mb4
#创建新表时将使用的默认存储引擎
default-storage-engine=INNODB
#创建新表时将使用的默认存储引擎
default-storage-engine=INNODB#开启binlog,不开启的话以下不需要配置
#如果用于复制环境,每个服务器的 server-id 必须唯一
server-id=1
#指定二进制日志的存储位置和前缀
log-bin=D:\\software\\1_mysql\\binlog
#同步二进制日志到磁盘的频率,值为 0 表示不强制同步
sync_binlog=1
#设置二进制日志记录的格式为行格式
binlog_format=ROW
#单个二进制日志文件的最大大小为1GB
max_binlog_size=1G
#二进制日志文件保存 7 天后自动删除
expire_logs_days=7[mysql]
#设置mysql客户端默认字符集
default-character-set=utf8mb4
[client]
#设置mysql客户端连接服务端时默认使用的端口和默认字符集
port=3306
default-character-set=utf8mb4

2.2 重启mysql,通过命令验证binlog是否配置生效

SHOW VARIABLES LIKE ‘log_bin’;

在这里插入图片描述
值 ON 表示生效。

生效后会生成一些binlog文件在本地,这些文件策略就在my.ini配置文件中,比如存放在哪里,保留的时间策略等。我使用binlog比较久,下面是我本地生成的一些binlog文件:
在这里插入图片描述

2.3 模拟数据

模拟建库建表,并分批次插入一些数据,到时候用来测试恢复插入的某一批数据。
最终删除所有数据 delete from 表名


以下过程开始恢复数据!!!

2.4. 确定上面插入数据过程 生成的binlog文件是哪个

通过生成的binlog文件的修改时间可以看到我在模拟数据的过程中,一些事务操作存在了 binlog.000009 这个文件下,以下操作我都基于binlog.000009 这个文件!!! 第一次启用 binlog 应该只有一个 binlog 文件,所以比较好确定。

2.5 分析binlog文件,找到要恢复的那一次insert的起始位置和结束位置

这里有两种方式 :

2.5.1 方式1,通过mysql命令直接查看起始&结束位置

mysql> show binlog events in ‘binlog.000009’ ;

在这里插入图片描述
在这里插入图片描述
可以通过 BEGIN 、COMMIT 看到,这一次操作在binlog中的起始位置和结束位置分别为: 1637 和 2385,记住这两个索引,恢复数据的时候我们仅恢复这一次的插入操作 。

2.5.2 方式2,通过阅读本地生成的binlog文件查找起始&结束位置

binlog文件(binlog.000009)是二进制文件,不能直接查看,所以我们得将二进制文件转换为可阅读的文本文件(.txt) 。

一、生成 txt 文件

重新打开一个DOS窗口,不要在mysql中执行。通过以下命令:
这里的路径根据你实际路径为准。

mysqlbinlog --no-defaults D:\software\1_mysql\binlog.000009 > D:\software\1_mysql\binlog000009.txt

可以检查下生成的txt文件是否存在。
在这里插入图片描述
二、分析 txt 文件

这里我就简单说一下关键的信息,太多了其实我也不懂,可以网上多搜搜。

在这里插入图片描述

这两种方式看起来,我们要恢复的那一批数据的起始索引和结束索引都是:1637 和 2385

2.6 根据binlog生成sql备份文件

说直白点就是在 binlog000009 把我们要恢复的那一批数据根据 起始索引 和 结束索引 摘出来,单独输出到一个文件中(D:\software\1_mysql\output.sql) ,lg_test 是我这次的测试数据库库名,你们改一下不能写错了。

mysqlbinlog --no-defaults D:\software\1_mysql\binlog.000009 --start-position=1637 --stop-position=2385 -d lg_test > D:\software\1_mysql\output.sql

生成的output.sql文件如下:
在这里插入图片描述
如果我们通过第二种方式解析binlog文件的话,可以完全打开两个文件对比下,看到我们要回滚的那部分操作已经被摘出来了!
在这里插入图片描述

2.7 回滚

需要在mysql中操作,注意mysql中的斜杠是 / 不要写错了.

mysql> source D:/software/1_mysql/output.sql ;

在这里插入图片描述

最后执行查询操作,看到数据已经恢复了。

2.8 恭喜完成!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/145420.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

分布式框架 - ZooKeeper

一、什么是微服务架构 1、单体架构 顾名思义一个软件系统只部署在一台服务器上。 ​ 在高并发场景中,比如电商项目,单台服务器往往难以支撑短时间内的大量请求,聪明的架构师想出了一个办法提高并发量:一台服务器不够就加一台&am…

微信小程序拨打电话点取消报错“errMsg“:“makePhoneCall:fail cancel“

问题:微信小程序中拨打电话点取消,控制台报错"errMsg":"makePhoneCall:fail cancel" 解决方法:在后面加上catch就可以解决这个报错 wx.makePhoneCall({phoneNumber: 181********}).catch((e) > {console.log(e) //用…

数据安全治理

数据安全治理 1.数据安全治理2.终端数据安全加密类权限控制类终端DLP类桌面虚拟化安全桌面 3.网络数据安全4.存储数据安全5.应用数据安全6.其他话题数据脱敏水印与溯源 7.UEBA8.CASB 1.数据安全治理 数据安全治理最为重要的是进行数据安全策略和流程制订。在企业或行业内经常发…

前端实用工具(二):编程规范化解决方案

目录 本地代码规范化工具 代码检测工具ESLint 代码格式化工具Prettier 远程代码规范化工具 远程提交规范化工具commitizen 提交规范检验工具commitlint husky 什么是git hooks commitlint安装 husky安装 检测代码提交规范 ESLint husky 自动修复格式错误lint-staged…

使用 Puppeteer-Cluster 和代理进行高效网络抓取: 完全指南

文章目录 一、介绍?二、什么是 Puppeteer-Cluster?三、为什么代理在网络抓取中很重要?四、 为什么使用带代理的 Puppeteer-Cluster?五、分步指南: 带代理的 Puppeteer 群集5.1. 步骤 1:安装所需程序库5.2. …

基于 ROS 的Terraform托管服务轻松部署ChatGLM2-6B

介绍 ChatGLM2-6B是开源中英双语对话模型ChatGLM-6B的第二代版本,在保留了初代模型对话流畅、部署门槛较低等众多优秀特性的基础上,ChatGLM2-6B具有更强大的性能、更长的上下文、更高效的推理等特性。 资源编排服务(Resource Orchestration…

C++入门 之 类和对象(下)

目录 一、初始化列表 二、隐式类型转换与explict 三、静态成员——static 四、友元 五、内部类 六、匿名对象 七.对象拷贝时的编译器优化 一、初始化列表 之前我们实现构造函数时,初始化成员变量主要使用函数体内赋值,构造函数初始化还有一种方式&…

闯关leetcode——66. Plus One

大纲 题目地址内容 解题代码地址 题目 地址 https://leetcode.com/problems/plus-one/description/ 内容 You are given a large integer represented as an integer array digits, where each digits[i] is the ith digit of the integer. The digits are ordered from mo…

pdf文件怎么直接翻译?使用这些工具让翻译变得简单

在全球化日益加深的职场环境中,处理外语PDF文件成为了许多职场人士面临的共同挑战。 面对这些“加密”的信息宝库,如何高效、准确地将英文pdf翻译成对应语言,成为了提升工作效率的关键。 以下是几款在PDF翻译领域表现出色的软件&#xff0c…

基于 UniApp 平台的学生闲置物品售卖小程序设计与实现

💗博主介绍💗:✌在职Java研发工程师、专注于程序设计、源码分享、技术交流、专注于Java技术领域和毕业设计✌ 温馨提示:文末有 CSDN 平台官方提供的老师 Wechat / QQ 名片 :) Java精品实战案例《700套》 2025最新毕业设计选题推荐…

寄存器二分频电路

verilog代码 module div2_clk ( input clk, input rst,output clk_div);reg clk_div_r; assign clk_div clk_div_r;always(posedge clk) beginif(rst)beginclk_div_r < 1b0;endelsebeginclk_di…

pytorch实现RNN网络

目录 1.导包 2. 加载本地文本数据 3.构建循环神经网络层 4.初始化隐藏状态state 5.创建随机的数据&#xff0c;检测一下代码是否能正常运行 6. 构建一个完整的循环神经网络 7.模型训练 8.个人知识点理解 1.导包 import torch from torch import nn from torch.nn imp…

API安全推荐厂商瑞数信息入选IDC《中国数据安全技术发展路线图》

近日&#xff0c;全球领先的IT研究与咨询公司IDC发布报告《IDC TechScape&#xff1a;中国数据安全技术发展路线图&#xff0c;2024》。瑞数信息凭借其卓越的技术实力和广泛的行业应用&#xff0c;被IDC评选为“增量型”技术曲线API安全的推荐厂商。 IDC指出&#xff0c;数据安…

Liveweb视频汇聚平台支持GB28181转RTMP、HLS、RTSP、FLV格式播放方案

GB28181协议凭借其在安防流媒体行业独有的大统一地位&#xff0c;目前已经在各种安防项目上使用。雪亮工程、幼儿园监控、智慧工地、物流监控等等项目上目前都需要接入安防摄像头或平台进行直播、回放。而GB28181协议作为国家推荐标准&#xff0c;目前基本所有厂家的安防摄像头…

Netty源码解析-请求处理与多路复用

Netty基本介绍&#xff0c;参考 Netty与网络编程 摘要 Netty源码系列-NioEventLoop 1.1 Netty给Channel分配Nio Event Loop的规则 看下图&#xff0c;EventLoopGroup是线程组&#xff0c;每个EventLoop是一个线程&#xff0c;那么线程处理请求是怎么分配的呢&#xff1f;我…

Docker 以外置数据库方式部署禅道

2.安装步骤 2.1.参考资料 禅道官网文档: https://www.zentao.net/book/zentaopms/docker-1111.html https://www.zentao.net/book/zentaopms/405.html 2.2.详细步骤 ssh 登录服务器创建目录 /opt/zentao /opt/zentao/data /opt/zentao/db cd /opt mkdir zentao mkdir zentao…

回归预测 | Matlab实现SSA-HKELM麻雀算法优化混合核极限学习机多变量回归预测

回归预测 | Matlab实现SSA-HKELM麻雀算法优化混合核极限学习机多变量回归预测 目录 回归预测 | Matlab实现SSA-HKELM麻雀算法优化混合核极限学习机多变量回归预测效果一览基本介绍程序设计参考资料 效果一览 基本介绍 1.Matlab实现SSA-HKELM麻雀算法优化混合核极限学习机多变量…

java -versionbash:/usr/lib/jvm/jdk1.8.0_162/bin/java:无法执行二进制文件:可执行文件格式错误

实验环境&#xff1a;Apple M1在VMwareFusion使用Utubun Jdk文件错误 &#xfffc; 尝试&#xff1a; 1、重新在网盘下载java1.8 2、在终端通过命令下载 3、确保 JDK 正确安装在系统中&#xff0c;可以通过 echo $JAVA_HOME 检查 JAVA_HOME 环境变量是否设置正确。 &#xfff…

十种果冻的做法

菠萝果冻 1.在菠萝的1/5处切开&#xff0c;切去顶做盖子用&#xff0c;用水果刀在四周划一圈使皮和果肉分离 2.注意底部切透了&#xff0c;用水果刀把菠萝肉挖出&#xff0c;菠萝肉切丁用盐水浸泡备用 3.把菠萝丁放入料理机中加入少许纯净水&#xff0c;打成菠萝汁备用 4.打好…

【学习笔记】数据结构(六 ②)

树和二叉树&#xff08;二&#xff09; 文章目录 树和二叉树&#xff08;二&#xff09;6.3.2 线索二叉树 6.4 树和森林6.4.1 树的存储结构6.4.2 森林与二叉树的转换6.4.3 树和森林的遍历 6.5 树与等价问题6.5.1 等价定义6.5.2 划分等价类的方法6.5.3 划分等价类的具体操作 - 并…