当前位置: 首页 > 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 /…...

wordpress后台更新后 前端没变化的解决方法

使用siteground主机的wordpress网站&#xff0c;会出现更新了网站内容和修改了php模板文件、js文件、css文件、图片文件后&#xff0c;网站没有变化的情况。 不熟悉siteground主机的新手&#xff0c;遇到这个问题&#xff0c;就很抓狂&#xff0c;明明是哪都没操作错误&#x…...

Appium+python自动化(十六)- ADB命令

简介 Android 调试桥(adb)是多种用途的工具&#xff0c;该工具可以帮助你你管理设备或模拟器 的状态。 adb ( Android Debug Bridge)是一个通用命令行工具&#xff0c;其允许您与模拟器实例或连接的 Android 设备进行通信。它可为各种设备操作提供便利&#xff0c;如安装和调试…...

遍历 Map 类型集合的方法汇总

1 方法一 先用方法 keySet() 获取集合中的所有键。再通过 gey(key) 方法用对应键获取值 import java.util.HashMap; import java.util.Set;public class Test {public static void main(String[] args) {HashMap hashMap new HashMap();hashMap.put("语文",99);has…...

HBuilderX安装(uni-app和小程序开发)

下载HBuilderX 访问官方网站&#xff1a;https://www.dcloud.io/hbuilderx.html 根据您的操作系统选择合适版本&#xff1a; Windows版&#xff08;推荐下载标准版&#xff09; Windows系统安装步骤 运行安装程序&#xff1a; 双击下载的.exe安装文件 如果出现安全提示&…...

C# 类和继承(抽象类)

抽象类 抽象类是指设计为被继承的类。抽象类只能被用作其他类的基类。 不能创建抽象类的实例。抽象类使用abstract修饰符声明。 抽象类可以包含抽象成员或普通的非抽象成员。抽象类的成员可以是抽象成员和普通带 实现的成员的任意组合。抽象类自己可以派生自另一个抽象类。例…...

汇编常见指令

汇编常见指令 一、数据传送指令 指令功能示例说明MOV数据传送MOV EAX, 10将立即数 10 送入 EAXMOV [EBX], EAX将 EAX 值存入 EBX 指向的内存LEA加载有效地址LEA EAX, [EBX4]将 EBX4 的地址存入 EAX&#xff08;不访问内存&#xff09;XCHG交换数据XCHG EAX, EBX交换 EAX 和 EB…...

vue3+vite项目中使用.env文件环境变量方法

vue3vite项目中使用.env文件环境变量方法 .env文件作用命名规则常用的配置项示例使用方法注意事项在vite.config.js文件中读取环境变量方法 .env文件作用 .env 文件用于定义环境变量&#xff0c;这些变量可以在项目中通过 import.meta.env 进行访问。Vite 会自动加载这些环境变…...

力扣-35.搜索插入位置

题目描述 给定一个排序数组和一个目标值&#xff0c;在数组中找到目标值&#xff0c;并返回其索引。如果目标值不存在于数组中&#xff0c;返回它将会被按顺序插入的位置。 请必须使用时间复杂度为 O(log n) 的算法。 class Solution {public int searchInsert(int[] nums, …...

html css js网页制作成品——HTML+CSS榴莲商城网页设计(4页)附源码

目录 一、&#x1f468;‍&#x1f393;网站题目 二、✍️网站描述 三、&#x1f4da;网站介绍 四、&#x1f310;网站效果 五、&#x1fa93; 代码实现 &#x1f9f1;HTML 六、&#x1f947; 如何让学习不再盲目 七、&#x1f381;更多干货 一、&#x1f468;‍&#x1f…...

Docker 本地安装 mysql 数据库

Docker: Accelerated Container Application Development 下载对应操作系统版本的 docker &#xff1b;并安装。 基础操作不再赘述。 打开 macOS 终端&#xff0c;开始 docker 安装mysql之旅 第一步 docker search mysql 》〉docker search mysql NAME DE…...