?先先了解mysql主從同步的原理
1. master提交完事務后,寫?binlog
2. slave連接到master,獲取binlog
3. master創(chuàng)建dump線程,推送binglog到slave
4. slave啟動?個IO線程讀取同步過來的master的binlog,記錄到relay log中繼?志中
5. slave再開啟?個sql線程讀取relay log事件并在slave執(zhí)?,完成同步
6. slave記錄??的binglog

由于mysql默認的復制?式是異步的,主庫把?志發(fā)送給從庫后不關?從庫是否已經(jīng)處理,這樣會產(chǎn)??個問題就是假設主庫掛了,從庫處理失敗了,這時候從庫升為主庫后,?志就丟失了。由此產(chǎn)?兩個概念。
全同步復制
主庫寫?binlog后強制同步?志到從庫,所有的從庫都執(zhí)?完成后才返回給客戶端,但是很顯然這個?式的話性能會受到嚴重影響。
半同步復制
和全同步不同的是,半同步復制的邏輯是這樣,從庫寫??志成功后返回ACK確認給主庫,主庫收到?少?個從庫的確認就認為寫操作完成。
主從的延遲怎么解決呢?
1. 針對特定的業(yè)務場景,讀寫請求都強制?主庫
2. 讀請求?從庫,如果沒有數(shù)據(jù),去主庫做?次查詢