MySQL 主從復制與 Binlog 深度解析

目錄

        • 1. Binlog的工作原理與配置
        • 2. 主從復制的設置與故障排除
        • 3. 數據一致性與同步延遲的處理
      • 小結

MySQL的binlog(二進制日志)和主從復制是實現數據備份、容災、負載均衡以及數據同步的重要機制。在高可用性架構和分布式數據庫設計中,binlog同步和主從復制常常是基礎。

1. Binlog的工作原理與配置

Binlog簡介

  • 作用:binlog記錄了對數據庫的所有修改操作,包括INSERT、UPDATE、DELETE等。這些日志用于恢復數據以及在主從復制中同步數據。
  • 格式:MySQL的binlog有三種格式:
    • STATEMENT:記錄執行的SQL語句(如INSERT INTO table VALUES (1, 'abc'))。
    • ROW:記錄數據行的變化(如行數據的修改)。
    • MIXED:結合了STATEMENT和ROW兩種格式,根據操作自動選擇最合適的記錄方式。
  • 位置:binlog的存儲位置由log-bin配置項控制,通常會以.bin為后綴,保存在MySQL數據目錄中。

配置

  • 啟用binlog:

    [mysqld]
    log-bin = /path/to/binlog
    server-id = 1
    binlog-format = ROW
    
    • log-bin指定binlog文件的存儲路徑。
    • server-id是每個MySQL實例的唯一標識,主服務器和從服務器都必須設置不同的server-id
    • binlog-format指定binlog的記錄格式。
  • 設置binlog的保留時間

    expire_logs_days = 7
    

    這會設置binlog文件的保留時間,超過時間的binlog會自動刪除。

2. 主從復制的設置與故障排除

主從復制簡介
主從復制是MySQL的一種數據復制機制,其中主服務器將它的binlog中的數據變更復制到從服務器,從而保持從服務器與主服務器的數據一致性。主從復制的工作原理大致如下:

  • 主服務器執行某些寫操作后,將這些操作記錄到binlog中。
  • 從服務器通過I/O線程從主服務器獲取binlog,并將這些數據寫入自己的中繼日志(relay log)。
  • 從服務器的SQL線程根據中繼日志執行操作,使得數據同步。

設置主從復制

  1. 主服務器配置
    • 確保主服務器啟用了binlog(如上所示)。
    • 創建復制用戶,授予適當的權限:
      CREATE USER 'replica_user'@'%' IDENTIFIED BY 'password';
      GRANT REPLICATION SLAVE ON *.* TO 'replica_user'@'%';
      
  2. 從服務器配置
    • 設置server-id,確保每個服務器有唯一的ID。

    • 配置主服務器的連接信息:

      CHANGE MASTER TOMASTER_HOST = 'master_ip',MASTER_USER = 'replica_user',MASTER_PASSWORD = 'password',MASTER_LOG_FILE = 'binlog.000001',  -- 主服務器當前binlog文件MASTER_LOG_POS = 154;               -- 從主服務器獲取的binlog位置
      

      其中MASTER_LOG_FILEMASTER_LOG_POS通常通過在主服務器執行SHOW MASTER STATUS;命令獲得。

    • 啟動復制進程:

      START SLAVE;
      

故障排除

  • 復制中斷:復制中斷通常會出現"Error ‘Last_IO_Error’",需要根據錯誤信息進行排查,常見的原因包括網絡問題、binlog文件丟失或從服務器的中繼日志損壞。

  • 查看復制狀態:可以通過以下命令查看從服務器的復制狀態:

    SHOW SLAVE STATUS\G
    

    關注Slave_IO_RunningSlave_SQL_Running字段,它們應該顯示為Yes,否則表示復制進程出錯。

  • 故障恢復:如果復制中斷并且無法自動恢復,可以使用STOP SLAVE停止復制進程,然后通過CHANGE MASTER TO命令重新設置MASTER_LOG_FILEMASTER_LOG_POS來手動指定復制起始點,最后執行START SLAVE恢復復制。

3. 數據一致性與同步延遲的處理

數據一致性問題

  • 事務一致性:在主從復制中,如果主服務器的事務沒有及時傳輸到從服務器,可能會導致從服務器的數據與主服務器不一致。為了解決這個問題,MySQL采用了事務日志和二階段提交的方式來保證事務的一致性。
  • 延遲問題:由于主從復制是異步的,從服務器的同步通常會有延遲。復制延遲可能會導致從服務器的數據不與主服務器完全一致,尤其是在高負載的環境中,延遲會更加明顯。

