首页/数据/数据库速查/MySQL Router 概念与用途
主从复制与高可用53 条

MySQL Router 概念与用途

官方轻量代理:为 InnoDB Cluster/MGR 提供读写端口与自动路由,主库切换时客户端无感(改的是 Router 的元数据视图)。

数据库速查数据更新于 2026-10-13

MySQL Router 是什么

MySQL Router 是官方轻量代理,为 InnoDB Cluster / MGR 提供稳定的读写入口:客户端连 Router 的读写端口,Router 把写流量转给当前主库、读流量负载均衡到从库。主库切换时 Router 通过集群元数据感知新主,客户端无需修改连接串。它本身无状态,可以多实例部署,是 MGR 架构里承担「连接路由层」的标配组件。

基本信息

读写端口6446,指向当前主库
只读端口6447,负载均衡到从库
管理接口8443,提供 REST 风格的集群信息
初始化mysqlrouter --bootstrap 用户名@主机,自动拉取集群元数据
配合组件InnoDB Cluster / MGR,与 MySQL Shell 配套使用

典型使用场景

  • MGR 集群接入:应用只配置一个连接地址,主库切换对应用透明
  • 读写分流:写操作走读写端口,报表类读操作指向只读端口
  • 连接收敛:减少应用直连每个实例的连接数量
  • 灰度与迁移:切换集群或新增节点时,从 Router 层调整路由而不动应用配置
  • 多实例高可用:多台 Router 前置,配合客户端重试避免单点

端口与命令速览

端口与命令速览
-- 典型端口布局(默认值,可按需调整)
6446  读写端口,指向当前主库
6447  只读端口,负载均衡到从库
8443  管理接口,查询集群与路由状态
-- 启动与初始化
mysqlrouter --bootstrap dba@10.0.0.10:3306 --user=mysqlrouter
mysqlrouter --config /etc/mysqlrouter/mysqlrouter.conf
-- 查看路由状态(管理接口)
curl -s --user dba:pass https://10.0.0.20:8443/api/20190715/routes

端口与用途

端口用途注意
6446读写流量,指向当前主库主库切换后由 Router 自动改指向
6447只读流量,负载均衡到从库弱一致读场景要注意延迟
8443管理与状态查询需要认证,不要暴露到公网
3306后端实例端口Router 与后端之间使用
bootstrap 会把集群连接元数据写入 Router 配置:集群拓扑变化后 Router 自动更新路由目标,所以应用连接串只需要改一次指向 Router。
单实例部署的 Router 自身就是单点:生产至少部署两个实例,并在客户端配置连接重试与超时,避免单一 Router 故障导致整体不可用。

易错点

  • 把 Router 当查询缓存或连接池:它负责路由与连接管理,不解析查询语义,也没有查询缓存能力
  • 只部署一个 Router 实例:该实例故障时整个集群对外不可用,需要多实例加客户端重试
  • 应用直连只读端口却要求强一致读:读写分离下从库存在延迟,事务内或写后立即读的场景必须走读写端口
  • 管理接口暴露在可访问网段:8443 能看到集群拓扑与状态,需要单独做访问控制
  • 主库切换后没有验证应用连接:切换期间存活的连接可能已经失效,应用要有重连逻辑,切换后要主动验证一遍

数据来源与参考

  • MySQL 8.0 Reference Manual: MySQL Router

相关工具

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