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

MySQL BinLog 数据还原恢复

博文目录

文章目录

  • 查看状态
    • 查看 binlog 开关及存储路径
    • 查看 binlog 配置 如 存储格式 binlog_format
    • 查看当前还存在的日志
    • 查看当前正在使用的日志
  • 切换日志
  • 确定日志
    • 确定日志文件
    • 日志格式改写
    • 日志简要说明
    • 确定日志位置
    • 以事件为单位查看日志
    • 分析日志
  • 还原数据


查看状态

查看 binlog 开关及存储路径

show variables like '%log_bin%';

在这里插入图片描述

查看 binlog 配置 如 存储格式 binlog_format

show variables like '%binlog_%';

在这里插入图片描述

查看当前还存在的日志

show master logs;

在这里插入图片描述

查看当前正在使用的日志

show master status;

在这里插入图片描述

切换日志

flush logs;

确定日志

确定日志文件

到 binlog 日志目录, 根据操作时间和日志时间, 即可确认记录保存在哪一个日志中

日志格式改写

在日志目录下, 使用 mysql 自带的工具 mysqlbinlog 将二进制日志转为文本日志, 便于查找

mysqlbinlog binlog.000016 > binlog.bak

日志简要说明

binlog 日志以事件为单位写入, 以 at 作为日志的开始, 两个 at 之间的内容就是一个完整的事件

下面是从日志中截取出来的一段, 是在 binlog.bak 中查找内容 tzh_ths_benchmark 找到的目标日志, 为了便于查看, 加入分割符用于间隔每一个日志, at 后面的数字就是本日志的起始点, end_log_pos 后面的数字就是本日志的结束点, at 下一行就是事件的日期时间, 可以结合操作时间定位, 再下面的内容就是具体的日志数据, 每一个日志都以 /*!*/; 字符作为结束标记

