本文介绍如何在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*/
语法,会导致后续所有请求都发往该实例,读写分离失效。