MySQL主從同步參數調優案例

#作者:stackofumbrella

文章目錄

  • 一、前言
  • 二、故障概述
    • 2.1 基礎信息
    • 2.2 故障現象描述
  • 三、故障診斷分析
    • 3.1 排查過程
    • 3.2 問題根因
  • 四、故障解決方案 📊
    • 4.1 解決方案 🛠?
  • 五、總結
  • 附件

一、前言

在磐基系統中大量使用MySQL作為后端的數據存儲,支撐著各類關鍵業務的數據讀寫需求。為保障數據的高可用性與業務連續性,實現數據的冗余備份,普遍采用MySQL主從復制架構。但在使用過程中,較頻繁的出現從庫被寫入數據的問題,導致主從數據不一致,影響業務的正常運行。因此,配置合理參數,防止從庫被寫入數據,顯得尤為重要。

二、故障概述

2.1 基礎信息

磐基版本:kem
涉及組件:MySQL 5.7.38
參考范圍:所有使用MySQL的業務系統

2.2 故障現象描述

磐基租戶在使用MySQL主從同步過程中從庫同步異常,導致主從數據不一致。
在這里插入圖片描述

三、故障診斷分析

3.1 排查過程

通過查看show slave status\G狀態信息,從錯誤信息可以看出從庫在同步mysql-bin.000010文件的偏移量位置為830237357的數據時候出現錯誤。從庫具體報錯信息如下:
Last_SQL_Error: Coordinator stopped because there were error(s) in the worker(s). The most recent failure being: Worker 1 failed executing transaction ‘ANONYMOUS’ at master log mysql-bin.000010, end_log_pos 830237357. See error log and/or performance_schema.replication_applier_status_by_worker table for more details about this failure or others, if any.

從錯誤信息中可以看出,查看performance_schema.replication_applier_status_by_worker表可以獲取更詳細的信息,因此在從庫執行SQL語句select * from performance_schema.replication_applier_status_by_worker查詢結果如下圖所示:
在這里插入圖片描述
在查詢結果中看出,在更新某個庫的某個表時發生了錯誤,找到這個表和主庫進行對比,發現從庫比主庫的數據較新且數據量多于主庫。
另外可以根據查詢結果,到主庫找到對應的mysql-bin.000010二進制文件,使用如下命令找到偏移量830237357前后的SQL語句,查看到底是哪些操作,在與從庫數據對比并更正,跳過錯誤的事件或者刪除某些數據:

# mysqlbinlog --no-defaults -v -v --base64 --output=decode-rows /var/lib/mysql/mysql-bin.000010 | grep -A 20 “830237357” --color

注意:此命令針對數據量不大的情況使用,對于大量差異數據,還是采用下面章節的方法。

3.2 問題根因

業務在連接數據庫時,配置DNS域名地址,使得主從數據庫被輪詢訪問,而從庫中并未配置只讀參數,這樣就會導致從庫中被寫入了大量數據,從而進一步導致主從同步不一致。

四、故障解決方案 📊

4.1 解決方案 🛠?

注意:請提前備份好主從庫數據,再執行SQL語句:

mysql> stop slave;
mysql> set global sql_slave_skip_counter=1; #跳過一個事務,可以執行多次
mysql> start slave;
mysql> show slave status\G;

或者執行:

mysql> stop slave;
mysql> reset slave;    #重置同步
mysql> start slave;
mysql> show slave status\G;

以上方式只適用于同步過程中出現的較少錯誤,對于較多同步錯誤,需要為從庫添加只讀參數,修改部署mysql的deploy清單文件,添加arg參數:

arg:
- --read_only=1
- --super_read_only=1
- --slave-skip-errors=all

重啟deploy后,主從恢復正常同步

五、總結

MySQL的read_only參數可以讓整個MySQL實例普通權限用戶處于只讀狀態,但并不能限制擁有super權限的用戶。read_only參數一般是用于主從復制從庫的配置,目的是為了規避從庫誤寫數據,導致主從復制異常或者主從數據不一致的隱患。另外,為了避免從庫被super權限用戶誤寫數據,MySQL官方在MySQL5.7版本引入了super_read_only參數來限制super用戶在從庫的只讀屬性。

附件

官方參考地址:
https://dev.mysql.com/doc/refman/5.7/en/server-system-variables.html#sysvar_super_read_only

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/96567.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/96567.shtml
英文地址,請注明出處:http://en.pswp.cn/web/96567.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【代碼隨想錄算法訓練營——Day10】棧與隊列——232.用棧實現隊列、225.用隊列實現棧、20.有效的括號、1047.刪除字符串中的所有相鄰重復項

LeetCode題目鏈接 https://leetcode.cn/problems/implement-queue-using-stacks/ https://leetcode.cn/problems/implement-stack-using-queues/description/ https://leetcode.cn/problems/valid-parentheses/description/ https://leetcode.cn/problems/remove-all-adjacent-…

Asp .Net Core 系列:Asp .Net Core 集成 Hangfire+MySQL

在 .NET 或 .NET Core 應用中,若需在不依賴 Windows 服務、獨立進程的前提下實現后臺處理,Hangfire 是最成熟、簡單的方案之一 —— 它可直接嵌入現有應用(如 ASP.NET Core Web 應用),無需額外部署,同時提供…

網站漏洞掃描要怎么處理?

在網絡安全領域,網站漏洞是黑客攻擊的重要突破口,而網站漏洞掃描能及時發現這些隱患。但很多小白在完成漏洞掃描后,不清楚后續該如何處理,導致漏洞一直存在,給網站安全埋下風險。下面從準備工作、處理步驟、驗證維護等…

淘寶RecGPT:通過LLM增強推薦