同步延遲的處理

  • 監控延遲:通過查看SHOW SLAVE STATUSSeconds_Behind_Master字段來監控復制延遲。
    • 如果延遲較大,可以通過優化主服務器的性能、網絡帶寬或增加從服務器的資源來減少延遲。
  • 使用半同步復制:MySQL的半同步復制可以減少延遲問題。在半同步復制模式下,主服務器在提交事務之前等待至少一個從服務器確認已經接收到該事務的binlog,從而保證數據的一致性和減少延遲。
    • 啟用半同步復制:
      INSTALL PLUGIN rpl_semi_sync_master SONAME 'rpl_semi_sync_master.so';
      INSTALL PLUGIN rpl_semi_sync_slave SONAME 'rpl_semi_sync_slave.so';
      SET GLOBAL rpl_semi_sync_master_enabled = 1;
      

解決策略

  • 優化主服務器性能:確保主服務器能夠高效處理請求,避免過多的負載導致復制延遲。
  • 增加從服務器的數量:通過水平擴展添加更多從服務器,分擔主服務器的壓力,提高數據同步的效率。
  • 網絡優化:優化主從服務器之間的網絡連接,減少延遲。

小結

  • binlog的工作原理:binlog記錄了所有數據變更,用于數據恢復和主從同步。
  • 主從復制配置:通過配置主服務器的binlog,創建復制用戶,從服務器通過CHANGE MASTER TO進行連接并啟動復制。
  • 數據一致性與同步延遲:通過監控Seconds_Behind_Master來檢測同步延遲,并通過優化主從性能、使用半同步復制等方式來處理數據一致性和延遲問題。

參考:
0voice · GitHub

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

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

相關文章

排隊論、負載均衡和任務調度關系

目錄 排隊論、負載均衡和任務調度關系 一、排隊論 二、負載均衡 三、任務調度 四、總結 排隊論、負載均衡和任務調度關系 排隊論為負載均衡和任務調度提供了數學理論和方法支持 排隊論、負載均衡和任務調度是三個相關但不同的概念。以下是對這三個概念的詳細解釋和它們之…

java版詢價采購系統 招投標詢價競標投標系統 招投標公告系統源碼

功能描述 1、門戶管理:所有用戶可在門戶頁面查看所有的公告信息及相關的通知信息。主要板塊包含:招標公告、非招標公告、系統通知、政策法規。 2、立項管理:企業用戶可對需要采購的項目進行立項申請,并提交審批,查看所…

景聯文科技入選中國信通院發布的“人工智能數據標注產業圖譜”

近日,由中國信息通信研究院、中國人工智能產業發展聯盟牽頭,聯合中國電信集團、沈陽市數據局、保定高新區等70多家單位編制完成并發布《人工智能數據標注產業圖譜》。景聯文科技作為人工智能產業關鍵環節的代表企業,入選圖譜中技術服務板塊。…

【小沐學GIS】基于C++繪制三維數字地球Earth(OpenGL、glfw、glut、QT)第三期

🍺三維數字地球系列相關文章如下🍺:1【小沐學GIS】基于C繪制三維數字地球Earth(456:OpenGL、glfw、glut)第一期2【小沐學GIS】基于C繪制三維數字地球Earth(456:OpenGL、glfw、glut)第二期3【小沐…

實景視頻與模型疊加融合?

[視頻GIS系列]無人機視頻與與實景模型進行實時融合_無人機視頻融合-CSDN博客文章瀏覽閱讀1.5k次,點贊28次,收藏14次。將無人機視頻與實景模型進行實時融合是一個涉及多個技術領域的復雜過程,主要包括無人機視頻采集、實景模型構建、視頻與模型…

MySQL通過binlog日志進行數據恢復

記錄一次阿里云MySQL通過binlog日志進行數據回滾 問題描述由于阿里云遠程mysql沒有做安全策略 所以服務器被別人遠程攻擊把數據庫給刪除,通過查看binlog日志可以看到進行了drop操作,下面將演示通過binlog日志進行數據回滾操作。 1、查詢是否開始binlog …

IDEA 修改格式化僅格式化本次改動代碼

最近總是發現格式化的時候會格式化文件所有代碼,提交Git 后再看提交日志,就很不清晰。修改方式如下 中文: 格式化代碼快捷鍵[中文配置]: 英文: 格式化代碼快捷鍵[英文配置]:

el-table ToggleRowSelection實現取消選中沒效果(virtual-scroll)

場景: 就是在虛擬列表el-table選中之后 點擊查詢 默認之前選中的 現象: 就是實現選中, 但是無法去除勾選等等 問題發現: 看定位的數據 有多個一樣的,我想著勾選之前 先去掉勾選 ,但是沒效果或者說“相同的…

【含開題報告+文檔+PPT+源碼】基于微信小程序的點餐系統的設計與實現

