当前位置: 首页 > news >正文

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 恭喜完成!

相关文章:

mysql通过binlog做数据恢复

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

macos清理垃圾桶时提示 “操作无法完成,因为该项目正在使用中” 解决方法 , 强制清理mac废纸篓 方法

在macos中,删除文件后, 在清理垃圾桶时提示 “操作无法完成,因为该项目正在使用中” 出现这个提示,在大多数的情况下是因为数据问题导致,需要通过磁盘管理工具进行修复,修复后才可彻底的清理垃圾桶。 另外…...

vue3 axios ant-design-vue cdn的方式使用

1、vue3 快速上手 | Vue.js <script src"https://unpkg.com/vue3/dist/vue.global.js"></script><div id"app">{{ message }}</div><script>const { createApp, ref } VuecreateApp({setup() {const message ref(Hello …...

neo4j导入csv数据

neo4j数据可视化实践 手动输入数据 - 官方democsv数据导入准备数据数据处理导入步骤① 导入疾病表格② 导入药物表格③导入疾病-药物关系表格 爬虫的csv文件 手动输入数据 - 官方demo 点击之后&#xff0c;按照左边10张图中的代码&#xff0c;复制粘贴熟悉语法 效果如下 csv数据…...

YOLOV8实现小目标检测

YOLOV8小目标检测 前言&#xff1a;&#xff1a; yolo版出现很多&#xff0c;基本大同小异 但是这些差异让我们考虑在实验中使用哪个版本会比较好&#xff01; 在对小目标检测的过程中&#xff0c;yolov7相比yolov8性能更加好。 如果我们还是想使用yolov8&#xff0c;也是可以实…...

解决 Prettier ESLint 错误

解决 Prettier ESLint 错误 在 Vue.js 项目中使用 ESLint 和 Prettier 时&#xff0c;你可能会遇到类似以下的错误&#xff1a; frontend\src\views\dashboard\MobileConfigPanel.vue1:25 error Delete ␍ …...

百度网盘企业版数据快速上云,数据流转平台 CloudFlow 加速大模型训练迭代

1 项目从何时开始&#xff0c;又是何时结束 一个项目的周期应该如何计算&#xff0c;将计算开始运行作为起点&#xff0c;计算结束运行作为终点&#xff1f; 大模型训练场景中&#xff0c;从 TB/PB 级数据完成收集准备上云&#xff0c;到这些数据被提交至任务开始运行&#x…...

地面站通过SSH连接无人机

地面站通过SSH连接无人机 1.启动SSH服务2.远程连接到无人机处理器 一般无人机机载处理器都安装了ssh服务器 1.启动SSH服务 启动SSH sudo systemctl start ssh设置为开机自启动 sudo systemctl enable ssh检查ssh服务状态 sudo systemctl status ssh查询无人机的ip ifconf…...

【Pytorch】大语言模型中的CrossEntropyLoss

文章目录 前言什么是CrossEntropyLoss语言模型中的CrossEntropyLoss计算loss的前期准备CrossEntropyLoss的输入CrossEntropyLoss的输出 额外说明 前言 在大语言模型时代&#xff0c;我们常常使用交叉熵损失函数来计算loss&#xff0c;因此&#xff0c;理解该loss的计算流程有助…...

安全热点问题

安全热点问题 1.DDOS2.补丁管理3.堡垒机管理4.加密机管理 1.DDOS 分布式拒绝服务攻击&#xff0c;是指黑客通过控制由多个肉鸡或服务器组成的僵尸网络&#xff0c;向目标发送大量看似合法的请求&#xff0c;从而占用大量网络资源使网络瘫痪&#xff0c;阻止用户对网络资源的正…...

C++——用选择法对10个数值进行排序。

没注释的源代码 #include <iostream> using namespace std; int main() { int i,j,min,a[11],temp; cout<<"请输入数组a的十个值&#xff1a;"<<endl; for(i1;i<10;i) { cin>>a[i]; } for(i1;i<9;…...

CSP-CCF★★★201909-2小明种苹果(续)★★★

一、问题描述 二、解答 关键&#xff1a;判断是否发生苹果掉落&#xff0c;使用flag[]数组来标记&#xff0c;1为掉落&#xff0c;0为没有掉落&#xff0c;这样也是为了后续比较连续三棵树是否掉落 误区&#xff1a;用最后一次正数&#xff08;即最后一次统计苹果个数&#x…...

硬件工程师笔试面试——变压器

目录 9、变压器 9.1 基础 变压器原理图 变压器实物图 9.1.1 概念 9.1.2 变压器组成结构 9.1.3 变压器原理 9.1.4 变压器的类型 9.1.5 应用领域 9.2 相关问题 9.2.1 变压器的工作原理是什么? 9.2.2 如何选择合适的变压器类型? 9.2.3 变压器在实际应用中,如何进行…...

Visual Studio Code( VS Code)倍速提高编程工作效率的免费的源代码编辑器

耕耘于编程二十多年&#xff0c;后端、前端、操作系统、数据库、脚本都做过&#xff0c;各种各样的编程工具&#xff0c;IDE开发环境都用过&#xff0c;但是让我感觉比较好用、容易上手、能够提高工作效率的开发工具还是VS Code&#xff0c;下面我就简单的介绍一下这个广泛使用…...

华为SMU02B1智能通信电源监控单元模块简介

华为SMU02B1是一款智能通信电源监控单元模块&#xff0c;专为5G嵌入式机框设计&#xff0c;它在通信电源管理领域扮演着重要角色。以下是对该产品的详细介绍&#xff1a; 一、产品概述 主要功能&#xff1a;华为SMU02B1能够监控和管理通信电源系统&#xff0c;提供站点监控功能…...

【刷题日记】15. 三数之和

15. 三数之和 两数之和可以用巧思也可以用map 三数之和会更加复杂一点&#xff0c;且这道题还需要考虑避免重复答案&#xff01; 思路&#xff1a; 特判&#xff1a;检如果nums 为 null 或长度小于 3直接返回空数组。排序&#xff1a;使用 sort对数组进行升序排序。就变成了…...

低级编程语言和高级编程语言

一.区分低级编程语言和高级编程语言的方法 1.低级编程语言 低级编程语言,并不是简单的编程语言,而是写起来很费事的编程语言,如所有编程语言的"祖宗":汇编语言,写起来极其麻烦,说不定一个 int a1; 它就得写好几行,甚至十几行 这样麻烦的编程语言为什么还没消失那,因…...

Spring Boot-API网关问题

****### Spring Boot API 网关问题分析与解决方案 在微服务架构中&#xff0c;API 网关扮演着非常重要的角色。它位于客户端和微服务之间&#xff0c;充当所有外部请求的入口&#xff0c;负责请求的路由、聚合、鉴权、限流等功能。Spring Boot 提供了多种方式实现 API 网关&am…...

三 auto占位符

3.1 重新定义的auto关键字 1.当用一个auto关键字声明多个变量的时候&#xff0c;编译器遵从由左往右的推导规则&#xff0c;以最左边的表达式推断auto的具体类型 int n 5; auto *pn &n, m 10;// 这里auto被推导为 int 所以int m 10;合理 auto *pns &n, m 10.0;/…...

tail: inotify 资源耗尽

解决方法&#xff1a; 增加可用的 inotify 监视器数量。可以通过修改系统配置文件来增加监视器数量限制。 临时增加&#xff08;直到下次重启&#xff09;&#xff1a;执行 echo 1048576 | sudo tee -a /proc/sys/fs/inotify/max_user_instances 和 echo 65536 | sudo tee -a /…...

计算机总线技术深度解析:从系统架构到前沿演进

计算机系统中的总线是连接多个部件的信息传输线&#xff0c;是各部件间传输信息的公共通道。以下将从总线的定义、功能、分类、性能指标等方面进行详细介绍&#xff1a; 一、总线的定义与功能 1.定义&#xff1a;总线是一组能为多个部件分时共享的公共信息传送线路&#xff0…...

Redis最佳实践——性能优化技巧之Pipeline 批量操作

Redis Pipeline批量操作在电商应用中的性能优化技巧 一、Pipeline核心原理与性能优势 1. 工作机制对比&#xff1a; sequenceDiagramtitle 常规请求 vs Pipeline请求# 常规模式Client->>Redis: 命令1Redis-->>Client: 响应1Client->>Redis: 命令2Redis--&g…...

Kafka集成Flume/Spark/Flink(大数据)/SpringBoot

Kafka集成Flume Flume生产者 ③、安装Flume&#xff0c;上传apache-flume的压缩包.tar.gz到Linux系统的software&#xff0c;并解压到/opt/module目录下&#xff0c;并修改其名称为flume Flume消费者 Kafka集成Spark 生产者 object SparkKafkaProducer{def main(args:Array[S…...

解决:输入SSH后,仍无法通过网址登录以及紧接着的新问题Permission denied(publickey,password).

现象&#xff1a; 管理员: Windows PowerShell输入SSH后&#xff0c;仍无法通过网址登录 例如输入你的ssh命令&#xff1a;ssh -CNg -L xxxx:127.0.0.1:xxxx rootaaaaaaaaa.com -p yyyyy 得到终端提示&#xff1a;ssh无法识别为 cmdlet、函数、脚本文件或可运行程序的名称。 解…...

@Pushgateway自定义脚本推送数据

文章目录 Pushgateway 自定义脚本推送数据1. 目的2. 适用范围3. 前提条件4. 操作流程4.1 确定指标类型和格式4.2 编写推送脚本方法一:使用 curl 命令行推送方法二:使用 Python 脚本推送方法三:使用 Python 客户端库推送4.3 设置定时任务4.4 验证数据5. 高级配置5.1 使用基本…...

Rust 学习笔记:发布一个 crate 到 crates.io

Rust 学习笔记&#xff1a;发布一个 crate 到 crates.io Rust 学习笔记&#xff1a;发布一个 crate 到 crates.io提供有用的文档注释常用标题文档注释作为测试注释所包含的项目 使用 pub use 导出一个方便的公共 API设置 crates.io 账户添加 metadata 到一个新的 crate发布到 c…...

腾讯云开发者社区文章内容提取免费API接口教程

接口简介&#xff1a; 提取指定腾讯云开发者社区文章内容。本接口仅做内容提取&#xff0c;未经作者授权请勿转载。 请求地址&#xff1a; https://cn.apihz.cn/api/caiji/tencent.php 请求方式&#xff1a; POST或GET。 请求参数&#xff1a; 【名称】【参数】【必填】【说…...

DDR5 ECC详细原理介绍与基于协议讲解

本文篇幅较长,涉及背景原理介绍方便大家理解其运作方式 以及 基于DDR5协议具体展开介绍。 背景原理介绍 上图参考:DDR 内存中的 ECC 写入操作时,On-die ECC的工作过程如下: SoC将需要写入到Memory中的数据发送给控制器控制器将需要写入的数据直接发送给DRAM芯片在DDR5 DR…...

yolo目标检测助手:具有模型预测、图像标注功能

在人工智能浪潮席卷各行各业的今天&#xff0c;计算机视觉模型&#xff08;如 YOLO&#xff09;已成为目标检测领域的标杆。然而&#xff0c;模型的强大能力需要直观的界面和便捷的工具才能充分发挥其演示、验证与迭代优化的价值。为此&#xff0c;我开发了一款基于 WPF 的桌面…...

GO——内存逃逸分析

一、可能导致逃逸的5中情况 package mainimport "fmt"func main() {f1()f2()f3()f4()f5() }type animal interface {run() }type dog struct{}func (d *dog) run() {fmt.Println("狗在跑") }// 指针、map、切片为返回值的会发生内存逃逸 func f1() (*int,…...