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_F

BINLOG '
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 表, 然后重命名为原表, 全部流程对应下面选中的内容, 核心在 Table_map 和 Write_rows 两个事件, 加上前面创建表的步骤, 即可还原数据, 最终确定本次恢复数据的 binlog 起始点和结束点分别为 361653031 和 361656701

在这里插入图片描述

还原数据

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

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

循环神经网络-1

目录 1 数据集构建 1.1 数据集的构建函数 1.2 加载数据并进行数据划分 1.3 构造Dataset类 2 模型构建 2.1 嵌入层 2.2 SRN层 2.3 线性层 2.4 模型汇总 3 模型训练 3.1 训练指定长度的数字预测模型 3.2 多组训练 3.3 损失曲线展示 4 模型评价 总结 参考文献 循环神经网络&…

记录一下如何使用python生成二维码 并简单练习命令行参数供初学者参考

主代码main.py 后面是演示效果图: import argparse import sysimport qrcode import os qr qrcode.QRCode(version1,error_correctionqrcode.constants.ERROR_CORRECT_L,box_size10,border4, ) fileList[] fileName[]parserargparse.ArgumentParser(description生…

Uncaught ReferenceError: jQuery is not defined解决方法

当我在写java的Maven项目时,出现了这样的一个报错信息: 我一直找代码,抓包,调试,比对代码 jQuery未定义就是指JS的导包没有导进来!!!! 导进来就运行正常啦

Docker部署Nacos集群并用nginx反向代理负载均衡

首先找到Nacos官网给的Github仓库,里面有docker compose可以快速启动Nacos集群。 文章目录 一. 脚本概况二. 自定义修改1. example/cluster-hostname.yaml2. example/.env3. env/mysql.env4. env/nacos-hostname.env 三、运行四、nginx反向代理,负载均衡…

二、SpringFramework 介绍

2.1 Spring 和 SpringFramework概念 https://spring.io/projects 广义的 Spring:Spring 技术栈(全家桶) 广义上的 Spring 泛指以 Spring Framework 为基础的 Spring 技术栈。 经过十多年的发展,Spring 已经不再是一个单纯的应…

OpenHarmony 如何去除系统锁屏应用

前言 OpenHarmony源码版本:4.0release / 3.2 release 开发板:DAYU / rk3568 一、3.2版本去除锁屏应用 在源码根目录下:productdefine/common/inherit/rich.json 中删除screenlock_mgr组件的编译配置,在rich.json文件中搜索th…

保姆级:Windows Server 2012上安装.NET Framework 3.5

目录 一.问题所在无法在安装SQL server2008(2012) 1.无法安装一下功能 .NET Framework 3.5 二.解决措施 1、打开服务器管理器 2、添加角色和功能 3、选择安装功能 4、指定备用源路径 5、配置本地文件路径 一.问题所在无法在安装SQL server2008&…

西南交通大学【数据结构实验8】

实验内容及要求: 编写控制台应用程序,提供以下菜单项: 插入元素 从键盘输入若干两两互不相同的非0整数,直到输入0时停止。将输入的所有非0整数按输入次序插入二叉排序树(初始时是空树)。 插入某个非0整数时,若该整…

算法Day30 餐厅的套餐

餐厅的套餐 Description 假设有一家餐厅,菜单上有n道菜可供选择,现在需要从中选择k道菜组成一份套餐。请设计一个算法,返回所有可能但互不相同的菜品组合。 Input 不同菜品的id各不相同,分别为1,2,3…n,输入内容依次为n和k的值&a…

skynet 中 mongo 模块运作的底层原理解析

文章目录 前言总览全流程图涉及模块关系连接数据库函数调用流程图数据库操作函数调用流程图涉及到的代码文件 建立连接SCRAMSASL 操作数据库结语参考链接 前言 这篇文章总结 skynet 中 mongo 的接入流程,代码解析,读完它相信你对 skynet 中的 mongo 调用…

Python:核心知识点整理大全16-笔记

目录 8.2.3 默认值 8.2.4 等效的函数调用 8.2.5 避免实参错误 8.3 返回值 8.3.1 返回简单值 formatted_name.py 8.3.2 让实参变成可选的 8.3.3 返回字典 往期快速传送门👆(在文章最后): 8.2.3 默认值 编写函数时&#xff…

Docker镜像构建:深入Dockerfile创建自定义镜像

Docker的强大之处在于其能够通过Dockerfile定义和构建自定义镜像,为应用提供独立、可移植的运行环境。在这篇博客文章中,将深入探讨Docker镜像构建的核心概念,通过更加丰富的示例代码,帮助大家全面理解和掌握构建自定义镜像的技术…

机器学习笔记 - 基于C# + .net framework 4.8的ONNX Runtime进行分类推理

该示例是从官方抄的,演示了如何使用 Onnx Runtime C# API 运行预训练的 ResNet50 v2 ONNX 模型。 我这里的环境基于.net framework 4.8的一个winform项目,主要依赖下面版本的相关库。 Microsoft.Bcl.Numerics.8.0.0 Microsoft.ML.OnnxRuntime.Gpu.1.16.3 SixLabors.ImageShar…

掌握iText:轻松处理PDF文档-高级篇-添加水印

前言 iText作为一个功能强大、灵活且广泛应用的PDF处理工具,在实际项目中发挥着重要作用。通过这些文章,读者可以深入了解如何利用iText进行PDF的创建、编辑、加密和提取文本等操作,为日常开发工作提供了宝贵的参考和指导。 掌握iText&…

并发编程-线程等待唤醒机制

目录 前言 ​编辑 线程等待和唤醒的方法 wait() 方法: notify() 方法: 注意事项和建议: 我的其他博客 前言 程等待唤醒机制是多线程编程中用于线程之间协调和通信的一种机制。在多线程环境中,有时候一个线程需要等待某个条件…

【大数据】Doris 架构

Doris 架构 Doris 的架构很简洁,只设 FE(Frontend)、BE(Backend)两种角色、两个进程,不依赖于外部组件,方便部署和运维,FE、BE 都可线性扩展。 ✅ Frontend(FE&#xff0…

C++_类的定义和使用

目录 1、类的引用 1.1 类的成员函数 1.2 类成员函数的声明和定义 2、类的定义 2.1 类的访问限定(封装) 3、类重名问题 4、类的实例化 4.1 类的大小 5、隐含的this指针 5.1 空指针问题 结语: 前言: C的类跟c语言中的结…

Standoff 12 网络演习

在 11 月 21 日至 24 日于莫斯科举行的 "Standoff 12 "网络演习中,Positive Technologies 公司再现了其真实基础设施的一部分,包括软件开发、组装和交付的所有流程。安全研究人员能够在安全的环境中测试系统的安全性,并尝试将第三方…

GO闭包实现原理(汇编级讲解)

go语言闭包实现原理(汇编层解析) 1.起因 今天开始学习go语言,在学到go闭包时候,原本以为go闭包的实现方式就是类似于如下cpp lambda value通过值传递,mutable修饰可以让value可以修改,但是地址不可能一样value通过引用传递,但是在其他地方调用时,这个value局部变量早就释放,…

低多边形植物模型法线贴图

在线工具推荐: 3D数字孪生场景编辑器 - GLTF/GLB材质纹理编辑器 - 3D模型在线转换 - Three.js AI自动纹理开发包 - YOLO 虚幻合成数据生成器 - 三维模型预览图生成器 - 3D模型语义搜索引擎 当谈到游戏角色的3D模型风格时,有几种不同的风格&#xf…