
以上是目前比較主流的資料庫架構:一主一備多從。
1.問題
由于主從可能存在延遲,用戶端執行完一個更新事務後馬上發起查詢,如果查詢選擇的是從庫的話,就有可能讀到剛剛的事務更新之前的狀态。
2.解決方案
(1)由業務開發自己評估,如果對主從延遲不敏感則讀從庫,如果對主從延遲敏感,則讀主庫,這個是平時使用較多的方案;
(2)等主庫DTID方案:就是在主庫執行完寫操作之後會傳回一個GTID,然後等從庫執行完這個DTID之後再執行查詢操作,方案的具體執行步驟如下:
trx1 事務更新完成後,從傳回包直接擷取這個事務的 GTID,記為 gtid1;
標明一個從庫執行查詢語句;
在從庫上執行 select wait_for_executed_gtid_set(gtid1, 1);
如果傳回值是 0,則在這個從庫執行查詢語句;
否則,到主庫執行查詢語句。