【问题】

假设有这种场景,误操作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. 配置使用 NTP

    1. 安装chrony(时间同步客户端) ubuntu/debian: apt-get install chrony Centos/redhat/alios: yum install chrony 2 ...

  2. OpenStack 认证服务 KeyStone 服务注册(五)

    创建服务实体和API端点 创建服务 openstack service create --name keystone --description "OpenStack Identity&qu ...

  3. python操作txt文件中数据教程[3]-python读取文件夹中所有txt文件并将数据转为csv文件

    python操作txt文件中数据教程[3]-python读取文件夹中所有txt文件并将数据转为csv文件 觉得有用的话,欢迎一起讨论相互学习~Follow Me 参考文献 python操作txt文件中 ...

  4. python---django使用数据库(orm)

    官方教程点击此处 项目默认使用sqlite DATABASES = { 'default': { 'ENGINE': 'django.db.backends.sqlite3', 'NAME': os. ...

  5. 20155306 2016-2017-2 《Java程序设计》第八周学习总结

    20155306 2016-2017-2 <Java程序设计>第八周学习总结 教材学习内容总结 第十五章 通用API 15.1 日志 java.util.loggging包提供了日志功能相 ...

  6. C++--------------------------------指针和数组替换使用原因

    马上要考试了,复习数据结构中,对C的指针不太了解,在严蔚敏<数据结构(C语言版)>中,发现p22定义顺序存储结构: typedef srtuct{ ElemType *elem; //存储 ...

  7. CTSC/APIO2018滚粗记

    CTSC/APIO2018滚粗记 前言 从\(5.5\)晚上的火车到\(5.14\)早上的高铁 \(10\)天的时间真的过去的很快. 眨眼间,就到了今天晚上的颁奖. 至于结果如何,反而并不是那么重要了 ...

  8. 面积并+扫描线 覆盖的面积 HDU - 1255

    题目链接:https://cn.vjudge.net/problem/HDU-1255 题目大意:中文题目 具体思路:和上一篇的博客思路差不多,上一个题求的是面积,然后我们这个地方求的是啊覆盖两次及两 ...

  9. 「Android 开发」入门笔记

    「Android 开发」入门笔记(界面编程篇) ------每日摘要------ DAY-1: 学习笔记: Android应用结构分析 界面编程与视图(View)组件 布局管理器 问题整理: Andr ...

  10. 洛谷 P4656: LOJ 2484: [CEOI2017]Palindromic Partitions

    菜菜只能靠写简单字符串哈希维持生活. 题目传送门:LOJ #2484. 题意简述: 题面讲得很清楚了. 题解: 很显然从两边往中间推,能选的就选上这个贪心策略是对的. 如何判断能不能选上,直接字符串哈 ...