使用 MySQL Shell 管理维护 MySQL 8.0 Innodb Cluster
mysqlsh root@"localhost:3306" # 查看集群名 JS> dba.getCluster(); JS> var cluster = dba.getCluster(); # 添加节点 JS > cluster.addInstance('root@192.168.244.129:3381') JS > cluster.addInstance('root@192.168.244.129:3382') # 查看集群状态 JS > cluster.status() # 集群描述 JS > cluster.describe() # 配置新主选举权重 JS > mycluster.addInstance('root@192.168.244.129:3381', {memberWeight:25}) JS > mycluster.addInstance('root@192.168.244.129:3382', {memberWeight:50}) # 指定一个新的主节点 JS > cluster.setPrimaryInstance('192.168.244.129:3381') # 切换到多主模式 Cluster.switchToMultiPrimaryMode() JS > cluster.switchToMultiPrimaryMode() # 切换到单主模式 Cluster.switchToSinglePrimaryMode() JS > cluster.switchToSinglePrimaryMode('172.16.1.125:3306') # 检查节点配置实例,用于加入cluster之前 JS > dba.checkInstanceConfiguration("root@hostname:3306") # 重启 JS > dba.rebootClusterFromCompleteOutage('mycluster'); # 删除schema JS > dba.dropMetadataSchema(); # 检查cluster里节点状态 JS > cluster.checkInstanceState("root@hostname:3306") # 检查/etc/my.cnf是否正常 JS > var cluster = dba.createCluster('myCluster'); # 重新加入节点 JS > cluster.rejoinInstance("root@hostname:3306") # 删除节点 JS > cluster.removeInstance("root@hostname:3306") # 强制删除节点 JS > cluster.removeInstance('root@host:3306',{force:true}) # 解散集群 JS > cluster.dissolve({force:true}) # 如何将Multi-Primary改为Single-Primary a) 解散原来的集群: JS > cluster.dissolve({force: true}) b) 每台主机MySQL修改如下配置: mysql> set global group_replication_enforce_update_everywhere_checks=OFF; mysql> set global group_replication_single_primary_mode=ON; c) 重新创建集群: JS > var cluster = dba.createCluster('mysqlCluster'); JS > cluster.addInstance('chianyu@svr2:3306'); JS > cluster.addInstance('chianyu@svr3:3306'); # 重置Innodb cluster集群环境: 主节点:登录mysql-shell清空集群 JS > dba.dropMetadataSchema(); mysql> stop group_replication; 清空日志,确保和从库的表没有冲突 mysql> reset master; mysql> reset slave; 其他节点(主要清理和主库的主从信息, 确保主库和从库的表没有冲突) mysql> stop group_replication; mysql> reset master; mysql> reset slave