GreatSQL通过伪装从库回放Binlog文件

GreatSQL通过伪装从库回放Binlog文件

一、适用场景说明

1、主库误操作恢复

利用 Binlog 在其他实例解析、回放,根据gtid只回放到指定位点。

2、网络隔离环境同步

备份恢复后可以拉去主库Binlog文件至新实例同步增量数据。

3、备份恢复遇到Binlog文件过大处理

恢复实例时有可能主库的 Binlog 超过限定大小,无法用mysqlbinlog工具恢复。

以上只是列举部分场景,而且恢复的方式也并非一种,本文讲解通过伪装从库的方式去回放所需的binlog。

二、测试环境实例信息

实例1192.168.138.239:3301
实例2192.168.135.196:3302

三、实例1生成测试数据

在实例1创建4个新库,用sysbench生成测试数据,每执行一次sysbench就刷新一下Binlog,生成多个Binlog文件。

192.168.138.239:3301
create database wl_greatsql1;
create database wl_greatsql2;
create database wl_greatsql3;
create database wl_greatsql4;sysbench ./src/lua/oltp_read_write.lua 
--mysql-db=wl_greatsql1-4 
--mysql-host=192.168.138.239 
--mysql-port=3301 
--mysql-user=greatsql 
--mysql-password='QW12er#$' 
--mysql-ignore-errors=all 
--tables=5 
--table_size=10000 
--threads=10 
--report-interval=2 
--time=1800 
prepare

通过flush logs;命令生成多个Binlog文件。

-rw-r-----. 1 greatsql greatsql    9545477 Jun  4 17:53 binlog.000001
-rw-r-----. 1 greatsql greatsql    9544713 Jun  4 17:54 binlog.000002
-rw-r-----. 1 greatsql greatsql    9544713 Jun  4 17:54 binlog.000003
-rw-r-----. 1 greatsql greatsql    9544713 Jun  4 17:54 binlog.000004

四、查看实例2状态

实例2的状态确保没有重复数据记录,做了reset master以及slave

greatsql> SHOW MASTER STATUS\G
*************************** 1. row ***************************File: binlog.000001Position: 153Binlog_Do_DB:Binlog_Ignore_DB:
Executed_Gtid_Set:
1 row in set (0.00 sec)greatsql> SHOW SLAVE STATUS\G
Empty set, 1 warning (0.00 sec)

五、实例2伪装从库应用实例1binlog数据

1、处理实例2的slave信息

# reset slave;之后relaylog就被全清了变成以下样子
-rw-r----- 1 greatsql greatsql 177 Apr  4 02:32 relaylog.000001
-rw-r----- 1 greatsql greatsql  51 Apr  4 02:32 relaylog.index

关于 RESET SLAVE [ALL] 的操作说明:

RESET SLAVE
会移除当前从库的复制状态信息。
会删除所有和该从库关联的 relay log(中继日志)文件。
会将与复制位点(例如 Master_Log_File、Read_Master_Log_Pos 等)相关的信息重置为空。
不会清除通过 CHANGE MASTER TO 设置的复制连接参数(如主库地址、用户、密码等),在较新的 GreatSQL 版本中这些连接参数会保留。RESET SLAVE ALL
会执行与 RESET SLAVE 相同的操作(删除 relay log、重置复制状态)。
此外,还会清空通过 CHANGE MASTER TO 配置的所有主库连接信息(主库地址、端口、用户、密码等),相当于是把复制相关的所有设置都恢复到初始默认状态。

2、将实例1生成的binlog文件传输到实例2主机并修改名称

#拷贝到实例2。
binlog.000001  
binlog.000002  
binlog.000003  
binlog.000004  #修改名称
mv binlog.000001 relaylog.000002 
mv binlog.000002 relaylog.000003
mv binlog.000003 relaylog.000004
mv binlog.000004 relaylog.000005#修改权限
chown -R greatsql:greatsql /greatsql/dbdata/log/

3、修改实例2 relay-bin.index文件

# 修改实例2 index文件内容同上。
vi relaylog.index# 新增
/greatsql/dbdata/log/relaylog.000002  
/greatsql/dbdata/log/relaylog.000003  
/greatsql/dbdata/log/relaylog.000004  
/greatsql/dbdata/log/relaylog.000005  

