【mysql】基于binlog数据恢复指令和坑

news2024/11/16 10:49:56

文章目录

  • 1.binlog相关配置
    • 是否开启binlog
    • binlog日志格式
  • 2.导出binlog日志
    • mysqlbinlog指令
      • update
      • insert
      • delete
      • binlog中的事件
  • 3.数据恢复
  • 4.特别注意的坑
    • 为什么bash脚本执行mysqlbinlog,无法找到指令
    • 为什么执行mysqlbinlog,无法数据恢复

1.binlog相关配置

binlog会记录mysql的增、删、改操作,通过binlog可以实现数据恢复、数据备份。


是否开启binlog

show  variables like '%log_bin%';#查询是否开启binlog,mysql8默认开启

在这里插入图片描述
binlog.index是binlog索引目录,记录生成的binlog日志,日志内容在,对应的binlog下,通过后缀区分。
在这里插入图片描述


binlog日志格式

show global variables like '%binlog_format%';#查询binlog格式,必须是row格式

在这里插入图片描述

2.导出binlog日志

可以通过mysqlbinlog指令,对binlog进行操作,通常我们使用这个指令将binlog导出为文本或sql。

mysqlbinlog指令

# 使用 mysqlbinlog 增量备份数据库
mysqlbinlog -v --start-datetime="2023-12-04 21:40:00" --stop-datetime="2023-12-05 00:00:00" $log_path --base64-output=decode-rows > $backup_file
# 使用 mysqlbinlog 增量备份数据库通过position
mysqlbinlog -v --start-position=258879782 --stop-position=258880137 $log_path --base64-output=decode-rows > $backup_file
  • -v :用于显示伪sql语句
  • -datetime:时间条件
  • -position:位置条件
  • $log_path:binlog日志所在的绝对路径(根据实际情况修改)
  • –base64-output=decode-rows:将Base64编码的输出解码为可读的格式
  • $backup_file:输出内容位置(根据实际情况修改)

update

在这里插入图片描述

打开输出的binlog,可以看到伪sql,通过这些我们可以找到想要的日志和操作。

insert

在这里插入图片描述

delete

在这里插入图片描述


binlog中的事件

在binlog中,begin和commit对应事务的开始和提交

在这里插入图片描述

show BINLOG EVENTS in 'binlog.000037';#显示binlog中的事件

在这里插入图片描述
完整的一条update操作(delete、insert类似)
在这里插入图片描述

3.数据恢复

在binlog中找到对应需要恢复的日志,就可以进行数据恢复
数据恢复需要从,begin位置开始,到commit位置,注意区分,是使用End_log_pos这个作为起始
在这里插入图片描述例如,在原有数据为
在这里插入图片描述

然后,update,某一个字段
在这里插入图片描述
现在想要回到,之前的数据,那么可以查询binlog,找到刚刚update的,上一条日志
在这里插入图片描述
找到错误操作的,上一条事务操作,使用begin到commit的End_log_pos作为条件,那么恢复指令为:

mysqlbinlog  --no-defaults --start-position=267706997 --stop-position=267707266 binlog.000037 | mysql -uroot -p123456

填写对应的start和end位置,在后面加上账号密码,执行,发现数据已经恢复
在这里插入图片描述

4.特别注意的坑

为什么bash脚本执行mysqlbinlog,无法找到指令

需要使用mysqlbinlog的绝对地址

 whereis mysqlbinlog # 获取绝对地址

在这里插入图片描述
改为:

/usr/local/mysql/bin/mysqlbinlog  --no-defaults --start-position=267705701 --stop-position=267705953 binlog.000037 | mysql -uroot -p

为什么执行mysqlbinlog,无法数据恢复

mysqlbinlog恢复数据,需要使用同一表的,pos信息进行恢复,如果跨表操作,可以通过查看伪sql进行辅助恢复

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

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

相关文章

互联网Java工程师面试题·Spring Boot篇·第一弹

目录 1、什么是 Spring Boot? 2、Spring Boot 有哪些优点? 3、什么是 JavaConfig? 4、如何重新加载 Spring Boot 上的更改,而无需重新启动服务器? 5、Spring Boot 中的监视器是什么? 6、如何在 Sprin…

stm32一种步进电机查表法驱动

文章目录 一、定时器基础频率二、驱动原理三、关键代码 对于stm32芯片来说,步进电机的驱动由于要在中断中不断计算下一次脉冲的时间而极其消耗算力,使用计算的方法对于芯片的算法消耗更高,特别是在f1这种算力比较低的芯片上,这时候…

【数电笔记】25-mos管的开关特性

目录 说明: mos管的符号 1. N沟道增强型 2. P沟道增强型 3. N沟道耗尽型 4. P沟道耗尽型 mos管的静态开关特性 1. N沟道增强型MOS管 2. P沟道增强型MOS管 说明: 笔记配套视频来源:B站;本系列笔记并未记录所有章节&#…

(C语言)判定一个字符串是否是另一个字符串的子串,若是则返回子串在主串中的位置。

要求: (1)在主函数中输入两个字符串,调用子函数cmpsubstr()判断,并在主函数输出结果。 (2)子函数的返回值为-1表示未找到,否则返回子串的位置(起始下标)。 …

883重要知识点

(1)程序结构分三种:顺序结构,选择结构,循环结构。 (2)该程序都要从main()开始,然后从最上面往下。 (3)计算机的数据在电脑中保存以二…

