本文介绍如何在读写模式为可读可写(自动读写分离)的集群地址中使用Hint语法。
使用限制
仅读写模式为可读可写(自动读写分离)的集群地址支持Hint语法,只读模式下的集群地址和主地址均不支持Hint语法。关于集群地址的读写模式信息,请参见集群地址的读写模式。
注意事项
Hint的路由优化级别最高,不受一致性级别和事务拆分的约束,使用前请进行评估。
使用方法
支持在SQL语句前加上
/*FORCE_MASTER*/或/*FORCE_SLAVE*/强制指定这条SQL的路由方向。例如
select * from test默认会路由到只读节点,改为/*FORCE_MASTER*/ select * from test就会路由到主节点。需要注意的是,/*FORCE_MASTER*/只能在可读可写的地址上生效,对于只读地址即使使用//*FORCE_MASTER*/也不会路由到主节点。
支持在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;等,这类语句可能导致后续的业务出错。




