天天看點

MySql主從架構下,如何保證讀取到最新的資料?

MySql主從架構下,如何保證讀取到最新的資料?

以上是目前比較主流的資料庫架構:一主一備多從。

1.問題

由于主從可能存在延遲,用戶端執行完一個更新事務後馬上發起查詢,如果查詢選擇的是從庫的話,就有可能讀到剛剛的事務更新之前的狀态。

2.解決方案

(1)由業務開發自己評估,如果對主從延遲不敏感則讀從庫,如果對主從延遲敏感,則讀主庫,這個是平時使用較多的方案;

(2)等主庫DTID方案:就是在主庫執行完寫操作之後會傳回一個GTID,然後等從庫執行完這個DTID之後再執行查詢操作,方案的具體執行步驟如下:

trx1 事務更新完成後,從傳回包直接擷取這個事務的 GTID,記為 gtid1;

標明一個從庫執行查詢語句;

在從庫上執行 select wait_for_executed_gtid_set(gtid1, 1);

如果傳回值是 0,則在這個從庫執行查詢語句;

否則,到主庫執行查詢語句。