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
英文地址,請注明出處:http://en.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 移動到數組的末尾,同時保持非零元素的相對順序。 請注意 ,必須在不復制數組的情況下原地對數組進行…