MySQL Router未监听6446 R/W端口问题求助
InnoDB Cluster MySQL Router 仅监听只读端口问题排查与解决
核心问题定位
从MySQL Router日志可以明确看到:元数据缓存刷新后错误将集群所有节点标记为mode=RO,因此主动关闭了读写路由端口(6446、6448)。但cluster.status()显示集群主节点inno1:3306为R/W状态,说明集群本身运行正常,问题出在Router获取与解析集群元数据的环节。
排查与修复步骤
1. 验证Router账号权限
登录集群主节点inno1,检查bootstrap时创建的router1账号权限:
SHOW GRANTS FOR 'router1'@'%';
该账号需具备以下核心权限以正确读取集群元数据:
SELECT权限(针对mysql_innodb_cluster_metadata库)PROCESS、REPLICATION CLIENT权限
如果权限缺失,执行以下命令补充:
GRANT SELECT ON mysql_innodb_cluster_metadata.* TO 'router1'@'%'; GRANT PROCESS, REPLICATION CLIENT ON *.* TO 'router1'@'%'; FLUSH PRIVILEGES;
2. 检查集群元数据一致性
在主节点执行命令,确认集群内部元数据的节点角色:
SELECT member_host, member_port, member_role FROM performance_schema.replication_group_members;
需确保结果中inno1的member_role为PRIMARY,与cluster.status()结果一致。若此处显示异常,需执行集群元数据修复:
SET GLOBAL group_replication_bootstrap_group=ON; START GROUP_REPLICATION; SET GLOBAL group_replication_bootstrap_group=OFF;
3. 修复版本兼容性问题
当前集群使用MySQL 8.3.0,但Router版本为8.0.36,跨大版本存在元数据解析兼容性风险。建议将MySQL Router升级至与集群版本一致的8.3.x版本:
# 卸载旧版本 apt remove --purge mysql-router # 添加MySQL 8.3源后安装 wget https://dev.mysql.com/get/mysql-apt-config_0.8.29-1_all.deb dpkg -i mysql-apt-config_0.8.29-1_all.deb # 选择MySQL 8.3版本后更新源 apt update apt install mysql-router
4. 确认主节点参数配置
在主节点inno1检查关键参数,确保主节点可写状态被正确识别:
SHOW VARIABLES LIKE 'group_replication_single_primary_mode'; SHOW VARIABLES LIKE 'read_only';
需确保group_replication_single_primary_mode为ON,且主节点的read_only为OFF。
5. 重新初始化MySQL Router
若以上检查均正常,删除现有Router配置并重新bootstrap:
rm -rf /etc/mysqlrouter mysqlrouter --ssl-mode=disabled --bootstrap root@inno1 --directory /etc/mysqlrouter --user=root --account=router1 systemctl restart mysqlrouter
重启后查看日志,确认元数据缓存是否正确识别主节点为mode=R/W,读写端口6446、6448是否正常监听。
内容的提问来源于stack exchange,提问作者mr.Tony Soprano
相关产品推荐
相关产品推荐

