贝利信息

mysql中使用MySQL Router与主从复制结合实现高可用

日期:2026-01-26 00:00 / 作者:P粉602998670
不能。MySQL Router 仅是路由代理,不参与数据复制与主从同步,必须先配置好主从复制(如 binlog 复制或 InnoDB Cluster),Router 才能基于元数据路由请求。

MySQL Router 能不能直接替代主从复制?

不能。MySQL Router 本身不复制数据,也不参与主从同步逻辑。它只是个轻量级的路由代理,负责把客户端请求按策略转发到后端的 MySQL 实例上。主从复制(比如基于 binlog 的异步/半同步复制)必须先手动或通过 MySQL Shelldba.configureReplicationAsPrimary() 等方式配好,Router 才有东西可路由。

配置 MySQL Router 前必须确认的主从状态

Router 启动时会连接后端 MySQL 实例并读取元数据(如 replication_asynchronous_connection_failover 表),如果主从关系没建好、IO_THREADSQL_THREADConnecting / Slave_IO_Running: No,Router 会报错退出,并在日志里出现类似:

Failed to fetch metadata from server 'mysql1': ERROR 1146 (42S02): Table 'mysql_innodb_cluster_metadata.routers' doesn't exist

实际使用前务必检查:

Router 配置文件中 routing_strategy 关键区别

mysqlrouter.conf[routing] 段里,routing_strategy 决定流量怎么分发,直接影响高可用效果:

示例片段(读写分离):

[routing:read-write]
bind_address = 127.0.0.1:6446
destinations = metadata-cache://m

ycluster/?role=PRIMARY mode = read-write routing_strategy = first-available [routing:read-only] bind_address = 127.0.0.1:6447 destinations = metadata-cache://mycluster/?role=SECONDARY mode = read-only routing_strategy = round-robin-with-fallback

Router 自动感知主从切换的前提条件

Router 要自动把写请求切到新主,不是靠心跳或自定义脚本,而是依赖两个硬性条件:

如果用的是传统主从(非 InnoDB Cluster),Router 无法自动识别主从切换,只能靠外部工具(如 MHA、Orchestrator)修改 Router 配置并重载(mysqlrouter --reload)。

最常被忽略的一点:Router 进程本身没有“选主”能力,它只是个状态消费者。主从切换是否成功、元数据是否及时更新、应用连接是否断开重连——这三个环节漏掉任何一个,高可用就断在中间。