本文介紹如何在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*/
語法,會導致后續所有請求都發往該實例,讀寫分離失效。