導論背景 (Background)??推薦系統的核心挑戰??:怎么 準確推斷 用戶行為背后快速變化的真實意圖,以實現用戶、商戶和平臺的三贏。??現有方法的局限性??:傳統的基于歷史日志共現模式(“從點擊學習點擊”)的模型&…

【Go系統編程】07 網絡化IPC:Go的王牌——Socket編程

大家好,我是Tony Bai。歡迎來到我們《Go 系統編程》專欄的最后一講。在過去的旅程中,我們探索了管道、消息隊列、共享內存等一系列強大的 IPC 機制。它們各有所長,但都有一個共同的、致命的局限性:它們都只能在同一臺物理機上工作…

claude code使用小竅門

視頻地址 B站 1 /init 在項目最開始的時候,使用/init可以將項目通讀一遍。cc會將學習到的關于項目的知識都保存到CLAUD.MD文件中 2、 /compact 用來壓縮對話的上下文,claude會將之前的一些亂七八糟或者重復的對話刪除壓縮,有利于提高AI的…

The learning process of Decision Tree Model|決策樹模型學習過程

----------------------------------------------------------------------------------------------- 這是我在我的網站中截取的文章,有更多的文章歡迎來訪問我自己的博客網站rn.berlinlian.cn,這里還有很多有關計算機的知識,歡迎進行留言或…

期貨盤后空開是認購期權行權?

本文主要介紹期貨盤后空開是認購期權行權?期貨盤后空開與認購期權行權是兩個獨立的概念,無直接關聯,需從交易機制、操作邏輯及市場規則三方面區分。期貨盤后空開是認購期權行權?1. 定義與交易屬性期貨盤后空開:屬于期貨…

ESP32 I2S音頻總線學習筆記(七):制作一個錄音播放器

簡介 上一篇我們利用I2S輸出DIY了一個藍牙音箱簡單玩了一下,本篇我們繼續來看代碼。前面幾篇文章我們分別介紹了I2S輸入,I2S輸出,以及WAV文件格式的相關內容,那我們就可以根據所學到的,制作一個錄音機,具體…

PyTorch 動態圖的靈活性與實用技巧

PyTorch 以其動態計算圖(Dynamic Computation Graph)而聞名,這賦予了它極高的靈活性和易用性,使其在研究和實際應用中都備受青睞。與TensorFlow 1.x的靜態圖(需要先定義圖結構,再運行)不同&…

#C語言——刷題攻略:牛客編程入門訓練(十一):攻克 循環控制(三),輕松拿捏!

🌟菜鳥主頁:晨非辰的主頁 👀學習專欄:《C語言刷題合集》 💪學習階段:C語言方向初學者 ?名言欣賞:"代碼行數決定你的下限,算法思維決定你的上限。" 前言:在學習…

復雜PDF文檔結構化提取全攻略——從OCR到大模型知識庫構建

在學術研究、金融分析、法律合同、工程設計等眾多領域,PDF文檔已成為信息存儲與傳遞的重要載體。然而,面對包含復雜表格、公式、圖表、手寫批注、多欄排版等元素的PDF,傳統工具往往難以準確、完整地提取內容。這不僅影響信息利用效率&#xf…

HttpClient、OkHttp 和 WebClient

HttpClient、OkHttp 和 WebClient 是 Java 生態中常見的 HTTP 客戶端,它們在設計理念、異步能力、性能等方面有所不同。以下是它們的詳細對比:1. 概述客戶端介紹Apache HttpClient傳統同步 HTTP 客戶端,功能豐富,歷史悠久&#xf…

書籍成長書籍文字#創業付費雜志《財新周刊》2025最新合集 更33期

免費訪問地址 https://isharehubs.com/article/2025-33-26c27ee5bb9180cdafc5efbec9545ac5 資源信息 付費雜志《財新周刊》2025最新合集 更33期 《財新周刊》2025 最新合集(更至 33 期)重磅上線,聚焦年度熱點與結構性變化,從監…

用python的socket寫一個局域網傳輸文件的程序

局域網傳輸文件是最最常用的功能,我參考https://www.jb51.net/python/345837qrz.htm這篇文章,復制粘貼,開發了一個。但發現進度條沒有用,也沒有顯示傳輸用時和傳輸速度的功能,于是我改寫了代碼,使它實現這個…

深度剖析Linux內核無線子系統架構

文章目錄1、資料快車2、目錄介紹2、術語3、Linux無線子系統概述4、內核無線子系統框架1)認識內核無線子系統中的三個軟件框架2、無線網絡子系統框架3、Android WIFI Management框架1)fullMAC和softMAC是什么?2)fullmac對比softmac…

unity UGUI 鼠標畫線

using UnityEngine; using UnityEngine.EventSystems; using System.Collections.Generic; using UnityEngine.UI; /* 使用方法: 在場景中新建一個空的 GameObject(右鍵 -> UI -> 空對象,或直接創建空對象后添加 RectTransform 組件&am…

JSP疫情物資管理系統jbo2z--程序+源碼+數據庫+調試部署+開發環境

本系統(程序源碼數據庫調試部署開發環境)帶論文文檔1萬字以上,文末可獲取,系統界面在最后面。系統程序文件列表開題報告內容一、選題背景與意義新冠疫情的爆發,讓醫療及生活物資的調配與管理成為抗疫工作的關鍵環節。傳…

Mem0 + Milvus:為人工智能構建持久化長時記憶

作者:周弘懿(錦琛) 背景 跟 ChatGPT 對話,比跟真人社交還累!真人好歹能記住你名字吧? 想象一下——你昨天剛把沙發位置、爆米花口味、愛看的電影都告訴了 ChatGPT,而它永遠是那個熱情又健忘的…