mysql資料庫主從同步延遲原理。
mysql資料庫主從同步延遲是怎麼産生的。
mysql資料庫主從同步延遲解決方案。
mysql資料庫主從同步延遲産生的因素。
1.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資料庫主從同步延遲解決方案
答:最簡單的減少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個參數可以減少網絡問題導緻的主從資料同步延遲