mysql 通过 binglog 恢复数据
mysql 通过 binglog 恢复数据
测试数据库版本: 8.0.5
查看当前是否开启
进入数据库,查看当前是否开启了 binglog 的相关设置:
mysql> show variables like 'log_bin%';
+---------------------------------+-----------------------------+
| Variable_name | Value |
+---------------------------------+-----------------------------+
| log_bin | ON |
| log_bin_basename | /var/lib/mysql/binlog |
| log_bin_index | /var/lib/mysql/binlog.index |
| log_bin_trust_function_creators | OFF |
| log_bin_use_v1_row_events | OFF |
+---------------------------------+-----------------------------+
5 rows in set (0.04 sec)
这里状态是打开的,如果为off,则需要修改为开启状态,云厂商的数据库实例,需要修改相应参数. 部署的服务可以修改配置文件
查看所有 binlog 日志文件列表:
mysql> show master logs;
+---------------+-----------+-----------+
| Log_name | File_size | Encrypted |
+---------------+-----------+-----------+
| binlog.000001 | 157 | No |
+---------------+-----------+-----------+
1 row in set (0.00 sec)
我这里是新建的数据库,所以只有一个binlog日志文件,如果有多个,则需要选择最新的binlog日志文件
查看最后一个 binlog 日志的编号名称及其最后一个操作事件 pos 结束点的值:show master status;
然后我们刷新日志,并且查看当前的 binlog 日志文件列表: flush logs; show master logs;
会产生一个新的日志文件.然后开始测试.
测试恢复
进入到测试库,然后新建表,并插入新的数据:
CREATE TABLE students (id INT AUTO_INCREMENT PRIMARY KEY,name VARCHAR(50),age INT,gender VARCHAR(10),major VARCHAR(50)
);INSERT INTO students (name, age, gender, major) VALUES('Alice', 18, 'Female', 'Mathematics'),('Bob', 19, 'Male', 'Computer Science'),('Charlie', 20, 'Male', 'Physics'),('Daisy', 19, 'Female', 'Chemistry');
然后可以查看到当前的 binlog 日志的事件内容:
SHOW BINLOG EVENTS IN 'binlog.000002';
-------------+
| Log_name | Pos | Event_type | Server_id | End_log_pos | Info |
+---------------+-----+----------------+-----------+-------------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| binlog.000002 | 4 | Format_desc | 1 | 126 | Server ver: 8.0.35, Binlog ver: 4 |
| binlog.000002 | 126 | Previous_gtids | 1 | 157 | |
| binlog.000002 | 157 | Anonymous_Gtid | 1 | 236 | SET @@SESSION.GTID_NEXT= 'ANONYMOUS' |
| binlog.000002 | 236 | Query | 1 | 469 | use `test`; CREATE TABLE students (id INT AUTO_INCREMENT PRIMARY KEY,name VARCHAR(50),age INT,gender VARCHAR(10),major VARCHAR(50)
) /* xid=17 */ |
| binlog.000002 | 469 | Anonymous_Gtid | 1 | 548 | SET @@SESSION.GTID_NEXT= 'ANONYMOUS' |
| binlog.000002 | 548 | Query | 1 | 623 | BEGIN |
| binlog.000002 | 623 | Table_map | 1 | 692 | table_id: 94 (test.students) |
| binlog.000002 | 692 | Write_rows | 1 | 858 | table_id: 94 flags: STMT_END_F |
| binlog.000002 | 858 | Xid | 1 | 889 | COMMIT /* xid=18 */ |
通过这个我们可以查到对应的 pos 点,然后通过 pos 点进行恢复数据,现在我们将表直接删除掉,模拟误操作, 删除之后,再次刷新 binlog 日志,将之后的操作记录到新的 binlog 日志中.
flush logs;mysql> show master logs;
+---------------+-----------+-----------+
| Log_name | File_size | Encrypted |
+---------------+-----------+-----------+
| binlog.000001 | 201 | No |
| binlog.000002 | 1143 | No |
| binlog.000003 | 157 | No |
+---------------+-----------+-----------+
3 rows in set (0.00 sec)
恢复数据
- 全部恢复: 将整个 binglog 文件内容共都进行一次重现操作.
通过 binlog 的日志文件,来恢复数据,这里我们需先检查一下 binlog 文件内容,
打开指定的 binlog 文件: mysqlbinlog binlog.000002 ,我们从文件中可以看到我们执行的删除操作也被记录在里面:
DROP TABLE `students` /* generated by server */
但是我们不能直接编辑这个文件,因为这个文件是二进制文件,我们需要通过 mysqlbinlog 工具来解析这个文件,然后生成一个可执行的 sql 文件,然后再执行这个 sql 文件,来恢复数据.
mysqlbinlog -u root -pyour_pass -R binlog.000002 > output.sql
然后将 sql 备份一下,
然后我们编辑这个 sql 文件,将其中的删除操作删除掉,删除的时候需要仔细检查,因为这个文件中可能有多个删除操作,我们只需要删除我们误操作的删除操作即可.
然后执行这个 sql 文件,就可以恢复数据了.
mysql -uroot -pyour_pass test < output.sql
执行完成之后,我们再去查看一下表和数据,就可以看到数据已经恢复了.
- 通过 pos 点恢复: 通过指定的 pos 点来恢复数据.
我们需要提前知道我们误操作的 pos 点,以及结束的 pos 点,然后通过指定的 pos 点来恢复数据.
上面的示例中我们开始的 pos 点是: 236 结束的 pos 点是: 889, 注意不要把删除操作的 pos 点包含进去.
所以可以执行命令:
mysqlbinlog --start-position=236 --stop-position=889 --database=test /var/lib/mysql/binlog.000002 | mysql -uroot -p密码 -v test
恢复之前最好在测试库中执行以下,看看恢复结果是否正确,然后再执行恢复操作.
以上就可以将数据恢复出来.
- 通过时间点来恢复: 通过指定的时间点来恢复数据.
我们在通过 mysqlbinlog binlog.000002 命令查看 binlog 文件内容的时候,可以看到每一条操作的时间点,我们可以通过指定时间点来恢复数据.
确认我们误操作的时间点,然后通过指定时间点来恢复数据.
执行命令:
/usr/bin/mysqlbinlog --start-datetime="2024-01-03 17:22:10" --stop-datetime="2024-01-03 17:33:52" --database=test /var/lib/mysql/binlog.000002 |mysql -uroot -p密码 -v test
然后就可以直接恢复出数据.
相关文章:
mysql 通过 binglog 恢复数据
mysql 通过 binglog 恢复数据 测试数据库版本: 8.0.5 查看当前是否开启 进入数据库,查看当前是否开启了 binglog 的相关设置: mysql> show variables like log_bin%; -------------------------------------------------------------- | Variable_name …...
【REST2SQL】01RDB关系型数据库REST初设计
0 概念 REST2SQL实现连接数据库,数据库的表或视图即可提供REST的GET\POST\PUT\DELETE请求,SQL可执行SQLECT\INSERT\UPDATE\DELETE语句。 0.1 RDB Relational Database 即关系型数据库(简称 RDB)是一种以关系(即表格…...
图像识别原理
图像识别是计算机视觉领域中的一个重要任务,其目标是使计算机系统能够理解和解释图像中的信息。以下是图像识别的基本原理: 1. 数据采集:首先,需要获取图像数据。这可以通过摄像头、传感器、扫描仪等设备来实现。图像可以是静态的…...
共识算法介绍
文章目录 共识算法Paxos 算法三种角色一致性提交算法prepare 阶段accept 阶段commit 阶段 CAP 定理BASE 理论Zookeeper 算法实现三类角色三个数据三种模式四种状态消息广播算法Leader选举算法 共识算法 Paxos 算法 Paxos 算法是莱斯利兰伯特(Leslie Lamport)1990 年提出的一种…...
Gen-AI 的知识图和分析(无需图数据库)
如今,图表比以往任何时候都更加相关和有用。由于目前正在发生的人工智能革命,工程师们正在考虑围绕 Gen-AI 的机会,利用具有动态提示、数据基础和屏蔽功能的开放 Gen-AI 解决方案,这进一步促使他们思考知识图谱等有效的解决方案。…...
flutter 安卓使用高德插件黑屏
地址 https://lbs.amap.com/api/android-sdk/guide/create-project/android-studio-create-project 下面介绍的方式是Native配置 sdk,也就是需要手动下载到本地在引入的方式 1、添加 jar 文件: 将下载的地图 SDK 的 jar包复制到工程(此处截…...
Java:表单生成excel文档 poi 通用
在用java 写数据库应用的时候, 通常会生成各种报表,而这些报表可能会被导出为各种格式的文件,比如Excel文档,pdf 文档等等. 今天先做了一个生成Excel 文档的例子,主要解决以下问题: 1. 生成 Excel 文档. 2. 自动对生成…...
使用Apache Commons SCXML实现状态机管理
第1章:引言 大家好,我是小黑,咱们程序员在开发过程中,经常会遇到需要管理不同状态和状态之间转换的场景。比如,一个在线购物的订单,它可能有“新建订单”、“已支付”、“配送中”、“已完成”等状态。在这…...
大数据技术原理与应用期末考试题
大数据技术原理与应用期末考试题 一、单选题 1.下面哪个选项属于大数据技术的“数据存储和管理”技术层面的功能? A、利用分布式文件系统、数据仓库、关系数据库等实现对结构化、半结构化和非结构化海量数据的存储和管理 B、利用分布式并行编程模型和计算框架,结合机器学习…...
解决jenkins的Exec command命令不生效,或者执行停不下来的问题
Jenkins构建完后将war包通过 Publish Over SSH 的插件发布到服务器上,在服务器上执行脚本时,脚本中的 nohup 命令无法执行,并不生效,我配置的Exec command命令是后台启动一个war包,并输出日志文件。 nohup java -jar /…...
【PHP】json_decode的第二个参数是什么意思
json_decode() 函数的第二个参数 $associative 是一个布尔值,用于控制 JSON 对象在 PHP 中的解码方式。当将其设置为 true 时,JSON 对象将被解码为关联数组;当设置为 false 时,JSON 对象将被解码为 stdClass 对象。默认值为 false…...
学生公寓安全用电管理系统应用案例
摘要:安全用电是学校公寓用电管理的首要任务,这就需要对一些恶性负载进行识别和控制,同时为了减少电工和后期管理人员的成本,引进了安全用电管理系统。本文在在描述了安全用电管理系统的工作原理和利用智能电表可实现的功能后,阐明…...
python实现简易的flask后端接口
先安装插件pip install flask 新建py脚本文件编码: # -*- coding: utf-8 -*- from flask import Flask from flask_cors import CORS # 跨域依赖,通过pip install flask-cors安装app Flask(__name__) cors CORS(app) # 跨域设置,这样设置…...
CSDN质量分批量查询
单个文章质量分查询地址(点击右边地址): CSDN质量分查询 创作者身份认证审核标准 优质创作者申请条件: 粉丝数在5000以上近30日(申请日算起)原创文章数不少于4篇原创博文总数不少于100篇垂直领域原创数量…...
【MPC学习笔记】01:MPC简介(Lecture 1_1 Unconstrained MPC)
本笔记来自北航诸兵老师的课程 课程地址:模型预测控制(2022春)lecture 1-1 Unconstrained MPC 文章目录 0 MPC 简介0.1 案例引入0.2 系统模型0.3 MPC的优点0.4 MPC的缺点0.5 MPC的未来 1 详细介绍 0 MPC 简介 0.1 案例引入 MPC(…...
c语言结构体学习上篇
文章目录 前言一、结构体的声明1,什么叫结构体?2,结构体的类型3,结构体变量的创建和初始化4,结构体的类型5,结构体的初始化 二、结构体的访问1,结构体成员的点操作符访问2,结构体体成员的指针访问 前言 昨…...
Linux: eBPF: bcc-tools:tcpdrop使用需要注意的问题
最近使用bcc-tools的时候注意到,bcc-tools(eBPF相关软件)的使用版本和内核的版本紧密程度非常高。因为要使用内核的函数或者结构体,所以就必须版本一致是必须的,不然会出现下面的警告或者错误: WARNING: tcp_drop() kernel function not found or traceable. The kernel …...
AI:113-基于卷积神经网络的图像风格迁移
🚀点击这里跳转到本专栏,可查阅专栏顶置最新的指南宝典~ 🎉🎊🎉 你的技术旅程将在这里启航! 从基础到实践,深入学习。无论你是初学者还是经验丰富的老手,对于本专栏案例和项目实践都有参考学习意义。 ✨✨✨ 每一个案例都附带有在本地跑过的关键代码,详细讲解供…...
15、Kubernetes核心技术 - 探针
目录 一、概述 二、探针类型 2.1、就绪探针(Readiness Probe) 2.2、存活探针(Liveness Probe) 三、探针探测方法 3.1、exec 3.2、httpGet 3.3、tcpSocket 四、探针配置项 五、探针使用 5.1、就绪探针(Readin…...
GTK4 环境配置
1 安装gtk4包裹: # sudo yum install gtk4 gtk4-devel gtk4-devel-docs devhelp glib2 glib2-devel glib2-doc 2 安装 glade 4 git clone https://github.com/ag-python/cambalache.git 记住 把软件目录 复制到 一个你不会移动删除的地方(千万别删除这个软件文件夹 因为运行…...
Yolov8部署——segmentation部署以及批量推理
Yolov8部署——segmentation部署以及批量推理 参考:在windows上部署Yolov8主要参考下面两个仓库,https://github.com/xunzixunzi/tensorrt-cpp-api和https://github.com/xunzixunzi/YOLOv8-TensorRT-CPP,代码说是适合批量处理,但是代码中是以…...
再见2023,你好2024!
大家好,我是老三,本来今天晚上打算出去转一转,陆家嘴打车实在太艰难了,一公里多的路,司机走了四十分钟,还没到,再加上身体不适,咳嗽地比较厉害,所以还是宅在酒店里&#…...
【计算机毕业设计】SSM二手交易网站
项目介绍 该项目分为前后台,前台普通用户角色,后台管理员角色。 管理员主要功能如下: 登陆,商品分类管理,商品管理,商品订单管理,用户管理等功能。 用户角色主要功能如下: 包含以下功能:查看所有商品,用户登陆注册…...
纠删码ReedSolomon
随着大数据技术的发展,HDFS作为Hadoop的核心模块之一得到了广泛的应用。为了数据的可靠性,HDFS通过多副本机制来保证。在HDFS中的每一份数据都有两个副本,1TB的原始数据需要占用3TB的磁盘空间,存储利用率只有1/3。而且系统中大部分…...
C++音视频开发技巧汇总(持续更新)
1.录制PCM数据 有时候我们需要录制PCM数据到文件以测试录制数据是否正确,一般可以使用以下代码实现: FILE *pf; fopen_s(&pf, "rec.pcm", "wb"); fwrite(myPcmArr, 1, outBufferLen, pf); 录制pcm文件后可以使用Audacity来导…...
4462 4.曙曙献爱心
#include<bits/stdc.h> using namespace std; int n,m,k; int a[1001]; int s[1001]; int f[1001][1001];//f[i][j],i个警察,j个点,能管理的最大人数 int main(){cin>>n>>m>>k;for(int i1;i<n;i){cin>>a[i…...
浅谈命令模式
命令模式是一种行为设计模式,用于将一个请求封装成一个对象,从而使得请求的发送者和接收者解耦,并支持对请求进行参数化、队列化、撤销和重做等操作。 在命令模式中,有一下介个关键角色: Command(命令&am…...
软件测试/测试开发丨Python 模块与包
python 模块与包 python 模块 项目目录结构 组成 package包module模块function方法 模块定义 定义 包含python定义和语句的文件.py文件作为脚本运行 导入模块 import 模块名from <模块名> import <方法 | 变量 | 类>from <模块名> import * 注意&a…...
java企业网站系统Myeclipse开发mysql数据库web结构java编程计算机网页项目
一、源码特点 java Web企业网站系统是一套完善的java web信息管理系统,对理解JSP java编程开发语言有帮助,系统具有完整的源代码和数据库,系统主要采用B/S模式开发。开发环境为 TOMCAT7.0,Myeclipse8.5开发,数据库为Mysql5.0&…...
MAC电脑安装java开发工具
一、安装brew 1.1、官网地址 链接 1.2、更新地址 二、安装 java brew install openjdk11 三、安装gradle Gradle安装与配置教程 - 知乎 四、GIT 4.1、GIT安装 brew install git 4.2、rsa ssh-keygen -t rsa -C "jhestarbucks.com" 五、自动搭建一个springBoot…...
做外贸哪个网站可以接单/网址收录平台
1、下载bootstrap https://getbootstrap.com/docs/4.3/getting-started/download/ 2、在项目目录下创建static文件夹,将下载的bootstrap解压到该static下 3、新建html,layout.html,url_for引用bootstrap.css 这里的block为定义模块 <!DOCTYPE html…...
微信端微网站怎么做/seo网站管理
2.1 问题 沿用练习一,通过调整Nginx服务端配置,实现以下目标: 访问Web页面需要进行用户认证 用户名为:tom,密码为:1234562.2 方案 通过Nginx实现Web页面的认证,需要修改Nginx配置文件&#x…...
汽车制造行业网站模板/上海单个关键词优化
java课程设计报告--计算器设计 1 课 程 Java 程序设计 题 目 计算器设计 年 级 2010 级 专 业 信息一班 学 号 姓 名 组 员 指导教师 课程设计题目计算器设计 2 课程设计论文任务书 基础基础 学 院 信息与计算科学信息与计算科学 专 业 20101 班 一、课程设计论文题目 计算器的…...
深圳市建设厅官方网站/在百度如何发布作品
满意答案wpsfty2016.02.07采纳率:46% 等级:9已帮助:1213人图老师手工制作生活百科美食菜谱设计创意美妆造型电脑网络美容美体综合其它疾病百科育儿百科电脑网络电脑显示不支持此连接口怎么办电脑显示不支持此连接口怎么办标签:…...
建设网站项目简历/对网站提出的优化建议
--存储过程名和参数,参数中in表示传入参数,out标示传出参数,inout表示传入传出参数create procedure p_procedurecode(in sumdate varchar(10)) begindeclare v_sql varchar(500); --需要执行的SQL语句declare sym varchar(6);declare …...
合肥做网站建设公司/seo求职信息
介绍说明 在之前两章为了让大家从主流的概念入门,一直使用智能合约这个词来理解Fabric的链码,因为两者概念是一样的,只是由于智能合约这个在以太坊等其它区块链使用比较多,比较广泛,因此在这里也这么叫,好…...