本文介紹如何在RDS MySQL的讀寫分離情境下使用Hint文法。
限制
Hint文法僅支援讀寫分離地址,不支援唯讀地址。更多資訊,請參見什麼是讀寫分離。
使用方法
使用MySQL命令列進行串連並使用Hint語句時,需要在命令中增加
-c選項,否則Hint會被MySQL命令列工具過濾。支援通過
/*FORCE_MASTER*/和/*FORCE_SLAVE*/指定在主執行個體或備執行個體執行查詢命令。例如,/*FORCE_MASTER*/ SELECT * from <table_name>。說明因為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*/文法,會導致後續所有請求都發往該執行個體,讀寫分離失效。