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

文章目录

    • 一、MySQL备份恢复流程
    • 二、并行恢复binlog原理
    • 三、操作步骤
    • 四、总结

一、MySQL备份恢复流程

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

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

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

二、并行恢复binlog原理

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

  • MySQL从5.6到8.0复制的演进

  因为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:1time mysqlbinlog --time mysqlbinlog --no-defaults binlog.000001 --start-position=319 --stop-position=381831946 | mysqlreal    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方式更为复杂

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/14923.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

零代码编程:PDF文件名和Excel数据进行比对找不同

F盘“北交所招股说明书”文件夹下有150个文件; F盘”北证A股20230703.xlsx”表格中证券名称有200多个; 现在想找出文件夹下的哪些证券名称不在表格里面。 在ChatGPT中输入提示词: 写一段Python程序: F盘“北交所招股说明书”文…

ElementUI Select选择器如何根据value值显示对应的label

修改前效果如图所示&#xff0c;数据值状态应显示为可用&#xff0c;但实际上仅显示了状态码1&#xff0c;并没有显示其对应的状态信息。在排查了数据类型对应关系问题后&#xff0c;并没有产生实质性影响&#xff0c;只好对代码进行了如下修改。 修改前代码&#xff1a; <…

Python自动化测试----生成测试报告

如何才能让用例自动运行完之后&#xff0c;生成一张直观可看易懂的测试报告呢&#xff1f; 对于自动化测试有兴趣的朋友可以观看这个视频&#xff1a; 【整整200集】超超超详细的Python接口自动化测试进阶教程&#xff0c;真实模拟企业项目实战&#xff01;&#xff01; 小编使…

【暑期每日一练】 day9

目录 选择题 &#xff08;1&#xff09; 解析&#xff1a; &#xff08;2&#xff09; 解析&#xff1a; &#xff08;3&#xff09; 解析&#xff1a; &#xff08;4&#xff09; 解析&#xff1a; &#xff08;5&#xff09; 解析&#xff1a; 编程题 题一 …

python学习之【浅拷贝】

前言 上一篇文章&#xff0c;python学习之【继承、封装、多态】主要学习了面向对象的三大特征。这篇文章记录下对python的浅拷贝的学习&#xff0c;下一篇文章接着学习深拷贝。 简单了解 浅拷贝&#xff1a;python拷贝一般都是浅拷贝&#xff0c;拷贝时&#xff0c;对象包含的…

ARM基础(6):内存屏障指令之DMB、DSB和ISB详解

内存屏障是一个通用术语&#xff0c;用于指代一条或多条指令&#xff0c;它们强制处理器在执行加载(load)或存储(store)指令时进行同步事件。ARMv7-M 和 ARMv6-M架构都提供了三个内存屏障指令来支持内存顺序模型。这三个内存屏障指令分别是&#xff1a;DMB、DSB和ISB。 文章目录…

零信任安全解决方案

什么是零信任 零信任网络架构 &#xff08;ZTNA&#xff09; 或零信任安全是一种新的组织网络安全方法。它旨在修复传统基于边界的安全性中的缺陷并简化网络设计。 它以“永不信任&#xff0c;始终验证”的原则运作。这意味着&#xff0c;无论用户或设备位于何处&#xff0c;…

位运算 剑指offer15 二进制中1的个数 搜索算法:55-II 平衡二叉树 数值的整数次方 39数组中出现次数超过一半的数字

可能会引起死循环的解法&#xff1a; 看最右边一位是不是1&#xff0c;然后将输入的整数右移一位&#xff0c;再判断最右边一位&#xff08;即倒数第二位&#xff09;是否为1&#xff0c;接着再右移&#xff0c;知道整数移动到0为止 这个解法&#xff0c;把整数右移一位和把整数…

TCP网络通信编程之字符流

【案例1】 【题目描述】 【 注意事项】 (3条消息) 节点流和处理流 字符处理流BufferedReader、BufferedWriter&#xff0c;字节处理流-BufferedInputStream和BufferedOutputStream (代码均正确且可运行_Studying~的博客-CSDN博客 1。这里需要使用字符处理流&#xff0c;来将…

