mysql主從同步延遲原因及解決方案

來源:互聯網
上載者:User

標籤:解決方案   資料庫   master   朋友   mysql   

MySQL主從延遲原因以及解決方案:談到MySQL資料庫主從同步延遲原理,得從mysql的資料庫主從複製原理說起,mysql的主從複製都是單線程的操作(mysql5.6版本之前),主庫對所有DDL和DML產生binlog,binlog是順序寫,所以效率很高。

slave的Slave_IO_Running線程會到主庫取日誌,效率會比較高,slave的Slave_SQL_Running線程將主庫的DDL和DML操作都在slave實施。DML和DDL的IO操作是隨機的,不是順序的,因此成本會很高,還可能是slave上的其他查詢產生lock爭用,由於Slave_SQL_Running也是單線程的,所以一個DDL卡主了,需要執行10分鐘,那麼所有之後的DDL會等待這個DDL執行完才會繼續執行,這就導致了延時。有朋友會說:“主庫上那個相同的DDL也需要執行10分,為什麼slave會延時?”,答案是master可以並發,Slave_SQL_Running線程卻不可以。


2.MySQL資料庫主從同步延遲是怎麼產生的。

當主庫的TPS並發較高時,產生的DDL數量超過slave一個sql線程所能承受的範圍,那麼延時就產生了,當然還有就是可能與slave的大型query語句產生了鎖等待。


3.MySQL資料庫主從同步延遲解決方案

(1)最簡單的減少slave同步延時的方案就是在架構上做最佳化,盡量讓主庫的DDL快速執行。還有就是主庫是寫,對資料安全性較高,比如sync_binlog=1,innodb_flush_log_at_trx_commit = 1 之類的設定,而slave則不需要這麼高的資料安全,完全可以講sync_binlog設定為0或者關閉binlog,innodb_flushlog也可以設定為0來提高sql的執行效率。

(2)另外就是使用比主庫更好的硬體裝置作為slave。

就是把,一台從伺服器當度作為備份使用,而不提供查詢,那邊他的負載下來了,執行relay log裡面的SQL效率自然就高了。

(3)增加從伺服器嘍,這個目的還是分散讀的壓力,從而降低伺服器負載。


4.MySQL資料庫主從同步延遲產生的因素。 

1. 網路延遲 2. master負載 3. slave負載 一般的做法是,使用多台slave來分攤讀請求,再從這些slave中取一台專用的伺服器,只作為備份用,不進行其他任何操作,就能相對最大限度地達到’即時’的要求了

另外,再介紹2個可以減少延遲的參數 –slave-net-timeout=seconds 參數含義:當slave從主要資料庫讀取log資料失敗後,等待多久重建立立串連並擷取資料 slave_net_timeout單位為秒 預設設定為 3600秒 slave_net_timeout 3600 –master-connect-retry=seconds 參數含義:當重建立立主從串連時,如果串連建立失敗,間隔多久後重試。 master-connect-retry單位為秒 預設設定為 60秒 通常配置以上2個參數可以減少網路問題導致的主從資料同步延遲。


本文出自 “北島熊” 部落格,轉載請與作者聯絡!

mysql主從同步延遲原因及解決方案

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.