讀寫分離
更新時間 2025-09-11 18:04:22
最近更新時間: 2025-09-11 18:04:22
分享文章
本文主要介紹了讀寫分離的配置與使用。
特性
會話不開啟事務,讀語句直接發送到slave執行。
會話開啟事務,讀語句發送到master上執行。這樣才能保證同個事務內的數據可見。
開啟讀寫分離
DRDS使用以下兩種方式開啟讀寫分離功能:
配置DRDS balance參數。
在select語句前增加 /* !HINT({"balance":"?"})*/ 注解。
方式一:讀寫分離屬性配置
您可以在控制臺設置讀寫分離,支持的配置如下。具體操作,請參見關聯MySQL設置。
關閉:即
balance = 0,表示不開啟讀寫分離,所有語句均發往寫節點。讀語句發往讀庫:即
balance = 1,表示開啟讀寫分離,所有事務外(autocommit=1)的SELECT語句發往讀節點;所有事務內(autocommit=0)的語句發往寫節點。讀語句隨機發往讀庫和寫庫:即
balance = 2,表示開啟讀寫分離,所有事務外(autocommit=1)的SELECT語句隨機發往讀節點或寫節點;所有事務內(autocommit=0)的語句發往寫節點。自定義權重:即
banlance= 3,表示開啟讀寫分離,支持根據實際情況,設置自定義讀寫分離權重。
方式二:HINT語句
使用 /* !HINT({"balance":"?"})*/ 注解可以強制指定 select 語句按照指定規則進行讀寫分離, balance 有三種取值方式,與DRDS的 balance 屬性類似:
/* !HINT({"balance":"0"})*/ 強制 select 語句發往寫節點 。
/* !HINT({"balance":"1"})*/ 強制 select 語句發往讀節點 。
/* !HINT({"balance":"2"})*/ 強制 select 語句隨機發往數據庫讀節點或寫節點。
注意
- insert, update, delete語句在任何情況下都將發往寫節點,所以讀寫分離實際只針對select語句。
- /* !HINT({"balance":"?"})*/ 的讀寫分離規則優先級高于配置 balance 屬性。
- 配置 balance 屬性進行讀寫分離需結合 autocommit=1 使用,而 /* !HINT({"balance":"?"})*/ 方式不需要。