wxwidgets Ribbon构建多个page与按钮响应

新建一个控制台应用程序&#xff0c;添加好头文件的依赖与lib库文件的依赖&#xff0c;修改属性&#xff1a; 将进入ribbon界面的文件与主界面的类分开&#xff1a; 1、RibbonSample.cpp #include "stdafx.h" #include "MyFrame.h" class MyApp : public…

集成测试,单元测试隔离 maven-surefire-plugin

详见 集成测试,单元测试隔离 maven-surefire-plugin maven的goal生命周期 Maven生存周期 - 含 integration-test Maven本身支持的命令&#xff08;Goals&#xff09;是有顺序的&#xff0c;越后面执行的命令&#xff0c;会将其前面的命令和其本身按顺序执行一遍&#xff0c;…

AD从原理图到PCB超详细教程

AD超详细教程 前言一、建立一个工程模板二、原理图1.设计原理图。2.使用AD自带库和网上开源原理图库3.画原理图库4.编译原理图 三、PCB1.确定元器件尺寸大小2.绘制PCB Library①使用元器件向导绘制元件库②原理图与PCB的映射 3.绘制PCB①更新PCB②调整元件位置③布线④漏线检查…

c++函数式编程:统计文件字符串,文件流

头文件 #include <iostream> #include <fstream> #include <string> #include <sstream> #include <algorithm> #include <vector>统计方法 int count_lines(const std::string &filename) {std::ifstream in{filename};return std:…

100% RNN language model ChatRWKV 相关开源项目

RWKV(读作RwaKuv)借鉴了RNN的移动平均模型&#xff08;MA&#xff09;&#xff0c;将transformer的 O ( T 2 d ) O(T^2d) O(T2d)复杂度降低到 O ( T d ) O(Td) O(Td)&#xff0c;同时保持较好的结果表现。RWKV也是一个开源模型&#xff0c;甚至其介绍主页的html代码都有开源。以…

AI面试官:Asp.Net 中使用Log4Net (二)

AI面试官:Asp.Net 中使用Log4Net (二) 当面试涉及到使用log4net日志记录框架的相关问题时,通常会聚焦在如何在.NET或.NET Core应用程序中集成和使用log4net。以下是一些关于log4net的面试题目,以及相应的解答、案例和代码: 文章目录 AI面试官:Asp.Net 中使用Log4Net (二)…

【COlor传感器】通过扰动调制光传感实现智能光传输的占用分布估计研究(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

ROS1ROS2之CmakeList.txt和package.xml用法详解

前言&#xff1a;目前还在学习ROS无人机框架中&#xff0c;&#xff0c;&#xff0c; 更多更新文章详见我的个人博客主页【前往】 文章目录 1. CMakeLists.txt与package.xml的作用2. 生成CMakeLists.txt2.1 ROS12.2 ROS2 3. CMakeLists.txt编写3.1 ROS13.2 ROS2 4. package.xml…

Python:给MySQL创建1000张表和创建1张有50个字段的表

1、创建1000张表 import pymysqldbhost "10.1.1.143" dbuser "root" dbpassword "123456" dbname "demo_cg1000" dbport 3306 dbconn pymysql.connect(hostdbhost, userdbuser, passworddbpassword, dbdbname, portdbport)mycu…

深入学习 Redis - 基于 Spring Data Redis 操作 Redis

目录 一、前置工作 1.1、引入 Spring Data Redis 依赖 1.2、编写配置文件 二、Spring Data Redis 2.1、前置知识 2.2、演示 Demo 一、前置工作 1.1、引入 Spring Data Redis 依赖 1.2、编写配置文件 spring:redis:host: 127.0.0.1port: 8888二、Spring Data Redis 2.1、…

树莓派镜像安装 + 设置 + 镜像批量化操作 - 自动化烧写SD Card (三)

简介 仍然强调所有的测试都是来自树莓派3B, 并使用手头上的绿联读卡器进行测试;实现方案: 如 《树莓派镜像安装 设置 镜像批量化操作 - USB boot (二)》中所写&#xff0c; 可以使用树莓派USB挂载方式, 编写自动化脚本, 当有对应的设备出现的时候&#xff0c;格式化 烧写镜…