我們正在將 MySQL 叢集與 proxySQL 結合使用,並進行以下設定:
問題是這樣的: 伺服器 2 上的使用者觸發 SQL UPDATE,UPDATE 客戶 SET name= 'New Name' WHERE id = 123。 (此更新發送到伺服器 1,然後伺服器 2 更新)
在同一程式碼區塊中,如果我們選擇記錄(SELECT name FROMcustomers WHERE id =123),則該查詢將發送到本地伺服器,結果將是“舊名稱”,除非我們暫停程式碼1 秒(進行測試) 。
我們想到的一個解決方案是更改連接 (PHP) 並直接轉到伺服器 1 來獲取程式碼區塊的剩餘部分,但這有點違背了目的,而且遠非理想(安靜的大型程式碼庫需要更新)。
是否有涉及 proxySQL 的解決方案?
為了防止查詢路由到具有高複製延遲的從屬伺服器,您可以在表 mysql_server 列中設定閾值最大複製延遲 最大複製延遲。參考:max_replication_lag
max_replication_lag – 如果大於 0,ProxySQL 將 定期監控複製延遲以及是否超出配置的範圍 閾值,它將暫時避開主機,直到複製趕上。
您也可以建立查詢規則來拆分查詢讀寫。 ref : ProxySQL 分割讀取/寫入
重要:proxysql-gtid-causal-reads 如果您使用的是 Mysql 版本 5.7.5 或更高版本,這可能主要解決您的問題。