MySQL——通过binlog恢复数据

2023-11-07

目录

1.binlog基本概念

2.MySQL开启binlog

3.使用binlog日志恢复数据

3.1.恢复前准备工作

3.2.数据恢复

3.2.1.通过mysqlbinlog将binlog转为sql,以方便查询具体位置

3.2.2.查看生成的backuptmp.sql,最终确定需要恢复的起始位置为219,结束位置为982

3.2.3.通过mysqlbinlog执行恢复操作


1.binlog基本概念

        二进制日志(binnary log)以事件形式记录了对MySQL数据库执行更改的所有操作。
        binlog是记录所有数据库表结构变更(例如CREATE、ALTER TABLE、DROP等)以及表数据修改(INSERT、UPDATE、DELETE、TRUNCATE等)的二进制日志。不会记录SELECT和SHOW这类操作,因为这类操作对数据本身并没有修改,但可以通过查询通用日志来查看MySQL执行过的所有语句。


binlog有两个常用的使用场景:

2.MySQL开启binlog

        MySQL安装完成后,MySQL5.7版本binlog默认不开启,MySQL8默认开启binlog;登录MySQL后,查看binlog状态sql如下:

show variables like '%log_bin%';

如未开启binlog日志,则可按以下步骤开启binlog日志

 开启binlog日志

修改MySQL配置文件,linux中配置文件为my.conf,window下问my.ini,下面以centos为例演示

  • 编辑配置文件
vim /etc/my.cnf
  • 添加配置项
log-bin=mysql-bin
server-id=1
  • 重启MySQL服务
systemctl restart mysqld
  • 进入MySQL查看binlog日志是否开启成功

log_bin为ON说明这个参数是开启的,就是说系统是记录了bin log的

log_bin_basename配置了bin log的文件路径及文件前缀名

log_bin_index配置了bin log索引文件的路径

  • 查看日志列表
show master logs;

  • 根据log_bin_basename的路径查看binlog具体文件

 3.使用binlog日志恢复数据

原理:当数据库发生变化时,binlog会记录数据库中的所有变化;需要恢复的时候可以根据binlog中的开始位置和结束位置还原本部分操作;结束位置一般是数据被破坏或删除之前的位置。

 3.1.恢复前准备工作

开启binlog之后,创建测试数据库,在测试数据库中创建测试表,并写入数据:

