在RDS MySQL上使用Hint语法

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