微信小程序uni.chooseImage()无效解决方案

Bug场景: 微信小程序在上传图片时可以通过 uni.chooseImage()方案进行上传,这里不再赘述具体参数。一直项目都可以正常使用,突然有一天发现无法使用该方法,于是查了一下,发现是用户隐私协议问题。故记录一下解决方案。…

11、pytest断言预期异常

官方用例 # content of test_exception_zero.py import pytestdef test_zero_division():with pytest.raises(ZeroDivisionError):1/0# content of test_exception_runtimeerror.py import pytestdef test_recursion_depth():with pytest.raises(RuntimeError) as excinfo:def…

STM32上模拟CH340芯片的功能 (一)

#虚拟串口模拟CH340# 后续代码更新放gitee 上 一、思路 1. 确定通信接口:CH340是一款USB转串口芯片,因此您需要选择STM32上的某个USB接口来实现USB通信。通常情况下,STM32系列芯片都有内置的USB接口,您可以根据您的具体型号选择…

Excel 实现在某一列中循环合并多行单元格

在 Excel 中,使用 VBA(Visual Basic for Applications)宏可以轻松实现多行合并单元格的操作。下面是一个简单的 VBA 代码实现循环合并3行单元格的示例: 1. 打开 Excel 在你的 Excel 文件中,按下 Alt F11 打开 VBA 编…

Raspberry Pi 2, 2 of n - Pi 作为 IoT 消息代理

目录 介绍 环境 先决条件 - 设置静态 IP 地址 安装 Mosquitto 启动/停止 Mosquitto 配置先决条件 - 安装 mqtt_spy 配置 Mosquitto 配置 Mosquitto - 无安全性 测试 Mosquitto 配置 - 无安全性 配置 Mosquitto - 使用密码身份验证 Mosquitto 测试 - 带密码验证 概括 介绍 在本文…

创建conan包-Understanding Packaging

创建conan包-Understanding Packaging 1 Understanding Packaging1.1 Creating and Testing Packages Manually1.2 Package Creation Process 本文是基于对conan官方文档Understanding Packaging翻译而来, 更详细的信息可以去查阅conan官方文档。 1 Understanding …

1. 了解继承的概念,掌握派生类的定义。2. 掌握派生类构造方法的执行过程。3. 掌握方法的重载与覆盖。4. 掌握抽象类的概念及上转型对象的使用

1、定义一个抽象类Shape,类中封装属性name指定图形名称,定义用于求面积的抽象方法。定义3个子类:圆形类Circle、梯形类Trapezoid和三角形类Triangle,都继承Shape类,子类中各自新增属性,定义构造方法、设置属…

中缀表达式转后缀表达式(详解)

**中缀表达式转后缀表达式的一般步骤如下: 1:创建一个空的栈和一个空的输出列表。 2:从左到右扫描中缀表达式的每个字符。 3:如果当前字符是操作数,则直接将其加入到输出列表中。 4:如果当前字符是运算符&a…

PyQt实战 创建一个PyQt5项目

前后端分离 参考链接 PyQt5实战(二):创建一个PyQt5项目_pyqt5实战项目_笨鸟未必先飞的博客-CSDN博客 项目目录 创建一个QT项目 调用pyuic工具将dialog.ui文件编译为Python程序文件ui_dialog.py。 # -*- coding: utf-8 -*-# Form implemen…

【专题】【中值定理-还原大法】

1)构造辅助函数 2)罗尔定理: 闭区间连续,开区间可导 F(a)F(b) 3)F‘(ξ)0,原命题得证 极限保号性:

Selenium启动Chrome插件(Chrome Extensions)

Selenium启动Chrome插件(Chrome Extensions) 需求描述: 在使用WebDriver启动Chrome浏览器时式启动一个默认设置(比较干净)的浏览器,但是我在自动化测试的过程中需要用到插件。 实现方法: 其一:启动浏览器的同时直接取安装包.cr…

3.5毫米音频连接器接线方式

3.5毫米音频连接器接线方式 耳机插头麦克风插头 绘制电路图注意事项 3.5毫米音频连接器分为单声道开关型和无开关型如下图: sleeve(套筒) tip(尖端) ring(环) 耳机插头 麦克风插头 绘制电路图…

玩转大数据6:实时数据处理与流式计算

引言 在当今的数字化时代,数据正在成为一种新的资源,其价值随着时间的推移而不断增长。因此,实时数据处理和流式计算变得越来越重要。它们在许多领域都有广泛的应用,包括金融、医疗、交通、能源等。本文将探讨实时数据处理和流式…

主题色变量和var实现多套主题换肤

文章目录 一、前言1.1、[VueElementUI实现多套主题换肤](https://blog.csdn.net/u012804440/article/details/133975511)1.2、[VueElementUI实现在线动态换肤](https://blog.csdn.net/u012804440/article/details/133975570) 二、实现2.1、多主题色定义2.2、根节点属性修改2.2.…

UVM验证环境中加入monitor

验证平台必须监测DUT的行为,只有知道DUT的输入输出信号变化之后,才能根据这些信号变化来判定DUT的行为是否正 确。 验证平台中实现监测DUT行为的组件是monitor。 driver负责把transaction级别的数据转变成DUT的端口级别,并驱动给DUT&…