MySQL基于复制线程实现MTS并行恢复binlog

2023-11-07

一、MySQL备份恢复流程

  MySQL数据恢复通常分为两个步骤:

  • 恢复全备数据,MySQL有多种备份工具,分为物理备份和逻辑备份;具体可以参看下面这篇文章

    • MySQL备份—xtrabackup&mysqldump&mydumper
  • 恢复增量数据,通过binlog将数据追到指定位点:改操作利用的是MySQL自身binlog日志进行回溯指定区间的数据,但是该方式有个缺点就是单线程,导致对于大量增量数据需要恢复的场景会变的很慢。

二、并行恢复binlog原理

  当我们正常主从复制的时候,可以使用MTS复制,具体可以参考这篇文章:

  因为relaylog和binlog本质实际上是一样的,所以我们可以通过将binlog伪装成relaylog来让MySQL认为我们的binlog是主库传过来的,那么就可以默认利用自身的MTS复制来实现并行恢复binlog的需求。

三、操作步骤

创建测试库

root@mysql 15:18:  [(none)]> create database sbtest;
Query OK, 1 row affected (0.00 sec)

全备

innobackupex --defainnobackupex --defaults-file=/etc/my.cnf --user=sysbench --password='sysbench'  --host=127.0.0.1 --port=3306  /data/innobackup --parallel=2 &>>/data/log

制造测试数据,删库

sysbench /usr/share/sysbench/oltp_read_only.lua --mysql-host=10.0.4.13 --mysql-port=3306 --mysql-user=sysbench --mysql-password='sysbench' --mysql-db=sbtest --tables=2 --table-size=1000000 --auto_inc=off --report-interval=2 --threads=2 prepare
Database changed
root@mysql 15:26:  [sbtest]> select count(*) from sbtest1;
+----------+
| count(*) |
+----------+
|  1000000 |
+----------+
1 row in set (0.16 sec)

root@mysql 15:26:  [sbtest]> select count(*) from sbtest2;
+----------+
| count(*) |
+----------+
|  1000000 |
+----------+
1 row in set (0.16 sec)

root@mysql 15:26:  [sbtest]> drop database sbtest;
Query OK, 2 rows affected (0.19 sec)

恢复全备

 innobackupex --defaults-file=/etc/my.cnf --user=sysbench --password=sysbench --host=127.0.0.1 --port=3306  --apply-log /data/innobackup/2023-07-30_15-19-18/
  innobackupex --defaults-file=/etc/my.cnf --user=sysbench --password=sysbench --host=127.0.0.1 --port=3306  --copy-back /data/innobackup/2023-07-30_15-19-18/
   chown -R mysql.mysql /data/mysql/

传统方式binlog增量日志导入恢复

[root@VM-4-13-centos ~]# mysql
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 2
Server version: 5.7.42-log MySQL Community Server (GPL)

Copyright (c) 2000, 2023, Oracle and/or its affiliates.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

   root@mysql 18:47:  [(none)]> use sbtest;
Database changed
root@mysql 18:48:  [sbtest]> show tables;
Empty set (0.00 sec)

cat xtrabackup_binlog_info
binlog.000001   319     6acb3106-2de5-11ee-8031-525400fd3257:1


time mysqlbinlog --time mysqlbinlog --no-defaults binlog.000001 --start-position=319 --stop-position=381831946 | mysql

real    0m47.843s
user    0m6.123s
sys     0m1.694s

MTS并行恢复binlog,以实现恢复测试数据且过滤删库操作

#将relay log info的repository改到file中,并生成这个文件
SET GLOBAL relay_log_info_repository='FILE';
CHANGE MASTER TO master_host='1',master_password='1',master_user='1',master_log_file='1',master_log_pos=4;
#关闭实例,将需要增量的binlog文件伪装成relaylog
rm -f  /data/mysql/binlog/relaylog.000001
cp binlog.000001 /data/mysql/binlog/relaylog.000001
chown mysql:mysql -R /data/mysql/binlog
#修改relay.info文件和relay-log.index文件
将relay-log.info的第二三行改成需要执行的第一个binlog(现在是relaylog)的文件名和position:
将需要执行的relaylog写入relaylog.index
#启动实例,开启SQL_Thread
start slave sql_thread UNTIL RELAY_LOG_FILE = 'relaylog.000001', RELAY_LOG_POS = 381831946;#追binlog速度快数倍

四、总结

  通过SQL_Thread的方式可以使用主从本身并行复制的能力,在binlog越多且并行度越好的场景上表现越好。

  • 优点:

    • 可以断点恢复,人为控制进度,比如stop slave或者遇到错误时,可以断点恢复
    • 可以利用多线程复制来加快增量速度,时恢复更快
  • 缺点:

    • 要关闭mysqld
    • 手动执行过程较mysqlbinlog方式更为复杂
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

MySQL基于复制线程实现MTS并行恢复binlog 的相关文章

