本文介绍如何在读写模式为可读可写(自动读写分离)的集群地址中使用Hint语法。
使用限制
仅读写模式为可读可写(自动读写分离)的集群地址支持Hint语法,只读模式下的集群地址和主地址均不支持Hint语法。关于集群地址的读写模式信息,请参见集群地址的读写模式。
注意事项
Hint的路由优化级别最高,不受一致性级别和事务拆分的约束,使用前请进行评估。
使用方法
- 支持在SQL语句前加上
/*FORCE_MASTER*/
或/*FORCE_SLAVE*/
强制指定这条SQL的路由方向。例如
select * from test
默认会路由到只读节点,改为/*FORCE_MASTER*/ select * from test
就会路由到主节点。 - 支持在SQL语句前加上
/*force_node='<节点ID>'*/
强制指定在某节点执行某查询命令。例如
/*force_node='pi-bpxxxxxxxx'*/ show processlist
,该show processlist
命令只在pi-bpxxxxxxxx
节点执行。如果该节点发生故障,则返回报错force hint server node is not found, please check.
。 - 支持在SQL语句前加上
/*force_proxy_internal*/set force_node = '<节点ID>'
强制指定在某节点执行所有查询命令。例如
/*force_proxy_internal*/set force_node = 'pi-bpxxxxxxxx'
,执行该命令后,后续所有查询命令只发往pi-bpxxxxxxxx
节点,如果该节点发生故障,则返回报错set force node 'rr-bpxxxxx' is not found, please check.
。说明- 若您需要通过MySQL官方命令行执行上述Hint语句,请在命令行中加上-c参数,否则该Hint会被MySQL官方命令行过滤导致Hint失效,具体请参见MySQL官方命令行。
- 通常不建议使用
/*force_proxy_internal*/
语法,会导致后续所有查询请求都发往该节点,读写分离失效。 - Hint语句里不要有改变环境变量的语句,例如
/*FORCE_SLAVE*/ set names utf8;
等,这类语句可能导致后续的业务出错。