【问题】

假设有这种场景,误操作DROP DB或TABLE,常规的恢复操作是还原全备份,并用mysqlbinlog追加到drop操作前的位置。

如果需要恢复的binlog的日志量比较大而我们只希望恢复某个DB或某张表,常规操作会花费较长的时间。

在网上看到了借助SQL Thread来应用binlog的方法,做测试验证是可行的。

【原理】

1、Binlog是MySQL Server产⽣的,记录数据库的逻辑变化

2、Relay-log 是Master/Slave结构中Slave的IO_thread从主库获取变更日志,记录到slave本地

3、binlog和Relay-log实际记录的内容是完全一致的

【实现思路】

1、将源服务器需要追加的binlog文件拷贝到目标服务器数据目录下,修改为relay-log的命名规范

2、CHANGE REPLICATION FILTER REPLICATE_DO_TABLE=(db1.t1);设置过滤只复制某个DB或某张表

3、然后使用START SLAVE SQL_THREAD UNTIL SQL_BEFORE_GTIDS语法还原到指定的GTID位置

4、开启并行复制加速binlog应用的速度,最新的MySQL5.7.23可以使用基于WRITESET的并行复制

【测试脚本】

(以MySQL5.7下误DROP TABLE test.test1为例,5.6也可以用同样的思路,但位置信息和筛选信息的脚本有差异,下面脚本供参考)

1、源实例做全备

innobackupex --socket=/data/mysql/mysql-replica01/mysql.sock --user=root --password= /data/backup

2、清空目标实例数据目录并还原全备

innobackupex --apply-log /data/backup/2018-10-24_13-22-09

innobackupex --defaults-file=/etc/my.cnf.d/replica02.cnf --copy-back /data/backup/2018-10-24_13-22-09

3、修改数据目录文件权限

chown -R mysql:mysql *

4、启动目标实例

systemctl start mysqld@replica02.service

5、连接目标实例,随便指定一个master_host信息,这个命令只是为了标识目标实例是slave角色

CHANGE MASTER TO MASTER_HOST='192.192.192.192';

6、systemctl stop mysqld@replica02.service

7、清理数据目录下生成的relay-log相关文件

rm -rf *relay*

8、将源实例的binlog备份拷贝到目录实例数据目录下,并修改命名规则,并修改权限

cp /data/mysql/mysql-replica01/TEST-bin.000414 /data/mysql/mysql-replica02

cp /data/mysql/mysql-replica01/TEST-bin.000415 /data/mysql/mysql-replica02

mv TEST-bin.000414 TEST-relay-bin.000414

mv TEST-bin.000415 TEST-relay-bin.000415

echo './TEST-relay-bin.000414'  > TEST-relay-bin.index

echo './TEST-relay-bin.000415'  >> TEST-relay-bin.index

chown -R mysql:mysql *

9、systemctl start mysqld@replica02.service

10、依据还原目录下的xtrabackup_info文件指定Relay_Log_File位置,但注意需要将binlog文件名称替换为relay log的命名规则

CHANGE MASTER TO Relay_Log_File='TEST-relay-bin.000414',relay_log_pos=1126;

11、指定筛选条件,只还原某个DB或某个表

CHANGE REPLICATION FILTER REPLICATE_DO_TABLE=(test.test1);

12、还原到drop table之前的位置

START SLAVE SQL_THREAD UNTIL SQL_BEFORE_GTIDS='86c67cfe-8b18-11e8-9e4c-246e965710f8:478351666';

13、将目标表导入到需要恢复的源实例

