正常情况下,如果给 DRDS 数据库的 RDS 主实例配置了只读实例,并且给主实例和只读实例都设置了读流量,那么 DRDS 会根据读写比例将 SQL 下发到主实例或者是只读实例执行。但是如果主实例与只读实例的异步数据复制存在较大的延迟,将 SQL 下发到只读实例执行就会导致出错或者返回错误结果。
只读实例延时切断会根据主备复制最大延时时间判断将所执行的 SQL 下发到主实例还是只读实例。
语法
/!TDDL:SQL_DELAY_CUTOFF=time*/
在自定义 HINT 中指定 SQL_DELAY_CUTOFF 的值,当备库的 SQL_DELAY 值(MySQL主备复制延迟)达到或超过 time 的值(单位秒)时,查询语句会被下发到主实例。
注意:
DRDS 自定义 HINT 支持 /!TDDL:hint command*/ 和 /*TDDL:hint command*/ 两种格式。
如果使用 /*TDDL:hint command*/ 格式,在使用 MySQL 官方命令行客户端执行带有 DRDS 自定义 HINT 的 SQL 时,请在登录命令中加上 -c 参数。否则,由于 DRDS 自定义 HINT 是以 MySQL 注释 形式使用的,该客户端会将注释语句删除后再发送到服务端执行,导致 DRDS 自定义 HINT 失效。具体请查看 MySQL 官方客户端命令。
示例
指定主备复制延迟时间为 5 秒:
/!TDDL:SQL_DELAY_CUTOFF=5*/SELECT * FROM table_name;
在 SQL 语句指定了 SQL_DELAY_CUTOFF 的值为 5,当备库的 SQL_DELAY 值达到或超过5秒时,查询语句会下发到主实例执行。
配合其他自定义 HINT 使用:
/!TDDL:SLAVE AND SQL_DELAY_CUTOFF=5*/SELECT * FROM table_name;
备库延迟切断注释也可以配合其他注释使用,该 SQL 查询请求默认会被下发到只读实例,但是当出现主备复制延时达到或超过 5 秒时,会下发到主实例。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。