随机推荐

  • python批量请求(GET

    本案例为普通的测试案例 主要用于测试通过get请求和post请求产生响应是否一致 主要针对响应码为200的结果进行输出 没有什么技术含量 coding utf 8 import requests def apiRequest header
  • SLFCD的实验复现(深度学习camelyon病理)未完待续

    深度学习病理 针对精确注释病理数据集的分类方法 预处理部分 一 首先获取病理图片的标注信息 精确注释标签 利用ASAP对病理图片进行标注 会生成xml文件 可以先将xml文件转换成json文件 为什么要将xml文档转换成json json是
  • 基于Python中Tkinter库实现弹球游戏

    文章目录 前言 游戏玩法 程序设计 思路 问题修改 问题代码展示 修改后代码展示 完整代码 前言 在看一本Python书 正好有一个弹球游戏 书中的代码可以跑 就是有一个问题 若球遇到边界 就不弹回 正好发现一篇文章 解决了书中代码的问题
  • 创建新用户时PackageManager的动作

    PackageManagerService createNewUser Settings createNewUserLI for PackageSetting ps packages ps setInstalled ps isSystem
  • sql语句中case when then else函数用法

    Case具有两种格式 简单Case函数和Case搜索函数 简单Case函数 CASE sex WHEN 1 THEN 男 WHEN 2 THEN 女 ELSE 其他 END Case搜索函数 CASE WHEN sex 1 THEN 男 W
  • 如何使用html制作网页

    一 html简介 1 1概念 HTML即HyperText Mark up Language 意思是超文本标记语言 HTML不是一种编程语言 而是一种标记语言 超文本指的是超链接 标记指的是标签 是一种用来制作网页的语言 这种语言由一个个的
  • wget: not an http or ftp url_wget和crul命令参数使用详解

    wget是个专职的下载利器 简单 专一 极致 而curl可以下载 但是长项不在于下载 而在于模拟提交web数据 POST GET请求 调试网页 等等 在下载上 也各有所长 wget可以递归 支持断点 而curl支持URL中加入变量 因此可以
  • VS 2019社区版Microsoft账号无法登录及离线激活

    1 账号无法登录问题 VS 2019社区版使用一段时间后需要重新登录 以激活使用许可证 现象 在输入账号后点击 下一步 一直没有出现输入密码窗口 并提示 IE 浏览器版本过低 解决办法 下载 IE11 中文版64位地址 http downl
  • VS2010调试dump文件

    VC 利用PDB和dump文件定位问题并进行调试 转载 vc 调试 利用PDB和dump文件定位问题并进行调试 VS2010 woshizfs的博客 CSDN博客 转载 VC 使用pdb和dump恢复 案发现场 i chaoren的博客 C
  • 弹性计算

    弹性计算包括云服务器 云数据库 负载均衡 云服务器 整合了高性能服务器与优质网络资源 云OS统一管理集群资源 每个集群可虚拟出多个独立服务器 且可以在集群中自由迁移 数据存储在云OS 大大提高云服务器的稳定性 关系型数据库服务 一个基于高稳
  • Hex文件和bin文件以及flash大小关系

    Program Size Code 31128 RO data 6572 RW data 52 ZI data 1852 keil软件编译后会出现上面的提示 其意义如下 Code 指程序中代码的字节数 RO data 指程序中定义的常量字节
  • Oceanbase列传

    Oceanbase列传 分布式与存储技术 跳至内容 首页 关于郁白 文章列表 文章预告 正在追越狱第五季 两阶段提交的工程实践 两阶段提交 2 Phase Commit简称2PC 协议是用于在多个节点之间达成一致的通信协议 它是实现 有状态
  • 1000元一根的Type C数据线

    转自 https zhuanlan zhihu com p 179946944 苹果官方商城近日上架了一根数据线 官方名称 雷雳 3 Pro 售价 949 元 看到价格 我脑海中的第一反应是 谁会买这根近千元的数据线 是贫穷限制了我的想象力
  • spring boot自动装配之@EnableAutoConfiguration详解

    1 EnableAutoConfiguration作用 EnableAutoConfiguration用于类或接口上 在spring boot中注解位于 SpringBootApplication注解上 SpringBootConfigur
  • 【数据结构1】数据结构的基本概念

    数据结构的基本概念 数据 数据是信息的载体 是描述客观事物属性的数 字符及所有能输入到计算机中并被计算机程序识别和处理的符号的集合 数据是计算机程序加工的原料 数据元素 数据项 数据元素是数据的基本单位 通常作为一个整体进行考虑和处理 一个
  • x = x.view(x.size(0), -1) 的理解

    之前对于pytorch的网络编程学习都是大致理解每一层的概念 有些语法语句没有从原理上弄清楚 就比如标题的x x view x size 0 1 这句话一般出现在model类的forward函数中 具体位置一般都是在调用分类器之前 分类器是
  • LogisticRegressionCV 参数使用以及含义 笔记

    第一次接触LogisticRegressionCV 记录一下 Logistic回归是分类算法 不能应用于回归中 传入模型的y值 不能是float类型 必须是int类型 正则化选择参数 penalty gt L1 L2 默认是L2的正则化 一
  • 【MySQL】MySQL高手是如何练成的?

    MySQL 什么是MySQL呢 怎样练成MySQL高手 在Linux安装MySQL 问题处理 Mysql 的用户管理 什么是MySQL呢 Mysql 是开源的 可以定制的 采用了 GPL 协议 可以根据业务需要修改源码来开发自己的 Mysq
  • 2023 年为您的网站提供 30 个免费的 CSS 加载动画

    我们将使用 Lottie 文件 Lottie 文件 毫不费力地为网络 应用程序 社交和设计带来最小的 免费的 随时可用的动态图形 立即创建 编辑 测试 协作和发布 Lottie 动画 脚步 1 在你的html中添加这个脚本 2 我们将提供一
  • MySQL基于复制线程实现MTS并行恢复binlog

    文章目录 一 MySQL备份恢复流程 二 并行恢复binlog原理 三 操作步骤 四 总结 一 MySQL备份恢复流程 MySQL数据恢复通常分为两个步骤 恢复全备数据 MySQL有多种备份工具 分为物理备份和逻辑备份 具体可以参看下面这篇