MySQL數據庫主從同步延遲原理。mysql
MySQL數據庫主從同步延遲是怎麼產生的。sql
MySQL數據庫主從同步延遲解決方案。數據庫
MySQL數據庫主從同步延遲產生的因素。安全
答:談到MySQL數據庫主從同步延遲原理,得從mysql的數據庫主從複製原理提及,mysql的主從複製都是單線程的操做,主庫對全部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數據庫主從同步延遲解決方案ide
答:最簡單的減小slave同步延時的方案就是在架構上作優化,儘可能讓主庫的DDL快速執行。還有就是主庫是寫,對數據安全性較高,好比sync_binlog=1,innodb_flush_log_at_trx_commit = 1 之類的設置,而slave則不須要這麼高的數據安全,徹底能夠講sync_binlog設置爲0或者關閉binlog,innodb_flushlog也能夠設置爲0來提升sql的執行效率。另外就是使用比主庫更好的硬件設備做爲slave。優化
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個參數能夠減小網絡問題致使的主從數據同步延遲