開題報告 隨著互聯網技術的日益成熟和消費者生活水平與需求層次的顯著提升,外賣點餐平臺在中國市場上迅速興起并深深植根于民眾日常生活的各個角落。這類平臺的核心在于構建了一個基于互聯網的強大訂餐服務系統,它無縫整合了餐飲商戶資源與廣大消費者的…

解決 MyBatis 中空字符串與數字比較引發的條件判斷錯誤

問題復現 假設你在 MyBatis 的 XML 配置中使用了如下代碼&#xff1a; <if test"isCollect ! null"><choose><when test"isCollect 1">AND exists(select 1 from file_table imgfile2 where task.IMAGE_SEQimgfile2.IMAGE_SEQ and im…

SpringBoot 手動實現動態切換數據源 DynamicSource (中)

大家好&#xff0c;我是此林。 SpringBoot 手動實現動態切換數據源 DynamicSource &#xff08;上&#xff09;-CSDN博客 在上一篇博客中&#xff0c;我帶大家手動實現了一個簡易版的數據源切換實現&#xff0c;方便大家理解數據源切換的原理。今天我們來介紹一個開源的數據源…

ASCII碼簡介以及在php中的使用

什么是 ASCII&#xff1f; ASCII&#xff08;American Standard Code for Information Interchange&#xff0c;美國信息交換標準代碼&#xff09;是一種字符編碼標準&#xff0c;用于在計算機、通信設備及其他設備中表示文字、符號和控制信息。它最早于 1963 年由美國國家標準…

前端學習一

一 進程與線程 線程是進程執行的最小單位&#xff0c;進程是系統分配任務的最小單位。 一個進程可執行最少一個線程。線程分為子線程和主線程。 主線程關閉則子線程關閉。 二 瀏覽器進程 瀏覽器是多進程多線程應用。 進程包括&#xff1a; 瀏覽器進程 負責程序交互渲染…

Go vendor

博主在編寫Go代碼時&#xff0c;遇到了這樣一個問題&#xff1a;想要修改某個外部包&#xff0c;添加幾個函數&#xff0c;而其余功能繼續使用&#xff0c;經過調研&#xff0c;發現可以將Go的外部包源碼復制到項目本地&#xff0c;對包的代碼進行修改&#xff0c;從而達到目的…

EasyExcel 動態設置表格的背景顏色和排列

項目中使用EasyExcel把數據以excel格式導出&#xff0c;其中設置某一行、某一列單元格的背景顏色、排列方式十分常用&#xff0c;記錄下來方便以后查閱。 1. 導入maven依賴&#xff1a; <dependency><groupId>com.alibaba</groupId><artifactId>easy…

概率論得學習和整理23:EXCEL 數據透視表基礎操作

目錄 1 選擇數據&#xff0c;插入數據透視表 2 選擇數據透視表生成位置 3 出現了數據透視表的面板 4 數據透視表的基本結構認識 4.1 交叉表/列聯表 4.2 row, column, cell 一個新增的篩選器&#xff0c;就這么簡單 4.3 可以只添加 rowcell/值 &#xff0c;也可以colu…

計算機網絡從誕生之初到至今的發展歷程

前言 "上網"&#xff0c;相信大家對這個動詞已經不再陌生&#xff0c;網 通常指的是網絡&#xff1b;在 2024 年的今天&#xff0c;網絡已經滲透到了每個人的生活中&#xff0c;成為其不可或缺的一部分&#xff1b;你此時此刻在看到我的博客&#xff0c;就是通過網絡…

C# 讀取EXCEL的數據批量插入單個PDF里的多個位置

C# 讀取EXCEL的數據批量插入單個PDF里的多個位置 using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Diagnostics; using System.Drawing; using System.IO; using System.Linq; using System.Reflection; usin…

圖論筆記1

1.1鄰接矩陣儲存法 //創建:二維數組vector<vector<int>> graph(n,vector<int>(n,0));//儲存for(int i0;i<m;i){int x1,x2;cin>>x1>>x2;graph[x1-1][x2-1]1;}1.2鄰接表儲存法 補充&#xff1a;c中的list是鏈表 鏈接 //創建&#xff1a;數組…

GB28181系列三:GB28181流媒體服務器ZLMediaKit

我的音視頻/流媒體開源項目(github) GB28181系列目錄 目錄 一、ZLMediaKit介紹 二、 ZLMediaKit安裝、運行(Ubuntu) 1、安裝 2、運行 3、配置 三、ZLMediaKit使用 一、ZLMediaKit介紹 ZLMediaKit是一個基于C11的高性能運營級流媒體服務框架&#xff0c;項目地址&#xf…