MySQL——通过binlog恢复数据

这篇具有很好参考价值的文章主要介绍了MySQL——通过binlog恢复数据。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

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执行恢复操作


前言mysqldumpbinlog都可以作为MySQL数据库备份的方式:

  • mysqldump用于将整个或部分数据库导出为可执行的SQL文件,也可以用于导入或还原数据库,它可以创建一个数据库的逻辑备份,包括表结构和数据
  • binlog(二进制日志)是一种事务日志,记录了对数据库进行的每个更改操作,如插入、更新、删除等。它用于增量备份和数据恢复,可以重放这些更改以还原到之前的状态

mysqldumpbinlog的主要区别如下:

  1. 数据格式:mysqldump生成的备份文件是以文本形式保存的SQL语句,可以读取和修改。binlog则是以二进制格式保存的事务日志,不能直接查看或修改,需要专门的工具(如mysqlbinlog)进行解析和分析。
  2. 备份范围:mysqldump可以备份整个数据库或特定的表,以及备份时可以选择备份的数据内容(例如只备份表结构、只备份数据等)。而binlog会记录所有的更改操作,包括对表结构和数据的更改,因此可以用来恢复到任何一个时间点之前的状态。
  3. 使用场景:mysqldump适用于定期完整备份数据库或移植数据库,以便将数据导入到不同的MySQL服务器。binlog则适用于增量备份和恢复,可以用于故障恢复、数据同步、主从复制等场景。

使用mysqldump备份数据和还原传送门使用mysqldump备份与恢复数据https://blog.csdn.net/DreamEhome/article/details/133580992

1.binlog基本概念

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


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

  • 主从复制:master节点开启binlog,master把它的二进制日志传递给slaves来达到master-slave数据一致的目的(详见MySQL实操(二)——MySQL主从同步实战_醉酒的戈多的博客-CSDN博客)。
  • 数据恢复:通过mysqlbinlog工具来恢复数据(本文主要讲解功能)。

2.MySQL开启binlog

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

show variables like '%log_bin%';

MySQL——通过binlog恢复数据

如未开启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日志是否开启成功

MySQL——通过binlog恢复数据

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

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

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

  • 查看日志列表
show master logs;

MySQL——通过binlog恢复数据

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

MySQL——通过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);

MySQL——通过binlog恢复数据

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

drop database test;

3.2.数据恢复

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

MySQL——通过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

MySQL——通过binlog恢复数据

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

MySQL——通过binlog恢复数据

 MySQL——通过binlog恢复数据

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                 数据恢复需要登录数据库

MySQL——通过binlog恢复数据文章来源地址https://www.toymoban.com/news/detail-462933.html

到了这里,关于MySQL——通过binlog恢复数据的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • mysql误删数据后,从binlog中进行恢复删除数据(拯救手残,不跑路)

    在一次数据维护过程中,对数据删除时没有提前备份数据,导致数据被删除后无法通过备份文件直接恢复。 数据如果在删除前提前备份好,那么直接从备份文件中恢复。 如果没有备份文件,则需要查看mysql数据库是否打开logbin日志。如果没有打开直接GG。如果恰好打开了的,

    2024年02月16日
    浏览(10)
  • MySQL 和 Redis 如何保证数据一致性,通过MySQL的binlog实现

    1、简介         MySQL 和 Redis 如何保证数据一致性,目前大多讨论的是先更新Redis后更新MySQL,还是先更新MySQL 后更新Redis,这两种方式在实际的应用场景中都不能确保数据的完全一致性,在某些情况下会出现问题,本文介绍使用 Canal 工具,通过将自己伪装成MySQL的从节点,读

    2024年02月02日
    浏览(24)
  • mysql binlog 日志详解及恢复

    一、binlog概述 binlog是Mysql sever层维护的一种二进制日志,与innodb引擎中的redo/undolog是完全不同的日志; 其主要是用来记录对mysql数据更新或潜在发生更新的SQL语句,并以\\\"事务\\\"的形式保存在磁盘中; 作用主要有: 复制:MySQL Replication在Master端开启binlog,Master把它的二进制日志传

    2024年02月12日
    浏览(10)
  • MYSQL8 通过ibd文件恢复表数据

    目录 1.新建一个与原表结构相同的表,如果不记得的话,也可通过ibd文件查询表结构,方法如下:  2.移除表空间  3.关闭mysql服务,将备份的ibd文件 放入合适位置  4.重新导入表空间  5.注意点: 注意:mysql8以上只有ibd文件,没有frm文件 1.新建一个与原表结构相同的表,如果

    2024年02月08日
    浏览(11)
  • mysql通过.frm和.ibd 文件恢复数据库

     问题背景:由于强制在服务关闭mysql导致部分数据表以及数据丢失 如下图只有.frm .ibd的文件为我的问题文件 查找不到表结构和表数据目录D:XXXXmysql-5.7.24-winx64datamydata  从frm文件中恢复表结构 先把原来的数据备份一次 避免过程中出错 先备份之前数据的.frm 和.ibd文件,并创

    2024年02月10日
    浏览(17)
  • 接着聊聊如何从binlog文件恢复误delete的数据,模拟Oracle的闪回功能

    看腻了文章就来听听视频演示吧:https://www.bilibili.com/video/BV1cV411A7iU/ delete忘加where条件(模拟Oracle闪回) 操作基本等同于上篇:再来谈谈如何从binlog文件恢复误update的数据,模拟Oracle的回滚功能 原理 :binlog的ROW模式将记录的delete语句内容转换成insert语句 步骤 : 查找误操作

    2024年02月07日
    浏览(15)
  • mysql关闭binlog日志,删除binlog数据(win和linux通用)

    打开 mysql 命令窗口,查询 binlog 是否开启   (ON)为开启状态 (OFF)为关闭状态 若开启状态则需要修改配置文件,反之不需要任何操作 在 C:ProgramDataMySQLMySQL Server 8.0 路径下打开 my.ini 并注释掉 bin-log 配置项然后在其后面加入skip-log-bin   重启mysql服务   打开 mysql 命令窗口,

    2024年02月07日
    浏览(9)
  • Mysql 数据库开启 binlog

    在MySQL中,binlog指的是binary log,二进制日志文件。这个文件记录了MySQL所有的DML操作。通过binlog日志,我们可以做数据恢复,做主从复制等等。对于运维或架构人员来说,开启binlog日志功能非常重要。 (如何开启MySQL的binlog日志呢?下面将介绍两种方法) 2.1 方法一:在my.cn

    2024年02月13日
    浏览(13)
  • [数据库]MYSQL之授予/查验binlog权限

    在后端做MySQL主从备份;亦或是在大数据领域中,各类CDC同步( Canal / Flink CDC 等),均会基于 MYSQL 的 binlog 来实现。 因此,知道需要哪些权限?怎么去查验、怎么授权就很重要了。 感觉网上的文章没成体系地清楚,而今天工作上处理问题的过程中遇到了此疑问,且曾多次对

    2024年02月01日
    浏览(11)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包