MySQL DROP DB或TABLE场景下借助SQL Thread快速应用binlog恢复方案的更多相关文章

  1. 在Docker应用场景下 如何使用新技术快速实现DevOps

    在Docker应用场景下 如何使用新技术快速实现DevOps @Container容器技术大会是由国内容器技术社区DockOne组织的专为一线开发者和运维工程师设计的顶级容器技术会议,会议强调实践和交 ...

  2. 【转】MySQL乐观锁在分布式场景下的实践

    背景 在电商购物的场景下,当我们点击购物时,后端服务就会对相应的商品进行减库存操作.在单实例部署的情况,我们可以简单地使用JVM提供的锁机制对减库存操作进行加锁,防止多个用户同时点击购买后导致的库存不 ...

  3. MySQL乐观锁在分布式场景下的实践

    背景 在电商购物的场景下,当我们点击购物时,后端服务就会对相应的商品进行减库存操作.在单实例部署的情况,我们可以简单地使用JVM提供的锁机制对减库存操作进行加锁,防止多个用户同时点击购买后导致的库存不 ...

  4. Ubuntu下借助URLOS实现快速安装DzzOffice企业办公套件

    如今,越来越多的个人.团队甚至企业都在使用GSuite或者Office365等网络办公套件,为什么人们越来越喜爱使用网络办公套件?一方面是考虑数字资产的安全性以及管理效率,另一方面则是日益增大的协同办 ...

  5. MySQL在大数据、高并发场景下的SQL语句优化和"最佳实践"

    本文主要针对中小型应用或网站,重点探讨日常程序开发中SQL语句的优化问题,所谓“大数据”.“高并发”仅针对中小型应用而言,专业的数据库运维大神请无视.以下实践为个人在实际开发工作中,针对相对“大数据” ...

  6. MySQL DROP TABLE操作以及 DROP 大表时的注意事项【转】

    删表 DROP TABLE Syntax DROP [TEMPORARY] TABLE [IF EXISTS] tbl_name [, tbl_name] ... [RESTRICT | CASCAD ...

  7. 秒杀场景下MySQL的低效(转)

    秒杀场景下MySQL的低效 2016-01-14 17:12 178人阅读 评论(0) 收藏 举报 最近业务试水电商,接了一个秒杀的活.之前经常看到淘宝的同行们讨论秒杀,讨论电商,这次终于轮到我们自己 ...

  8. 不同场景下 MySQL 的迁移方案

    一 目录 一 目录 二 为什么要迁移 三 MySQL 迁移方案概览 四 MySQL 迁移实战 4.1 场景一 一主一从结构迁移从库 4.2 场景二 一主一从结构迁移指定库 4.3 场景三 一主一从结构 ...

  9. 【转载】秒杀场景下MySQL的低效原因和改进以及Redis的处理

    分享的PPT在如下网址: http://www.doc88.com/p-4199037770087.html 秒杀场景下mysql的低效原因和改进 另外有一个篇文章是针对以上内容的总结: http:/ ...

随机推荐

  1. Mac OS X下:TensorBoard可视化问题

    花了1,2个小时,Tensorboard Garphs一直不显示,最后发现竟然是多了一个“=”号

  2. node爬虫进阶版

    手写了一个方便爬虫的小库: const url = require('url') const glib = require('zlib') //默认头部 const _default_headers ...

  3. faster rcnn 详解

    转自:https://zhuanlan.zhihu.com/p/31426458 经过R-CNN和Fast RCNN的积淀,Ross B. Girshick在2016年提出了新的Faster RCNN ...

  4. Hadoop基础-Map端链式编程之MapReduce统计TopN示例

    Hadoop基础-Map端链式编程之MapReduce统计TopN示例 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.项目需求 对“temp.txt”中的数据进行分析,统计出各 ...

  5. css拾遗(一)(inline-block,absolute)

    一:inline-block中不要嵌套其他block标签,不然会破坏布局 <style> .left{ float:left; } .hide{ display:none; } a{ di ...

  6. 【DS】排序算法之快速排序(Quick Sort)

    一.算法思想 快速排序,顾名思义,效率比较于其他算法,效率比较高.<算法导论>也专门对其进行讲解.其算法设计使用分治思想,如下: 1)从数组A[p...r]中选择一个元素,将数组划分成两个 ...

  7. python 玩具代码

    脚本语言的第一行,目的就是指出,你想要你的这个文件中的代码用什么可执行程序去运行它,就这么简单 #!/usr/bin/python是告诉操作系统执行这个脚本的时候,调用/usr/bin下的python ...

  8. JavaScript编写风格指南 (二)

    七:注释 // 频繁的使用注释有助于他人理解你的代码// 1.代码晦涩难懂// 2.可能被误认为是错误的代码// 3.必要但不明显的针对特定浏览器的代码// 4.对于对象,方法或者属性,生成文档是有必 ...

  9. Linux - sed 文本操作

    SED 是一项Linux指令,功能同awk类似,差别在于,sed简单,对列处理的功能要差一些,awk的功能复杂,对列处理的功能比较强大. sed全称是:Stream EDitor 调用sed命令有两种 ...

  10. HDU 2112 HDU Today 最短路

    题目描述: Problem Description 经过锦囊相助,海东集团终于度过了危机,从此,HDU的发展就一直顺风顺水,到了2050年,集团已经相当规模了,据说进入了钱江肉丝经济开发区500强.这 ...