'/*!*/;
========== ========== ========== ========== ========== ========== ========== ========== ========== ==========
# at 361652921
#231208 11:07:08 server id 1  end_log_pos 361652952 CRC32 0x2f4eae24    Xid = 44300746
COMMIT/*!*/;
========== ========== ========== ========== ========== ========== ========== ========== ========== ==========
# at 361652952
#231208 15:43:25 server id 1  end_log_pos 361653031 CRC32 0x32ff5692    Anonymous_GTID  last_committed=753211   sequence_number=753212  rbr_only=no     original_committed_timestamp=1702021405548520   immediate_commit_timestamp=1702021405548520     transaction_length=1604
# original_commit_timestamp=1702021405548520 (2023-12-08 15:43:25.548520 CST)
# immediate_commit_timestamp=1702021405548520 (2023-12-08 15:43:25.548520 CST)
/*!80001 SET @@session.original_commit_timestamp=1702021405548520*//*!*/;
/*!80014 SET @@session.original_server_version=80030*//*!*/;
/*!80014 SET @@session.immediate_server_version=80030*//*!*/;
SET @@SESSION.GTID_NEXT= 'ANONYMOUS'/*!*/;
========== ========== ========== ========== ========== ========== ========== ========== ========== ==========
# at 361653031
#231208 15:43:25 server id 1  end_log_pos 361654556 CRC32 0x07b1e62c    Query   thread_id=100812        exec_time=0     error_code=0    Xid = 44313321
SET TIMESTAMP=1702021405/*!*/;
SET @@session.foreign_key_checks=0/*!*/;
/*!80013 SET @@session.sql_require_primary_key=0*//*!*/;
CREATE TABLE `tzh_ths_benchmark_copy1` (`id` bigint unsigned NOT NULL AUTO_INCREMENT,`type` varchar(8) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL DEFAULT '' COMMENT '参数类型: FILL:填写, CAlC:计算',`relation` varchar(8) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL DEFAULT '' COMMENT '指标类型, SIMPLE:简单指标, MERGED:组合指标',`status` varchar(8) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL DEFAULT '' COMMENT '关联状态: LINKED:已关联, UNLINKED:未关联',`parameter_id` bigint unsigned NOT NULL DEFAULT '0' COMMENT '数据类型的id, 可由此拿到排放类型的一二级id',`merge_id` bigint unsigned NOT NULL DEFAULT '0' COMMENT '合并组的id',`energy_id` bigint unsigned NOT NULL DEFAULT '0' COMMENT '数据类型关联的耗能项',`formula_id` bigint unsigned NOT NULL DEFAULT '0' COMMENT '数据类型关联的耗能项的公式',`name` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL DEFAULT '' COMMENT '排放名称, 可认为是指标名称',`formula` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NOT NULL DEFAULT '' COMMENT '组合指标的消耗量计算公式, id+/-id, 包含关联项和关联关系',PRIMARY KEY (`id`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=220 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='新能源云-碳核算-指标(参数关联)'
/*!*/;
========== ========== ========== ========== ========== ========== ========== ========== ========== ==========
# at 361654556
#231208 15:43:25 server id 1  end_log_pos 361654635 CRC32 0xd4b43d02    Anonymous_GTID  last_committed=753212   sequence_number=753213  rbr_only=yes    original_committed_timestamp=1702021405568586   immediate_commit_timestamp=1702021405568586     transaction_length=2068
/*!50718 SET TRANSACTION ISOLATION LEVEL READ COMMITTED*//*!*/;
# original_commit_timestamp=1702021405568586 (2023-12-08 15:43:25.568586 CST)
# immediate_commit_timestamp=1702021405568586 (2023-12-08 15:43:25.568586 CST)
/*!80001 SET @@session.original_commit_timestamp=1702021405568586*//*!*/;
/*!80014 SET @@session.original_server_version=80030*//*!*/;
/*!80014 SET @@session.immediate_server_version=80030*//*!*/;
SET @@SESSION.GTID_NEXT= 'ANONYMOUS'/*!*/;
========== ========== ========== ========== ========== ========== ========== ========== ========== ==========
# at 361654635
#231208 15:43:25 server id 1  end_log_pos 361654712 CRC32 0x44693e7a    Query   thread_id=100812        exec_time=0     error_code=0
SET TIMESTAMP=1702021405/*!*/;
BEGIN
/*!*/;
========== ========== ========== ========== ========== ========== ========== ========== ========== ==========
# at 361654712
#231208 15:43:25 server id 1  end_log_pos 361654808 CRC32 0x53c97542    Table_map: `carbon`.`tzh_ths_benchmark_copy1` mapped to number 1003
========== ========== ========== ========== ========== ========== ========== ========== ========== ==========
# at 361654808
#231208 15:43:25 server id 1  end_log_pos 361656593 CRC32 0x0348b3f8    Write_rows: table id 1003 flags: STMT_END_FBINLOG '
HclyZRMBAAAAYAAAABhqjhUAAOsDAAAAAAEABmNhcmJvbgAXdHpoX3Roc19iZW5jaG1hcmtfY29w
eTEACggPDw8ICAgIDw8KIAAgACAAgAD8AwAAAQH4AgP8/wBCdclT
HclyZR4BAAAA+QYAABFxjhUAAOsDAAAAAAMAAgAK//8AAAkAAAAAAAAABEZJTEwGU0lNUExFCFVO
TElOS0VEGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAABEZJTEwG
:

确定日志位置

文本文件通过 less 命令可以检索到目标操作记录

  • less binlog.bak: 用 less 方式打开日志
  • /xxxxx, 在日志中查找字符串 xxxxx
  • 键 N: 跳转到下一个 xxxxx
  • 键 Shift + N, 跳转到上一个 xxxxx
  • 键 G: 跳转到文本文件开始
  • 键 Shift + G, 跳转到文本文件末尾

以事件为单位查看日志

将位置 361652952 作为起始点, 列出后续的事件列表, 包括起始位置 Pos 和 结束位置 End_log_pos, 和文本文件一一对应

show binlog events [IN 'log_name'] [FROM pos] [LIMIT [offset,] row_count];
show binlog events IN 'binlog.000016' FROM 361652952;

在这里插入图片描述

分析日志

本次回滚的目的是还原 tzh_ths_benchmark 表及其数据, 因为计划的操作流程是在 Navicat 中, 拷贝该表为 tzh_ths_benchmark_copy1, 然后修改拷贝表, 结果却误操作改了原表, 导致数据丢失 …

本次还原的方案是, 重现 binlog 中拷贝表的步骤, 还原 tzh_ths_benchmark_copy1 表, 然后重命名为原表. 全部流程对应下面选中的内容, 核心在 创建表 和 Write_rows 事件. 最终确定本次恢复数据的 binlog 起始点和结束点分别为 361653031 和 361656701

在这里插入图片描述

还原数据

根据确认的起始结束点位置还原数据, 执行完后, 刷新数据库即可看到 tzh_ths_benchmark_copy1 已经回来了, 且数据也都在

mysqlbinlog -v binlog.000016 --start-position=361653031 --stop-position=361656701 | mysql -uroot -p123456

相关文章:

MySQL BinLog 数据还原恢复

博文目录 文章目录 查看状态查看 binlog 开关及存储路径查看 binlog 配置 如 存储格式 binlog_format查看当前还存在的日志查看当前正在使用的日志 切换日志确定日志确定日志文件日志格式改写日志简要说明确定日志位置以事件为单位查看日志分析日志 还原数据 查看状态 查看 b…...

理想汽车校招内推--大量hc等你来

投递链接: https://li.jobs.feishu.cn/s/i8BLJE1j 欢迎大家投递...

RabbitMQ死信队列详解

什么是死信队列 由于特定的**原因导致 Queue 中的某些消息无法被消费,**这类消费异常的数据将会保存在死信队列中防止消息丢失,例如用户在商城下单成功并点击支付后,在指定时间未支付时的订单自动失效死信队列只不过是绑定在死信交换机上的队…...

计算机网络:物理层(编码与调制)

今天又学会了一个知识,加油! 目录 一、基带信号与宽带信号 1、基带信号 2、宽带信号 3、选择 4、关系 二、数字数据编码为数字信号 1、非归零编码【NRZ】 2、曼彻斯特编码 3、差分曼彻斯特编码 4、归零编码【RZ】 5、反向不归零编码【NRZI】 …...

嵌入式开发板qt gdb调试

1) 启动 gdbserver ssh 或者 telnet 登陆扬创平板 192.168.0.253, 进入命令行执行如下: chmod 777 /home/HelloWorld (2) 打 开 QTcreator->Debug->StartDebugging->Attach to Running Debug Server 进行…...

基于python实现原神那维莱特开转脚本

相信不少原友都抽取了枫丹大C那维莱特,其强力的输出让不少玩家爱不释手。由于其转的越快,越不容易丢伤害的特点,很多原友在开转时容易汗流浃背,所以特意用python写了一个自动转圈脚本,当按住鼠标侧键时,即可…...

C# 实现Lru缓存

C# 实现Lru缓存 LRU 算法全称是最近最少使用算法(Least Recently Use),是一种简单的缓存策略。 通常用在对象池等需要频繁获取但是又需要释放不用的地方。 代码实现的基本原理就是使用链表,当某个元素被访问时(Get或…...

牛客网BC107矩阵转置

答案&#xff1a; #include <stdio.h> int main() {int n0, m0,i0,j0,a0,b0;int arr1[10][10]{0},arr2[10][10]{0}; //第一个数组用来储存原矩阵&#xff0c;第二个数组用来储存转置矩阵scanf("%d%d",&n,&m); if((n>1&&n<10)&&am…...

协作办公原来如此简单?详解 ONLYOFFICE 协作空间 2.0 更新

协作办公原来如此简单&#xff1f;详解 ONLYOFFICE 协作空间 2.0 更新 上周&#xff0c;ONLYOFFICE 的协作空间推出升级版 2.0 版本了&#xff1a; ONLYOFFICE 协作空间 2.0 现已发布&#xff1a;新增公共房间、插件、重新分配数据、RTL 界面等功能 ONLYOFFICE 协作空间是去…...

2023年国赛高教杯数学建模A题定日镜场的优化设计解题全过程文档及程序

2023年国赛高教杯数学建模 A题 定日镜场的优化设计 原题再现 构建以新能源为主体的新型电力系统&#xff0c;是我国实现“碳达峰”“碳中和”目标的一项重要措施。塔式太阳能光热发电是一种低碳环保的新型清洁能源技术[1]。   定日镜是塔式太阳能光热发电站&#xff08;以下…...

c/c++ 结构体、联合体、枚举

结构体 结构体内存对齐规则&#xff1a; 1、结构体的第一个成员对齐到结构体变量起始位置偏移量为0的地址处 2、其他成员变量要对齐到某个数字&#xff08;对齐数&#xff09;的整数倍的地址处。 对齐数&#xff1a;编译器默认的一个对齐数与该成员变量大小的较小值。 vs 中…...

stl模板库成员函数重载类型混肴编译不通过解决方法

stl模板库成员函数重载类型混肴编译不通过解决方法 这种方式编译不通过IsArithmetic和HasMemberList编译器存在混肴 template <typename T, typename Enable std::enable_if<IsArithmetic<T>::value>::type >static void DumpWrapper(T* filed, std::strin…...

MySQL——表的约束

目录 一.表的约束 二.空属性 ​编辑三.默认值 四.列描述 五.主键 1.主键 2.符合主键 六.自增长 七.唯一键 八.外键 一.表的约束 真正约束字段的是数据类型&#xff0c;但是数据类型约束很单一&#xff0c;需要有一些额外的约束&#xff0c;更好的保证数据的合法性&…...

cordic 算法学习记录

参考&#xff1a;b站教学视频FPGA&#xff1a;Cordic算法介绍与实现_哔哩哔哩_bilibili FPGA硬件实现加减法、移位等操作比较简单&#xff0c;但是实现乘除以及函数计算复杂度高且占用资源多&#xff0c;常见的计算三角函数/平方根的求解方式有①查找表&#xff1a;先把函数对应…...

【STM32】电机驱动

一、电机分类 二、直流电机的分类 1.有刷电机 2.无刷电机 3.直流减速电机 三、H桥电路 正向旋转 驱动Q1和Q4 反向旋转 驱动Q2和Q3 四、MC3386电机驱动芯片 1.基本原理图 1&#xff09;前进/后退&#xff1a;IN1和IN2的电平顺序决定电机的正反转 2&#xff09;调节速度&#…...

csp 如此编码 C语言(回归唠嗑版)

熟悉的开篇废话&#xff0c;最近其实在研究那个web开发这一块&#xff0c;导致csp联系就减少了&#xff0c;好久没更csp的帖子了&#xff0c;尽管明天就要考了&#xff0c;但是嘞&#xff0c;能看一道是一道呗对吧。 等过段时间我把web开发这一块整明白了就发帖子&#xff0c;…...

或许是全网最全的延迟队列

什么是延迟队列 作用&#xff1a;用来存储延迟消息延迟消息&#xff1a;生产者发送一个消息给mq&#xff0c;然后mq会经过一段时间&#xff08;延迟时间&#xff09;&#xff0c;然后在把这个消息发送给消费者 应用场景 预定会议后&#xff0c;需要在预定的时间点前十分钟通…...

C语言结构体小项目之通讯录代码实现+代码分析

一、思路 1.文件 这里由于通讯录实现代码较长&#xff0c;因此分三个文件进行&#xff0c;contact.c用于实现通讯录主体代码&#xff0c;声明各项头文件用contact.h实现&#xff0c;测试用test.c 二.功能 增加联系人删除联系人修改联系人查找指定联系人排序显示通讯录的信息…...

tp5 rewrite nginx重写

tp框架,默认的访问路径是 www.xxxx.com/index.php/admin/shop/index格式的&#xff0c;为了方便和更规范&#xff0c;也看起来有逼格一些&#xff0c;需要将index.php去掉 无index.php就会报404 我这里是宝塔 #地址重写if (!-e $request_filename) {rewrite ^(.*)$ /index.…...

.NET 反射优化的经验分享

比如针对 GetCustomAttributes 通过反射获取属性的优化,以下例子 // dotnet run -c Release -f net7.0 --filter "*" --runtimes net7.0 net8.0public class Tests{public object[] GetCustomAttributes() => typeof(C).GetCustomAttributes(typeof(MyAttribute…...

[特殊字符] 智能合约中的数据是如何在区块链中保持一致的?

&#x1f9e0; 智能合约中的数据是如何在区块链中保持一致的&#xff1f; 为什么所有区块链节点都能得出相同结果&#xff1f;合约调用这么复杂&#xff0c;状态真能保持一致吗&#xff1f;本篇带你从底层视角理解“状态一致性”的真相。 一、智能合约的数据存储在哪里&#xf…...

【论文笔记】若干矿井粉尘检测算法概述

总的来说&#xff0c;传统机器学习、传统机器学习与深度学习的结合、LSTM等算法所需要的数据集来源于矿井传感器测量的粉尘浓度&#xff0c;通过建立回归模型来预测未来矿井的粉尘浓度。传统机器学习算法性能易受数据中极端值的影响。YOLO等计算机视觉算法所需要的数据集来源于…...

OpenPrompt 和直接对提示词的嵌入向量进行训练有什么区别

OpenPrompt 和直接对提示词的嵌入向量进行训练有什么区别 直接训练提示词嵌入向量的核心区别 您提到的代码: prompt_embedding = initial_embedding.clone().requires_grad_(True) optimizer = torch.optim.Adam([prompt_embedding...

项目部署到Linux上时遇到的错误(Redis,MySQL,无法正确连接,地址占用问题)

Redis无法正确连接 在运行jar包时出现了这样的错误 查询得知问题核心在于Redis连接失败&#xff0c;具体原因是客户端发送了密码认证请求&#xff0c;但Redis服务器未设置密码 1.为Redis设置密码&#xff08;匹配客户端配置&#xff09; 步骤&#xff1a; 1&#xff09;.修…...

【Linux】Linux 系统默认的目录及作用说明

博主介绍&#xff1a;✌全网粉丝23W&#xff0c;CSDN博客专家、Java领域优质创作者&#xff0c;掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域✌ 技术范围&#xff1a;SpringBoot、SpringCloud、Vue、SSM、HTML、Nodejs、Python、MySQL、PostgreSQL、大数据、物…...

【C++进阶篇】智能指针

C内存管理终极指南&#xff1a;智能指针从入门到源码剖析 一. 智能指针1.1 auto_ptr1.2 unique_ptr1.3 shared_ptr1.4 make_shared 二. 原理三. shared_ptr循环引用问题三. 线程安全问题四. 内存泄漏4.1 什么是内存泄漏4.2 危害4.3 避免内存泄漏 五. 最后 一. 智能指针 智能指…...

「全栈技术解析」推客小程序系统开发:从架构设计到裂变增长的完整解决方案

在移动互联网营销竞争白热化的当下&#xff0c;推客小程序系统凭借其裂变传播、精准营销等特性&#xff0c;成为企业抢占市场的利器。本文将深度解析推客小程序系统开发的核心技术与实现路径&#xff0c;助力开发者打造具有市场竞争力的营销工具。​ 一、系统核心功能架构&…...

数据结构:递归的种类(Types of Recursion)

目录 尾递归&#xff08;Tail Recursion&#xff09; 什么是 Loop&#xff08;循环&#xff09;&#xff1f; 复杂度分析 头递归&#xff08;Head Recursion&#xff09; 树形递归&#xff08;Tree Recursion&#xff09; 线性递归&#xff08;Linear Recursion&#xff09;…...

2.3 物理层设备

在这个视频中&#xff0c;我们要学习工作在物理层的两种网络设备&#xff0c;分别是中继器和集线器。首先来看中继器。在计算机网络中两个节点之间&#xff0c;需要通过物理传输媒体或者说物理传输介质进行连接。像同轴电缆、双绞线就是典型的传输介质&#xff0c;假设A节点要给…...

【免费数据】2005-2019年我国272个地级市的旅游竞争力多指标数据(33个指标)

旅游业是一个城市的重要产业构成。旅游竞争力是一个城市竞争力的重要构成部分。一个城市的旅游竞争力反映了其在旅游市场竞争中的比较优势。 今日我们分享的是2005-2019年我国272个地级市的旅游竞争力多指标数据&#xff01;该数据集源自2025年4月发表于《地理学报》的论文成果…...