MySQL資料庫主從同步延遲分析及解決方案

来源:https://www.cnblogs.com/qinyujie/archive/2018/04/20/8891775.html
-Advertisement-
Play Games

一、MySQL的資料庫主從複製原理 MySQL主從複製實際上基於二進位日誌,原理可以用一張圖來表示: 分為四步走: 1. 主庫對所有DDL和DML產生的日誌寫進binlog; 2. 主庫生成一個 log dump 線程,用來給從庫I/O線程讀取binlog; 3. 從庫的I/O Thread去請求主 ...


一、MySQL的資料庫主從複製原理

MySQL主從複製實際上基於二進位日誌,原理可以用一張圖來表示:

MySQL資料庫主從同步延遲分析及解決方案

分為四步走:

1. 主庫對所有DDL和DML產生的日誌寫進binlog;

2. 主庫生成一個 log dump 線程,用來給從庫I/O線程讀取binlog;

3. 從庫的I/O Thread去請求主庫的binlog,並將得到的binlog日誌寫到relay log文件中;

4. 從庫的SQL Thread會讀取relay log文件中的日誌解析成具體操作,將主庫的DDL和DML操作事件重放。

關於DDL和DML

SQL語言共分為四大類:查詢語言DQL,控制語言DCL,操縱語言DML,定義語言DDL。

DQL:可以簡單理解為SELECT語句;

DCL:GRANT、ROLLBACK和COMMIT一類語句;

DML:可以理解為CREATE一類的語句;

DDL:INSERT、UPDATE和DELETE語句都是;

二、主從複製存在的問題

1. 主庫宕機後,數據可能丟失;

2. 主從同步延遲。

三、MySQL資料庫主從同步延遲產生原因

原因分析

MySQL的主從複製都是單線程的操作,主庫對所有DDL和DML產生的日誌寫進binlog,由於binlog是順序寫,所以效率很高。Slave的SQL Thread線程將主庫的DDL和DML操作事件在slave中重放。DML和DDL的IO操作是隨即的,不是順序的,成本高很多。另一方面,由於SQL Thread也是單線程的,當主庫的併發較高時,產生的DML數量超過slave的SQL Thread所能處理的速度,或者當slave中有大型query語句產生了鎖等待那麼延時就產生了。

常見原因:Master負載過高、Slave負載過高、網路延遲、機器性能太低、MySQL配置不合理。

四、主從延時排查方法

通過監控 show slave status 命令輸出的Seconds_Behind_Master參數的值來判斷:

NULL,表示io_thread或是sql_thread有任何一個發生故障;

0,該值為零,表示主從複製良好;

正值,表示主從已經出現延時,數字越大表示從庫延遲越嚴重。

五、解決方案

解決數據丟失的問題:

1. 半同步複製

從MySQL5.5開始,MySQL已經支持半同步複製了,半同步複製介於非同步複製和同步複製之間,主庫在執行完事務後不立刻返回結果給客戶端,需要等待至少一個從庫接收到並寫到relay log中才返回結果給客戶端。相對於非同步複製,半同步複製提高了數據的安全性,同時它也造成了一個TCP/IP往返耗時的延遲。

2. 主庫配置sync_binlog=1,innodb_flush_log_at_trx_commit=1

sync_binlog的預設值是0,MySQL不會將binlog同步到磁碟,其值表示每寫多少binlog同步一次磁碟。

innodb_flush_log_at_trx_commit為1表示每一次事務提交或事務外的指令都需要把日誌flush到磁碟。

註意:將以上兩個值同時設置為1時,寫入性能會受到一定限制,只有對數據安全性要求很高的場景才建議使用,比如涉及到錢的訂單支付業務,而且系統I/O能力必須可以支撐!

解決從庫複製延遲的問題:

1. 優化網路

2. 升級Slave硬體配置

3. Slave調整參數,關閉binlog,修改innodb_flush_log_at_trx_commit參數值

4. 升級MySQL版本到5.7,使用並行複製


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • GNU Core Utilities(Coreutils,GNU的核心工具軟體包):包含了對類Unix操作系統上使用的許多基本工具(如cat,ls和rm)的重新實現 GNU coreutils通過合併早期的軟體包textutils,shellutils和fileutils以及一些其他雜項工具而創建出 ...
  • 轉載自https://blog.csdn.net/firefly_2002/article/details/7960595 1. exit用於結束正在運行的整個程式,它將參數返回給OS,把控制權交給操作系統;而return 是退出當前函數,返回函數值,把控制權交給調用函數。 2. exit是系統調用 ...
  • 詳細請移步至博客https://blog.csdn.net/shenzhen_zsw/article/details/74025066 方法一、 sudo ifconfig eth0 100.100.100.60 netmask 255.255.255.0 註意:100.100.100.60為你想要 ...
  • 最近發現在SQL Server資料庫(目前測試過SQL Server 2008, 2012,2014,2016各個版本)中,即使資料庫處於離線(OFFLINE)狀態,但是sys.master_files中依然顯示是聯機狀態。本文測試環境為Microsoft SQL Server 2014 (SP2)... ...
  • Sql註入以及登錄界面驗證 知識點: 反射 (forname) Java資料庫連接對象 connection Java資料庫執行對象 statement Java sql語句的註入方法 進入MySQL數據表方法 改變sql語句的字元集 set names XX; ...
  • HBase安裝 安裝前設置 安裝Hadoop在Linux環境下之前,需要建立和使用Linux SSH(安全Shell)。按照下麵設立Linux環境提供的步驟。 創建一個用戶 首先,建議從Unix創建一個單獨的Hadoop用戶,文件系統隔離Hadoop文件系統。按照下麵給出創建用戶的步驟。 打開Lin ...
  • 本文由 網易雲 發佈。 深入嵌入“跨視圖粒度計算”的前面兩篇分別講了 1、理解數據的粒度 2、INCLUDE表達式 這一篇講一下EXCLUDE表達式的用法。 EXCLUDE,中文譯為“排除”,顧名思義,這個表達式和INCLUDE表達式是對立的,語法規則如下: 比如我們先做了下圖,看了每個“類別”下, ...
  • 本文由 網易雲 發佈。 作者:範鵬程,網易考拉海購 目錄 InnoDB表結構 B樹與B+樹 聚簇索引和二級索引 SQL執行順序 SQL優化建議 一些問題分析 參考資料 1. InnoDB表結構 此小結與索引其實沒有太多的關聯,但是為了便於理解索引的內容,添加此小結作為鋪墊知識。 1.1 InnoDB ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...