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
  • GoF之工廠模式 @目錄GoF之工廠模式每博一文案1. 簡單說明“23種設計模式”1.2 介紹工廠模式的三種形態1.3 簡單工廠模式(靜態工廠模式)1.3.1 簡單工廠模式的優缺點:1.4 工廠方法模式1.4.1 工廠方法模式的優缺點:1.5 抽象工廠模式1.6 抽象工廠模式的優缺點:2. 總結:3 ...
  • 新改進提供的Taurus Rpc 功能,可以簡化微服務間的調用,同時可以不用再手動輸出模塊名稱,或調用路徑,包括負載均衡,這一切,由框架實現並提供了。新的Taurus Rpc 功能,將使得服務間的調用,更加輕鬆、簡約、高效。 ...
  • 本章將和大家分享ES的數據同步方案和ES集群相關知識。廢話不多說,下麵我們直接進入主題。 一、ES數據同步 1、數據同步問題 Elasticsearch中的酒店數據來自於mysql資料庫,因此mysql數據發生改變時,Elasticsearch也必須跟著改變,這個就是Elasticsearch與my ...
  • 引言 在我們之前的文章中介紹過使用Bogus生成模擬測試數據,今天來講解一下功能更加強大自動生成測試數據的工具的庫"AutoFixture"。 什麼是AutoFixture? AutoFixture 是一個針對 .NET 的開源庫,旨在最大程度地減少單元測試中的“安排(Arrange)”階段,以提高 ...
  • 經過前面幾個部分學習,相信學過的同學已經能夠掌握 .NET Emit 這種中間語言,並能使得它來編寫一些應用,以提高程式的性能。隨著 IL 指令篇的結束,本系列也已經接近尾聲,在這接近結束的最後,會提供幾個可供直接使用的示例,以供大伙分析或使用在項目中。 ...
  • 當從不同來源導入Excel數據時,可能存在重覆的記錄。為了確保數據的準確性,通常需要刪除這些重覆的行。手動查找並刪除可能會非常耗費時間,而通過編程腳本則可以實現在短時間內處理大量數據。本文將提供一個使用C# 快速查找並刪除Excel重覆項的免費解決方案。 以下是實現步驟: 1. 首先安裝免費.NET ...
  • C++ 異常處理 C++ 異常處理機制允許程式在運行時處理錯誤或意外情況。它提供了捕獲和處理錯誤的一種結構化方式,使程式更加健壯和可靠。 異常處理的基本概念: 異常: 程式在運行時發生的錯誤或意外情況。 拋出異常: 使用 throw 關鍵字將異常傳遞給調用堆棧。 捕獲異常: 使用 try-catch ...
  • 優秀且經驗豐富的Java開發人員的特征之一是對API的廣泛瞭解,包括JDK和第三方庫。 我花了很多時間來學習API,尤其是在閱讀了Effective Java 3rd Edition之後 ,Joshua Bloch建議在Java 3rd Edition中使用現有的API進行開發,而不是為常見的東西編 ...
  • 框架 · 使用laravel框架,原因:tp的框架路由和orm沒有laravel好用 · 使用強制路由,方便介面多時,分多版本,分文件夾等操作 介面 · 介面開發註意欄位類型,欄位是int,查詢成功失敗都要返回int(對接java等強類型語言方便) · 查詢介面用GET、其他用POST 代碼 · 所 ...
  • 正文 下午找企業的人去鎮上做貸後。 車上聽同事跟那個司機對罵,火星子都快出來了。司機跟那同事更熟一些,連我在內一共就三個人,同事那一手指桑罵槐給我都聽愣了。司機也是老社會人了,馬上聽出來了,為那個無辜的企業經辦人辯護,實際上是為自己辯護。 “這個事情你不能怪企業。”“但他們總不能讓銀行的人全權負責, ...