4、实例2建立复制通道

说明:

只需要sql_thread即可应用relay log,io_thread并不用配置实际的信息。关键是在执行 CHANGE MASTER TO 操作时要指定 RELAY_LOG_FILERELAY_LOG_POS 的详细信息。

# 建立slave通道
CHANGE MASTER TO MASTER_HOST='source2.example.com', MASTER_USER='repl', MASTER_PASSWORD='password', MASTER_PORT=3301, Relay_Log_File='relaylog.000001', Relay_Log_POS=4;

5、启动sql_thread

# 只启动sql线程
START SLAVE sql_thread;# 如果想指定位点恢复可执行下面的命令,加上 SQL_AFTER_GTIDS 参数
START SLAVE sql_thread UNTIL SQL_AFTER_GTIDS = 'AAAAAAAA-0000-0000-0000-000000000000:XXX';

6、查看实例2的复制通道

# 查看master信息
greatsql> SHOW MASTER STATUS\G
*************************** 1. row ***************************File: binlog.000001Position: 38179345Binlog_Do_DB:Binlog_Ignore_DB:
Executed_Gtid_Set: 32ab2502-3492-11f0-891f-00163e7e5561:1-124
1 row in set (0.00 sec)# 查看slave信息
greatsql> SHOW SLAVE STATUS\G
*************************** 1. row ***************************Slave_IO_State:Master_Host: source2.example.comMaster_User: replMaster_Port: 3301Connect_Retry: 60Master_Log_File:Read_Master_Log_Pos: 4Relay_Log_File: relaylog.000006Relay_Log_Pos: 4Relay_Master_Log_File: binlog.000005Slave_IO_Running: NoSlave_SQL_Running: YesReplicate_Do_DB:Replicate_Ignore_DB:Replicate_Do_Table:Replicate_Ignore_Table:Replicate_Wild_Do_Table:Replicate_Wild_Ignore_Table:Last_Errno: 0Last_Error:Skip_Counter: 0Exec_Master_Log_Pos: 4Relay_Log_Space: 153Until_Condition: NoneUntil_Log_File:Until_Log_Pos: 0Master_SSL_Allowed: NoMaster_SSL_CA_File:Master_SSL_CA_Path:Master_SSL_Cert:Master_SSL_Cipher:Master_SSL_Key:Seconds_Behind_Master: 0
Master_SSL_Verify_Server_Cert: NoLast_IO_Errno: 0Last_IO_Error:Last_SQL_Errno: 0Last_SQL_Error:Replicate_Ignore_Server_Ids:Master_Server_Id: 0Master_UUID:Master_Info_File: /greatsql/dbdata/data/master.infoSQL_Delay: 0SQL_Remaining_Delay: NULLSlave_SQL_Running_State: Replica has read all relay log; waiting for more updatesMaster_Retry_Count: 86400Master_Bind:Last_IO_Error_Timestamp:Last_SQL_Error_Timestamp:Master_SSL_Crl:Master_SSL_Crlpath:Retrieved_Gtid_Set:Executed_Gtid_Set: 32ab2502-3492-11f0-891f-00163e7e5561:1-124Auto_Position: 0Replicate_Rewrite_DB:Channel_Name:Master_TLS_Version:Master_public_key_path:Get_master_public_key: 0Network_Namespace:
1 row in set, 1 warning (0.00 sec)

6、数据验证

greatsql> SHOW DATABASES;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sys                |
| wl_greatsql1       |
| wl_greatsql2       |
| wl_greatsql3       |
| wl_greatsql4       |
+--------------------+
8 rows in set (0.01 sec)greatsql> USE wl_greatsql1
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -ADatabase changed
greatsql> SHOW TABLES;
+------------------------+
| Tables_in_wl_greatsql1 |
+------------------------+
| sbtest1                |
| sbtest2                |
| sbtest3                |
| sbtest4                |
| sbtest5                |
+------------------------+
5 rows in set (0.00 sec)greatsql> SELECT COUNT(*) FROM sbtest1;
+----------+
| count(*) |
+----------+
|    10000 |
+----------+
1 row in set (0.01 sec)