create database test;
use test;
CREATE TABLE `testuser` (
  `id` int(11) NOT NULL,
  `name` varchar(255) DEFAULT NULL,
  `age` decimal(18,2) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

insert  into `testuser`(`id`,`name`,`age`) values (1,'张三',24.00);

 此时假如误删了test数据库,就可以用binlog来进行回复数据库、库中的表及表中的数据;

drop database test;

3.2.数据恢复

当需要恢复数据时,为了防止恢复数据后影响最新业务,需要执行flush logs,产生一个新的binlog文件,此时旧的binlog文件不会再有写入;

下面具体通过mysql-bin.000001来进行数据恢复 

恢复时需要在binlog中找到两个位置:

  • 数据恢复的起始位置
  • 数据恢复的结束位置

如在数据准备中的drop操作,需要在binlog中找到该位置,并将该位置作为数据恢复的结束位置

3.2.1.通过mysqlbinlog将binlog转为sql,以方便查询具体位置

mysqlbinlog --set-charset=utf-8 /var/lib/mysql/mysql-bin.000001>backuptmp.sql

3.2.2.查看生成的backuptmp.sql,最终确定需要恢复的起始位置为219结束位置为982

 

3.2.3.通过mysqlbinlog执行恢复操作

mysqlbinlog -v /var/lib/mysql/mysql-bin.000001 --start-position=219 --stop-position=982 | mysql -uroot -p123456

/var/lib/mysql/mysql-bin.000001  要操作binlog文件

--start-position=219                      数据恢复的起始位置

--stop-position=982                      数据恢复的结束位置

mysql -uroot -p123456                 数据恢复需要登录数据库

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

MySQL——通过binlog恢复数据 的相关文章

  • 通过我的java代码导出数据库

    我想使用我的 java 代码导出我的 MySQL 数据库 但我还没有找到任何办法 我想要做的就是我的应用程序中有一个按钮作为 导出数据库 单击该按钮时 我的数据库应导出到指定的路径 我使用了以下代码 但它不起作用 Runtime runti
  • SQL 检查一组日期是否在指定的日期范围内

    我有一个表 其中保存架构中房间不可用的日期 ROOM ID DATE UNAVAILABLE 我需要一个 sql 查询来检查两个日期范围内是否有可用房间 类似于 Select All rooms that are constantly av
  • MySQL InnoDB 查询性能

    我正在尝试优化一个简单的 sql 查询 该查询将多次运行大量数据 这是场景 MySQL 与 InnoDB 表 where 和 join 中使用的所有字段都已索引 表有 FK 我不需要查询的整个缓存 但每个表的缓存是可能的 表有更多的更新 插
  • 使用唯一索引删除重复项

    我在两个表字段 A B C D 之间插入 相信我已经在 A B C D 上创建了唯一索引以防止重复 然而我以某种方式简单地对这些做了一个正常的索引 因此插入了重复项 这是2000万条记录的表 如果我将现有索引从普通索引更改为唯一索引 或者只
  • MySQL 服务器未启动

    当我做 mysql u root p并输入my password这就是我得到的 错误 2002 HY000 无法通过套接字 var run mysqld mysqld sock 连接到本地 MySQL 服务器 2 所以我输入 systemc
  • PHP PDO相关:更新SQL语句未更新数据库内容

    我正在尝试使用准备好的语句来实现更新语句PHP http en wikipedia org wiki PHP脚本 但它似乎没有更新数据库中的记录 我不确定为什么 所以如果您能分享一些见解 我将不胜感激 Code query UPDATE D
  • 使用按位函数查询 BIT 字段时,MySQL 不使用索引

    我的 MySQL 表中有一个 BIT 类型的字段 我想使用位值存储记录的状态 例如 1 status1 2 status2 4 status3 8 status4 每条记录可以同时具有多种状态 对于 status1 和 status3 该值
  • 单行的总和值?

    我有一个 MySQL 查询 它返回由一系列 1 和 0 组成的单行 它用于进度条指示器 我现在在代码中对它进行求和 但我尝试对查询中的值求和 并意识到我无法使用 SUM 因为它们有很多列 但只有一行 有没有办法可以在查询中自动求和 就像这样
  • 如何以最少的查询次数获取帖子列表和关联标签

    我的表格结构如下 标签 更多的是一个类别 id 标签名称 描述 slug POSTS ID 标题 网址 邮戳 id idPost idTag USERS ID 用户名 userSlug VOTES id idPost idUser 每个帖子
  • 将记录分成两列

    我的数据库中有一个 学生 表 其中包含大约 5 000 条记录 我想将这些记录显示在two分区 如何在不执行查询两次的情况下做到这一点 仅使用单个查询 显示示例http www freeimagehosting net uploads f1
  • 社交应用程序的数据库设计和优化注意事项

    通常的情况 我有一个简单的应用程序 允许人们上传照片并关注其他人 因此 每个用户都会有类似 墙 或 活动源 的东西 他或她可以在其中看到他 她的朋友 他或她关注的人 上传的最新照片 大多数功能都很容易实现 然而 当涉及到这个历史活动源时 由
  • Python:如何使用生成器来避免 sql 内存问题

    我有以下方法来访问 mysql 数据库 并且查询在服务器中执行 我无权更改有关增加内存的任何内容 我对生成器很陌生 并开始阅读更多有关它的内容 并认为我可以将其转换为使用生成器 def getUNames self globalUserQu
  • java mysql 准备好的语句

    我正在尝试使用 java 向数据库中进行简单的插入 它告诉我我的 sql 语法已关闭 但是 当我复制打印出来的字符串并将其放入 phpmyadmin 中的 sql 命令中时 它会正确执行该命令 并且我似乎无法弄清楚 java 中的字符串查询
  • 第三个下拉菜单不从数据库填充

    我有以下 Index php
  • Mysql 检索所有有限制的行

    我想检索特定用户的所有行 限制为 0 x 所以我只是想问是否有任何方法可以检索 mysql 中的所有行 而不调用返回 x 的 count id 的方法 而不重载现有函数 该函数在查询中根本没有限制 与我们的 string Relace 功能
  • 如何正确转义mysql?

    我刚刚发现如果我写 select from tbl where name like foo 然后添加 foo 作为参数及其值 a 用户数据 它不会正确转义 我勒个去 它想要 a 即使我使用参数 我还是忍不住觉得我对 sql 注入持开放态度
  • 为什么我的 if 语句没有按我预期的方式工作?

    我正在尝试实现以下目标 我向我的 SQL 数据库询问使用SELECT FROM subjects 这样做之后我要求使用数组mysqli fetch assoc 在那之前一切都很好 现在的问题是 当我尝试在每个循环中修改 genero 的值
  • 忽略重复条目并在 EF Core 中的 DbContext.SaveChanges() 上提交成功条目

    我有一个 ASP Net Core 2 2 Web API 在我的一个控制器操作中 我向 MySQL 数据库表添加了一堆行 我使用的是 Pomelo 例如 dbContext AddRange entities dbContext Save
  • 将古吉拉特语文本插入 MySQL 表会产生垃圾字符和不可读的文本

    我有三个 MySQL 表 我正在向其中插入古吉拉特语内容 当我插入两个表时 它们插入得很好并且可读 但在一个表中 它显示垃圾字符 不可读的文本 我怎样才能解决这个问题 MySQL 有每个表的字符集设置 http dev mysql com
  • MySQL 按重复项从上到下排序

    我有一个lammer问题 因为我不是mysql专业人士 我有类似的字段 id color 1 red 2 green 3 yellow 4 green 5 green 6 red 我想按重复项进行分组 最常见的重复项先进行分组 所以应该这样

随机推荐

  • 【JavaWeb】练习五

    1 gt 过滤器实现登录过滤 WebFilter urlPatterns do initParams WebInitParam name driver value com mysql jdbc Driver public class Log
  • Springboot 拦截器,拦截所有请求,判断是否登录,验证权限

    Java的三大器 拦截器的作用 Java里的拦截器是动态拦截Action调用的对象 它提供了一种机制可以使开发者在一个Action执行的前后执行一段代码 也可以在一个Action执行前阻止其执行 同时也提供了一种可以提取Action中可重用
  • libevent 事件循环

    include
  • Dubbo zookeeper 初探

    原文地址 http blog csdn net wxwzy738 article details 16330383 转 http blog csdn net u011270461 article details 12144623 建议参考资
  • 信息隐藏技术--图像置乱

    图像置乱 图像置乱是信息隐藏技术的一种 图像置乱后图像无法辨认 可以达到对图像信息的隐藏和保护作用 分类 空域置乱 频域置乱 空频域混合置乱 图像置乱对信息起到了隐藏和保护的作用 既可以对信息进行加密传送 也可以作为图像处理的预处理 图像置
  • Spring系列文章:Bean的获取⽅式

    一 简介 Spring为Bean提供了多种实例化 式 通常包括4种 式 也就是说在Spring中为Bean对象的创建准 备了多种 案 的是 更加灵活 第 种 通过构造 法实例化 第 种 通过简单 模式实例化 第三种 通过factory be
  • ffmpeg中sws_scale()用法实例

    ffmpeg中sws scale 用法实例 视频编码 2009 06 30 10 02 27 阅读1185 评论0 字号 大 中 小 订阅 Copyright C 2003 Michael Niedermayer
  • vue 表单相互校验

    这里举例校验姓和名的长度和不少于3
  • 4个java死锁工具:jstack、jconsole、jvisualvm、jmc

    在 Java 中 死锁 Deadlock 情况是指 两个或两个以上的线程持有不同系统资源的锁 线程彼此都等待获取对方的锁来完成自己的任务 但是没有让出自己持有的锁 线程就会无休止等待下去 线程竞争的资源可以是 锁 网络连接 通知事件 磁盘
  • GB28181视频监控国标平台EasyGBS角色绑定设备通道的功能优化

    GB28181视频监控国标平台EasyGBS是基于国标GB28181协议 支持多路设备同时接入的视频监控 视频云服务平台 支持对多平台 多终端分发RTSP RTMP FLV HLS WebRTC等格式的视频流 国标GB28181平台Easy
  • go网站收藏

    golang修养之路 go每日新闻 go语言社区 go语言设计与实现
  • 报错解决:Process finished with exit code -1073741819 (0xC0000005)

    简单记录一下程序异常终止 抛出 Process finished with exit code 1073741819 0xC0000005 的解决方法 一 程序中文件位置错误 缺少文件 位置错误1 如果使用相对路径的话 推荐换成绝对路径进行
  • 剑指 Offer 11. 旋转数组的最小数字(java+python)

    把一个数组最开始的若干个元素搬到数组的末尾 我们称之为数组的旋转 给你一个可能存在 重复 元素值的数组 numbers 它原来是一个升序排列的数组 并按上述情形进行了一次旋转 请返回旋转数组的最小元素 例如 数组 3 4 5 1 2 为 1
  • Java日志的占位符

    如果日志中是集合 且集合的对象为基本数据类型 那么占位符和基本数据类型保持一致 如果集合对象为自定义对象 那么需要获取对应的实例后再获取对应的属性 看属性的基本数据类型 如果不需要获取属性 就把对象toString后用 s接收 payloa
  • Parse方法解析字符串

    今天才注意到Parse方法解析字符串时可以通过NumberStyles枚举和IFormatProvider接口分析字符串的格式
  • Qt的事件过滤器installEventFilter

    一 介绍 WPF中使用AddHandler来监听事件 那么QT呢 Qt的事件模型是使用一个QObject对象 来监视发送其他QObject对象的事件 在事件到达之前对其进行处理 这里要使用一个函数 void QObject installE
  • Typora主题推荐

    Typora主题推荐 官网 https theme typora io 以前我用的是github主题 现在是Drake 但是字体有点小 改了css 进行微调一下 1 cobalt主题 2 Drake主题 3 fluent主题 4 gitbo
  • 读《自己动手写操作系统》(于渊著)第一节

    最近开始看 自己动手写操作系统 虽然很早以前就读过一点点 但一直没有机会动手实践 本着光说不练假把式的原则 今天动手实践了开头的一部分 说得这么正经其实你就是看了一点点吧 囧 废话不多说 在这里做一个小小的总结 实验环境 操作系统 win7
  • python实现调用科大讯飞语音听写(将音频识别成文字输出)

    一 大致流程 1 申请科大讯飞账号 https passport xfyun cn register 2 创建应用 应用平台选择WebAPI 3 查看开发文档 4 根据开发文档和示例代码进行调试 二 申请科大讯飞账号 首先我们先去科大讯飞开
  • MySQL——通过binlog恢复数据

    目录 1 binlog基本概念 2 MySQL开启binlog 3 使用binlog日志恢复数据 3 1 恢复前准备工作 3 2 数据恢复 3 2 1 通过mysqlbinlog将binlog转为sql 以方便查询具体位置 3 2 2 查看