文档

HINT语法使用说明

更新时间:

本文介绍如何在读写模式为可读可写(自动读写分离)的集群地址中使用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.

  • 当开启列存和行存自动引流功能时,支持通过增加HINT语法/*FORCE_IMIC_NODES*/将请求强制路由到列存节点上执行。行列自动引流详情请参见配置行列自动分流

    说明
    • 上述HINT语法不区分大小写,但在使用时必须将HINT语法放在SQL语句的句首。

    • 若您需要通过MySQL官方命令行执行上述HINT语句,请在命令行中加上-c参数,否则该HINT会被MySQL官方命令行过滤导致HINT失效,具体请参见MySQL官方命令行

    • 通常不建议使用/*force_proxy_internal*/语法,会导致后续所有查询请求都发往该节点,读写分离失效。

    • HINT语句里不要有改变环境变量的语句,例如/*FORCE_SLAVE*/ set names utf8; 等,这类语句可能导致后续的业务出错。