六、操作风险

1、确认伪从库已有数据是否安全兼容回放操作

  • 如果伪从库中本身已存在部分数据,必须提前核实与 Binlog 中即将回放的数据是否存在冲突,避免出现主键冲突、重复插入、逻辑错误等情况。
  • 建议在回放前执行一次结构与关键数据校验,确保数据状态与预期一致。

2、主库误操作场景需精准识别回放的事务范围

  • 若回放 Binlog 是为了修复主库误操作(如误删、误更新等),必须提前通过 mysqlbinlog 工具明确要回放的具体事务,避免出现“多执行”或“漏执行”。
  • 回放应尽量以事务为单位分批控制,必要时使用 START SLAVE UNTILmysqlbinlog --stop-position 等方式精准切点。

3、严控伪从库的主从配置,避免误接入真实主库

  • 伪装从库的核心在于模拟中继日志环境,不应真实接入主库。
  • 配置 CHANGE MASTER TO 时,务必使用虚假地址或,防止误连主库造成非预期的主从同步或写入操作。

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

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

相关文章

MVC 架构设计模式

在现代软件开发中,架构设计决定了一个项目的可维护性与可扩展性。MVC(Model-View-Controller)作为经典的分层设计模式,广泛应用于 Web 系统、前端应用乃至移动端开发中。本文不仅介绍 MVC 的核心思想和机制,还将结合具…

(18)python+playwright自动化测试鼠标拖拽-上

1.简介 本文主要介绍两个在测试过程中可能会用到的功能:在selenium中介绍了Actions类中的拖拽操作和Actions类中的划取字段操作。例如:需要在一堆log字符中随机划取一段文字,然后右键选择摘取功能。playwright同样可以实现元素的拖拽和释放的…

Android 网络全栈攻略(四)—— TCPIP 协议族与 HTTPS 协议

Android 网络全栈攻略系列文章: Android 网络全栈攻略(一)—— HTTP 协议基础 Android 网络全栈攻略(二)—— 编码、加密、哈希、序列化与字符集 Android 网络全栈攻略(三)—— 登录与授权 Andr…

Python爬虫实战:从零构建完整项目(数据采集+存储+异常处理)

Python爬虫实战:从零构建完整项目(数据采集存储异常处理) 爬虫不是简单的请求解析,而是一个系统工程。本文将带你体验企业级爬虫开发的核心流程。 一、前言:为什么需要完整的爬虫项目? 作为初学者&#xf…

大数据时代UI前端的用户体验设计新思维:以用户为中心的数据可视化

hello宝子们...我们是艾斯视觉擅长ui设计、前端开发、数字孪生、大数据、三维建模、三维动画10年经验!希望我的分享能帮助到您!如需帮助可以评论关注私信我们一起探讨!致敬感谢感恩!一、引言:大数据重构用户体验设计的底层逻辑在数据爆炸式增长的今天,用…

FreeRTOS 中任务控制块(Task Control Block,TCB)用于管理和描述任务的核心数据结构

在 FreeRTOS 中,任务控制块(Task Control Block,TCB)是用于管理和描述任务的核心数据结构。每个任务都有一个对应的 TCB,它包含了任务的所有相关信息。 TCB 的主要功能 存储任务状态信息:TCB 中包含了任务…

前端-HTML-day1

目录 1、标签语法 2、HTML基本骨架 3、标签的关系 4、注释 5、标题标签 6、段落标签 7、换行和水平线标签 8、文本格式化标签 9、图像标签-基本使用 10、图像标签-属性 11、相对路径 12、绝对路径 13、超链接 14、音频 15、视频 16、综合案例1--个人简介 17、…

OpenCV篇——项目(二)OCR文档扫描

目录 文档扫描项目说明 前言 文档扫描代码总体演示 OCR文档识别代码总体演示: ​编辑 代码功能详解 1. 预处理阶段 2. 边缘检测 3. 轮廓处理 4. 透视变换 5. 后处理 主要改进说明: 使用建议: 文档扫描项目说明 前言 本项目实现了一个自动…

