MySQL 基于时间点的快速恢复方案

 更新时间:2020年11月11日 14:59:27   作者:AsiaYe  
这篇文章主要介绍了MySQL 基于时间点的快速恢复方案,帮助大家更好的理解和使用MySQL,感兴趣的朋友可以了解下

  之所以有这样一篇文章,是因为在前几天的一个晚上,要下班的时候,业务方忽然有一个需求,是需要恢复一个表里面的数据,当时问了下情况,大概是这样的:业务方不小心在一个表里面做了一个update的操作,可能是where条件没有写对,导致表里面的数据被写坏了,但是数据目前还没有落盘,只是在内存中的值修改了,现在要求恢复到之前的数据。万幸,这份数据是平台上某些商品的价格,基本上是有限个商品,然后价格值也都是固定的,之前有对这个价格表进行备份,于是给他直接重新导入了一份价格表的数据,这个问题也算是解决了。

    当时我在想,如果我没有备份,只有binlog,这个时候如果这个问题让我来恢复,那么有什么更好的办法么?新建一个实例,全库还原,然后应用备份的binlog,一直去追,追到数据被该坏的时间点。

 使用mysqlbinlog工具重放事务,这种方法会有很多陷阱,比如:

     1、只能每次运行一个mysqlbinlog命令,一次对一个binlog文件执行重放,无法并行多命令运行,因为在执行重放的时候会产生一个临时表,会有冲突,造成失败。

     2、它是一个原子操作。如果它在运行到半途中间的时候失败,将很难知道它在哪失败,也很难基于先前的时间点重新开始。导致失败的理由会有很多:一些并发事务引起的Innodb lock wait timeout ,server和client设置的max_allowed_packet不同,以及查询过程中失去跟mysql server的连接,等等。

    于是翻了翻percona的博客,找到一种方法,看了看精髓,就大概记录了下来,这儿方法我还没有亲自实现,只是记录在这里,以后有时间了可以亲自操作一把,看看是否能够比较高效的解决这个问题。

    大体思路如下:

 2台额外机器,第1台用于做备份结果数据的恢复,另外1台用于将原主的binlog拷贝至该实例然后模拟原主,然后第一台与第二台建立主从关系,change master to 第二台,位置点位备份结果(xtrabackup_binlog_info中的binlog名和pos),然后同步至误操作点停止,将恢复的表,导出,然后恢复至生产原主。

    具体的步骤如下:

1、准备一台机器,用于将该实例的最新备份的结果数据,进行备份还原

2、准备另外一台机器了,新实例,将原master的binlog文件,拷贝至该实例的数据目录下, 启动一个空实例(server-id跟原主一致, --log_bin=master-bin  binlog文件名保持跟原主一致;),然后停掉它,删除所有它自动创建的binlogs,解压缩并拷贝所有需要的binlogs(来自于原生产实例)到它的数据目录下,然后重新启动它。

    最新备份数据的位置:

    如果启动正常,则连接mysql,查看binlog相关信息:

3、建立同步关系,并同步到误操作动作的位置前停止

 CHANGE MASTER TO 

MASTER_HOST='127.0.0.1',

MASTER_PORT=3307,

MASTER_USER='root',

MASTER_PASSWORD='secret',

MASTER_LOG_FILE='master-bin.000007', MASTER_LOG_POS=1518932;

START SLAVE UNTIL 

MASTER_LOG_FILE = 'log_name', 

MASTER_LOG_POS = log_pos 

或者

START SLAVE SQL_THREAD UNTIL

 SQL_AFTER_GTIDS =

 3E11FA47-71CA-11E1-9E33-C80AA9429562:11-56

SHOW SLAVE STATUSG;

    相当于多用了一台实例,提高二进制日志的利用速率,提高二进制日志的利用的成功率。这个方法是否可行,还有待验证,按照文章中作者讲述的思想来看,是比单实例应用binlog的方法好,因为一旦发生了应用binlog过程中的错误,它能够快速确定实在那个点位发生的错误,有助于我们快速解决问题。

以上就是MySQL 基于时间点的快速恢复方案的详细内容,更多关于MySQL 快速恢复的资料请关注脚本之家其它相关文章!

相关文章

  • MySQL分区表的局限和限制详解

    MySQL分区表的局限和限制详解

    本文对Mysql分区表的局限性做了一些总结,因为个人能力以及测试环境的 原因,有可能有错误的地方,还请大家看到能及时指出,当然有兴趣的朋友可以去官方网站查阅。
    2017-03-03
  • 实现数据库水平切分的两个思路

    实现数据库水平切分的两个思路

    今天小编就为大家分享一篇关于实现数据库水平切分的两个思路,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2019-03-03
  • Centos7.5安装mysql5.7.24二进制包方式部署

    Centos7.5安装mysql5.7.24二进制包方式部署

    这篇文章主要介绍了Centos7.5安装mysql5.7.24二进制包方式部署,本文分步骤给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2018-12-12
  • mysql 8.0.15 安装配置图文教程

    mysql 8.0.15 安装配置图文教程

    这篇文章主要为大家详细介绍了mysql 8.0.15 安装配置图文教程,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-03-03
  • MySQL 8.0 redo log的深入解析

    MySQL 8.0 redo log的深入解析

    这篇文章主要介绍了MySQL 8.0 redo log的深入解析,帮助大家更好的理解和学习使用MySQL数据库,感兴趣的朋友可以了解下
    2021-03-03
  • MySql安装步骤图文教程及中文乱码的解决方案

    MySql安装步骤图文教程及中文乱码的解决方案

    这篇文章主要介绍了MySql安装步骤图文教程及中文乱码的解决方案,非常不错,具有参考借鉴价值,需要的朋友可以参考下
    2016-08-08
  • MySQL学习教程之聚簇索引

    MySQL学习教程之聚簇索引

    这篇文章主要给大家介绍了关于MySQL学习教程之聚簇索引的相关资料,文中通过图文介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-11-11
  • mysql导出表的字段和相关属性的步骤方法

    mysql导出表的字段和相关属性的步骤方法

    在本篇文章里小编给大家分享了关于mysql导出表的字段和相关属性的步骤方法,有需要的朋友们跟着学习下。
    2019-01-01
  • MySQL的安全问题从安装开始说起

    MySQL的安全问题从安装开始说起

    本篇文章小编为大家介绍,关于MySQL的安全问题从安装开始说起,有需要的朋友可以参考一下
    2013-04-04
  • MySQL DELETE语法使用详细解析

    MySQL DELETE语法使用详细解析

    此文章主要讲述的是MySQL DELETE语法的详细解析,以及一些在实际操作中值得我们大家注意的相关事项的描述,以下就是正文的主要内容
    2013-03-03

最新评论