在MySQL 8.2的版本中,MySQL Router能自动分辨对数据库读写/操作并把这些操作路由到正确的实例上,这是要革众多SQL中间件的命!大家说这个算不算遥遥领先呢?
关于号主,姚远:
- Oracle ACE(Oracle和MySQL数据库方向)。
- 华为云最有价值专家。
- 《MySQL 8.0运维与优化》的作者。
- 拥有 Oracle 10g、12c和19c OCM等数十项数据库认证。
- 曾任IBM公司数据库部门经理,服务2万+客户。
- 精通C和JAVA,发明两项计算机专利
这里号主翻译了知名MySQL布道师Frédéric Descamps撰写的关于这个功能的介绍。
原文网址:https://lefred.be/content/mysql-8-2-transparent-read-write-splitting/
作者: Frédéric Descamps,Oracle公司MySQL社区经理,知名MySQL布道师 。
我们一直在等待它!它现在已经可用了!MySQL中的读/写分离!!
在大规模应用中,我们将读操作分发到副本之间,但这需要在应用程序中进行管理:将写操作指向某处,将读操作指向另外的地方。
在MySQL 8.2中,MySQL路由器现在能够识别读操作和写操作,并将它们路由到InnoDB集群的主实例,或将写操作路由到异步复制源,而将读操作路由到非主实例或副本。
为了说明这一点,我部署了最简单的架构:MySQL InnoDB ReplicaSet。
MySQL InnoDB ReplicaSet
这只是一个复制源实例和一个(或多个)异步副本:
这是MySQL Shell中ReplicaSet对象的状态:
启动MySQL Router 8.2
让我们配置(引导)MySQL Router:
mysqlrouter --bootstrap root@127.0.0.1:3306 --user mysqlrouter
我们还可以在MySQL Shell中看到Router的ReplicaSet对象:
通过读写端口(6450)连接到MySQL数据库:
可以看到,默认情况下,如果我们执行读操作,会连接到副本(或者非主实例),但如果我们启动一个事务,将连接到复制源(主实例),这个过程会在同一个连接中自动完成,并且不需要应用更改端口。
我们还可以看到在使用只读事务时的区别:
我们还可以在MySQL Router的配置文件中看到读写分离的生成设置:
[routing:bootstrap_rw_split]
bind_address=0.0.0.0
bind_port=6450
destinations=metadata-cache://myreplica/?role=PRIMARY_AND_SECONDARY
routing_strategy=round-robin
protocol=classic
connection_sharing=1
client_ssl_mode=PREFERRED
server_ssl_mode=PREFERRED
access_mode=auto
用户还可以在会话中使用ROUTER SET access_mode=命令来定义应用要连接的实例类型:
总结
总之,MySQL Router 8.2支持读写分离。这是一项有价值的功能,可以优化数据库性能和可扩展性,而无需在应用程序中进行任何更改。
这种配置使您能够将所有读流量引导到只读实例,将所有写流量引导到读写实例。
这不仅增强了用户的整体体验,还简化了数据库管理和部署。
读写实例是主实例或源实例。只读实例是副本(InnoDB集群的非主实例、ReplicaSet的非主实例或复制集群中的非主实例)。
享受MySQL,再也没有不将工作负载分配到副本的借口了!