MySQL Router 8.2.0于2023年10月25日正式发行。该版本带来了大家期待已久的读写分离功能。
MySQLRouter通过配置读写分离,可以将所有读流量定向到只读实例,将所有写流量定向到读写实例。读写实例可以是InnoDB Cluster中的主成员或InnoDB Replica中的主机。只读实例是InnoDB Cluster中的次要成员,或者是InnoDB Replica中的主/从机。MySQL Router将每个查询分类为读或写,并将其定向到适当的后端。也可以手动或在程序中使用“ROUTER SET”或“query_attributes”指定查询的类型。如何配置?要启用读写分离,MySQL Router必须启用以下选项:
- access_mode: 必须设置为auto
- connection_sharing: 必须设置为1
- protocol: 必须设置为 classic
- destinations: 必须设置为metadata-cache角色设置为“PRIMARY_AND_SECONDARY”的 URL
每个会话配置可以通过以下选项,从命令行为每个会话定义读写分离配置:
- ROUTER SET optionName='value'
- query_attributes router.optionName value
optionName的值包括如下:
- access_mode设置为以下值之一:
- read_write:所有会话流量都发送到读写服务器。
- read_only:所有会话流量都发送到只读服务器。
- auto:根据事务类型选择服务器,读取指向 read_only 服务器,写入指向 read_write 服务器。
- wait_for_my_writes [ 0 | 1 ]:如果启用1,只读查询将等待最后写入的事务。
- wait_for_my_writes_timeout [ 0 | 4294967295 ]:在回退到 read_write 目标之前,等待 read_only 目标应用写入事务的最长时间(以秒为单位)。默认值为 1。
例如,
SQL> ROUTER SET access_mode='read_write'
SQL> query_attribute router.access_mode read_write
引导启动
MySQL Router引导启动时,将创建如下默认配置:
[router:read_write_split]
bind_port=6450
destinations=metadata-cache://mycluster/?role=PRIMARY_AND_SECONDARY
routing_strategy=round-robin
access_mode=auto
protocol=classic
[DEFAULT]
max_idle_server_connections=64
使用过程中,MySQL Router将区分SQL语句进行读写分离,详细的内容可以访问官网手册确认。
以上内容是关于MySQL Router 8.2的读写分离功能介绍,欢迎大家使用,并提出改进建议。
感谢关注“MySQL解决方案工程师”!