本文介紹如何在RDS MySQL的讀寫分離情境下使用Hint文法。
限制
Hint文法僅支援讀寫分離地址,不支援唯讀地址。更多資訊,請參見什麼是讀寫分離。
使用方法
使用MySQL命令列進行串連並使用Hint語句時,需要在命令中增加
-c
選項,否則Hint會被MySQL命令列工具過濾。支援通過
/*FORCE_MASTER*/
和/*FORCE_SLAVE*/
指定在主執行個體或備執行個體執行查詢命令。說明因為Hint的路由優先順序最高,例如Hint不受一致性、事務的約束,需要您評估是否可以用於業務。
Hint語句裡不能包含改變環境變數的語句,例如
/*FORCE_SLAVE*/ set names utf8;
,可能導致後續業務出錯。如果唯讀節點的權重配置為0,但是使用Hint文法強制路由到該節點,用戶端串連會斷開。
支援通過
/*force_node='<執行個體ID>'*/
命令指定在某個執行個體執行查詢命令。例如/*force_node='rr-bpxxxxx'*/ show processlist;
,該show processlist;
命令只在rr-bpxxxxx執行個體執行。如果這個執行個體發生故障,則返回報錯force hint server node is not found, please check.
。支援通過
/*force_proxy_internal*/set force_node = '<執行個體ID>';
命令永久指定在某個執行個體執行查詢命令。例如/*force_proxy_internal*/set force_node = 'rr-bpxxxxx';
,執行該命令後,後續所有命令只發往rr-bpxxxxx執行個體,如果這個執行個體發生故障,則返回報錯set force node 'rr-bpxxxxx' is not found, please check.
。說明通常不建議使用
/*force_proxy_internal*/
文法,會導致後續所有請求都發往該執行個體,讀寫分離失效。