You need to enable JavaScript to run this app.
文档中心
云数据库 MySQL 版

云数据库 MySQL 版

复制全文
下载 pdf
连接管理
使用 Hint 语法
复制全文
下载 pdf
使用 Hint 语法

本文介绍如何通过 Hint 语法使指定节点执行 SQL 请求。

背景信息

使用 Hint 语法可以强制 SQL 请求在指定的节点上执行。Hint 的路由优先级最高,不受一致性、事务的约束,但 Hint 功能依赖 Proxy 链路,需要开启读写分离,并对所有连接生效,请在使用前合理评估是否可以用于业务。

支持的 Hint 语法

  • 当前支持以下三种 Hint:
    • 指定到主节点执行。

      /* FORCE_MASTER */
      
    • 指定到只读节点执行。

      /* FORCE_SLAVE */
      
    • 指定某个具体节点执行。在目标实例的连接管理菜单下获取节点 ID。

      /* FORCE_NODE='<id>' */
      

说明

指定节点不存在 / 该节点暂时不可用时,使用 Hint 强制路由将报错 specific node[<id>] not found

支持的 SQL 语句

支持以下类型的单 SQL 语句:

  • SHOW STATEMENT
  • SELECT STATEMENT
  • EXPLAIN STATEMENT
  • UNION STATEMENT
  • KILL STATEMENT

说明

  • 支持大小写混用(如 /* FORCE_master */ show databases;)。
  • 支持在 SDK 中使用。

转发策略

在读写分离指定各节点权重前提下使用 Hint,将会按照以下策略进行转发:

  • 指定到主节点执行(/* FORCE_MASTER */
    可在主节点权重为 0 的情况下,将 SQL 语句强制路由至主节点。

  • 指定到只读节点执行(/* FORCE_SLAVE */
    首先尝试在只读节点间按权重做转发,若只读节点权重均为 0,语句将被路由至主节点。

  • 指定某个具体节点执行(/* FORCE_NODE='<id>' */
    可在特定节点权重为 0 的情况下,将语句强制路由至该节点。

使用限制

  • 在 MySQL 客户端中通过命令行进行连接并使用 Hint 语句时,需在命令中增加 -c 选项,否则 Hint 会被 MySQL 命令行工具过滤

  • Hint 注释限制在 SQL 语句起始部分,如 /* FORCE_MASTER */ show databases;;语句内注释不解析,如 show /* FORCE_MASTER */ databases;

  • 不支持在一条 SQL 语句中加入多条 Hint,如 /* FORCE_MASTER FORCE_SLAVE */

  • 暂不支持通过 Hint 转发 PREPARE 语句或多语句,如 show databases; use test;

最近更新时间:2024.03.01 14:44:51
这个页面对您有帮助吗?
有用
有用
无用
无用