Java 中导出包含多个 Sheet 的 Excel 文件

在 Java 中导出包含多个 Sheet 的 Excel 文件,可以使用 Apache POI 或 EasyExcel(阿里开源库)。以下是两种方法的详细实现: 方法 1:使用 Apache POI(支持 .xls 和 .xlsx) 1. 添加 Maven 依赖 …

OneCode采用虚拟DOM结构实现服务端渲染的技术实践

一、技术背景与挑战 随着企业级应用复杂度的提升,传统服务端渲染(SSR)面临页面交互性不足的问题,而纯前端SPA架构则存在首屏加载慢和SEO不友好的缺陷。OneCode框架创新性地将虚拟DOM技术引入服务端渲染流程,构建了一套兼顾性能与开发效率的企…

变幻莫测:CoreData 中 Transformable 类型面面俱到(八)

概述 各位似秃似不秃小码农们都知道,在苹果众多开发平台中 CoreData 无疑是那个最简洁、拥有“官方认证”且最具兼容性的数据库框架。使用它可以让我们非常方便的搭建出 App 所需要的持久存储体系。 不过,大家是否知道在 CoreData 中还存在一个 Transfo…

汽车LIN总线通讯:从物理层到协议栈的深度解析

目录一、物理层:单线传输的信号奥秘1.1 电平定义与信号传输1.2 关键硬件组件作用二、数据链路层:帧结构与通信协议2.1 LIN帧的组成与功能2.2 主从式通信机制三、波特率同步:从节点的时钟校准原理四、软件实现:基于S32K144的主节点…

马尔可夫链:随机过程的记忆法则与演化密码

本文由「大千AI助手」原创发布,专注用真话讲AI,回归技术本质。拒绝神话或妖魔化。搜索「大千AI助手」关注我,一起撕掉过度包装,学习真实的AI技术! 一、核心定义:无记忆的随机演化 马尔可夫链(M…

【vue3+tauri+rust】如何实现下载文件mac+windows

项目背景:【vue3taurirust】 由于Safari对于下载总是有诸多阻拦,目前需求windowsmac可以实现: 后端返回的url文件可以下载;前端根据dom元素生成的PDF报告可以下载(无远程URL); 我的尝试: 方法…

SQL 快速参考手册-SQL001

SQL 快速参考手册: 为方便快速学习和实践,提供了一份 SQL 快速参考手册,您可以打印出来随时查看,了解常见 SQL 命令的语法和用法。 SQL 数据类型 SQL 数据类型根据不同的数据库系统(如 Microsoft Access、MySQL、SQL…

学习java集合

集合与数组的对比集合的长度可变, 数组的长度不可变集合实际上跟数组一样, 是一种容器, 可以存放数据数组可以直接存放基本数据类型和引用数据类型集合可以存放引用数据类型, 但是不能直接存放基本数据类型, 如果要存放基本数据类型, 需要变成一个包装类才行泛型: 限定集合中存…

python训练day49 CBAM

import torch import torch.nn as nn# 定义通道注意力 class ChannelAttention(nn.Module):def __init__(self, in_channels, ratio16):"""通道注意力机制初始化参数:in_channels: 输入特征图的通道数ratio: 降维比例,用于减少参数量,默认…

在小程序中实现实时聊天:WebSocket最佳实践

前言 在当今互联网应用中,实时通信已经成为一个标配功能,特别是对于需要即时响应的场景,如在线客服、咨询系统等。本文将分享如何在小程序中实现一个高效稳定的WebSocket连接,以及如何处理断线重连、消息发送与接收等常见问题。 W…

Python网络爬虫编程新手篇

网络爬虫是一种自动抓取互联网信息的脚本程序,广泛应用于搜索引擎、数据分析和内容聚合。这次我将带大家使用Python快速构建一个基础爬虫,为什么使用python做爬虫?主要就是支持的库很多,而且同类型查询文档多,在同等情…

LeetCode.283移动零

题目链接:283. 移动零 - 力扣(LeetCode) 题目描述: 给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。 请注意 ,必须在不复制数组的情况下原地对数组进行…