MySQL Shell无法拉起MGR集群解决办法
【MySQL Shell无法拉起MGR集群解决办法】用MySQL Shell要重新拉起一个MGR集群时,可能会提示下面的错误信息:
Dba.rebootClusterFromCompleteOutage: Unable to get an InnoDB cluster handle. The instance '172.16.130.197:3306' may belong to a different cluster from the one registered in the Metadata since the value of 'group_replication_group_name' does not match the one registered in the Metadata: possible split-brain scenario. Please retry while connected to another member of the cluster. (RuntimeError)
意思是该节点属于其他MGR集群(从元数据读取到的
group_replication_group_name
值判断的),因此不能直接拉起。这种错误常见于MySQL 5.7版本构建的MGR集群环境下,如果是运行MySQL 8.0的话则一般很少见。
之所以会这样,是因为MySQL 5.7中还不支持 SET PERSIST 功能。
在MySQL 8.0中,用MySQL Shell构建MGR集群时,会随机生成一个UUID作为 group_replication_group_name,并以 SET PERSIST 的方式持久化(保存到
mysqld-auto.cnf
文件中),实例重启时还能继续读取。而在MySQL 5.7中,因为没有这个功能,实例重启时还会从原来的
my.cnf
中读取旧的 group_replication_group_name 值,导致被判断为该节点属于另一个集群。现在已经知道问题的原因了,解决办法也简单。
- 获取正确的 group_replication_group_name。
实例重启完成后,读取mysql_innodb_cluster_metadata.clusters
这个元数据表,获取正确的 group name。
mysql> select attributes->'$.group_replication_group_name' from clusters;
+----------------------------------------------+
| attributes->'$.group_replication_group_name' |
+----------------------------------------------+
| "bc664a9b-9b5b-11ec-8a73-525400c5601a"|
+----------------------------------------------+
- 在每个节点上手动修改 group_replication_group_name 。
mysql> set global group_replication_group_name = "bc664a9b...";
- 再次执行
dba.rebootClusterFromCompleteOutage()
就行了。
MySQL172.16.130.197:3306 sslJS > dba.rebootClusterFromCompleteOutage()
Restoring the default cluster from complete outage...
Enjoy GreatSQL :)
本文由博客一文多发平台 OpenWrite 发布!
推荐阅读
- MySQL主从复制之并行复制说明
- 简单学习一下ibd数据文件解析
- 5. MGR管理维护 | 深入浅出MGR
- 只要9.9元!零基础学习MySQL
- 万答#21,如何查看 MySQL 数据库一段时间内的连接情况
- 技术分享|闪回在MySQL中的实现和改进
- 万答#20,索引下推如何进行数据过滤
- linux 磁盘io利用率高,分析的正确姿势
- 技术分享 | Prometheus+Grafana监控MySQL浅析