墨墨导读:本文是 MySQL Shell 快速搭建 副本集 和 MGR集群的全过程,分享至此,希望对大家有帮助。

简介

MySQL Shell是MySQL Server的高级客户端和代码编辑器。除了和mysql命令行客户端程序一样,使用常规的SQL功能外,MySQL Shell还提供了JavaScript和Python的脚本功能,并包含多个API,其中的AdminAPI用于操作InnoDB Cluster。


安装部署

下载:
https://dev.mysql.com/downloads/shell/

安装

#tar -zxvf mysql-shell-8.0.20-linux-glibc2.12-x86-64bit.tar.gz -C /opt/idc/mysql-shell8.0.20####配置
#vi /etc/profilt
export PATH=/opt/idc/mysql-shell8.0.20/bin:$PATH
#Source /etc/profile

说明:
https://dev.mysql.com/doc/mysql-shell/8.0/en/mysql-shell-connections.html

备注:是不是很简单,但需要注意每个mysql版本都有对应shell版本。建议对应版本使用。shell 是跟着mysql版本进行维护的。

ReplicaSet:只能搭建主从架构

通过shell脚本 搭建主从
创建集群

[root@ens8 idc]# mysqlsh
MySQL Shell 8.0.20Copyright (c) 2016, 2020, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its affiliates.
Other names may be trademarks of their respective owners.Type '\help' or '\?' for help; '\quit' to exit.MySQL  JS > \connect root@192.168.244.129:3380MySQL  192.168.244.129:3380 ssl  JS > var rs = dba.createReplicaSet("dbexample")

查看集群状态:

MySQL  192.168.244.129:3380 ssl  JS > rs.status()

添加集群节点:

MySQL  192.168.244.129:3380 ssl  JS > rs.addInstance('root@192.168.244.129:3381')


查看集群状态:

MySQL  192.168.244.129:3380 ssl  JS > rs.status()

登录数据库,查看主从状态:

其他命令:

rs = dba.createReplicaSet('testadopt', {'adoptFromAR':1}) #现有副本集接管rs.addInstance(“root@192.168.244.129:3381”)  #添加节点rs.disconnect() #断开replicaset对象使用的所有内部会话。rs.forcePrimaryInstance(instance, options) #不可用主服务器的副本集中执行故障转移rs.getName() #获取集群名字rs.help([member]) #帮助信息rs.listRouters([options]) ##mysql router配置信息rs.rejoinInstance(instance[, options]) #重新加入副本rs.removeInstance(instance[, options]) #删除节点rs.removeRouterMetadata(routerDef) #删除router 信息rs.setPrimaryInstance(instance, options) #指定主节点rs.setupAdminAccount(user, options) #创建集群管理账号rs.setupRouterAccount(user, options) #指定router 访问账号rs.status([options]) #查看副本集状态#optins 部分 可以通过 \help ReplicaSet.removeInstance 查看


备注

1)现没有双主配置,并行复制,多源复制相关的参数支持,可以算不完善
2)删除添加节点

3)没有副本集摧毁的命令
如果要删除集群需要先通过removeInstance删除第二节点,再通过stop slave 以及reset slave all,并删除mysql_innodb_cluster_metadata数据库实现
4)通过,一下命令可以查看帮助文档
? ReplicaSet
官场参考:https://dev.mysql.com/doc/refman/8.0/en/mysql-innodb-replicasets.html

*总结下来,不完善,还需继续努力。

MGR新集群搭建:

创建新MGR

[root@ss30 mysqlrouter]# mysqlshMySQL  JS > dba.checkInstanceConfiguration('root@192.168.244.129:3380')
The instance 'ens8:3380' is valid to be used in an InnoDB cluster.{"status": "ok"
}

对集群中的每个服务器实例重复此过程:

 MySQL  JS >dba.checkInstanceConfiguration('root@192.168.244.129:3381')MySQL  JS >dba.checkInstanceConfiguration('root@192.168.244.129:3382')

执行dba.configureInstance()后再次检查实例配置的输出如下:

MySQL  JS >dba.configureInstance('root@192.168.244.129:3380')MySQL  JS >dba.configureInstance('root@192.168.244.129:3381')MySQL  JS >dba.configureInstance('root@192.168.244.129:3382')

创建MGR集群:

##链接主节点MySQL  JS >\connect root@192.168.244.129:3380##创建集群MySQL  192.168.244.129:3380 ssl  JS  > dba.createCluster('mgrCluster')MySQL  192.168.244.129:3380 ssl  JS > var cluster = dba.getCluster()##添加节点MySQL  192.168.244.129:3380 ssl  JS > cluster.addInstance('root@192.168.244.129:3381')MySQL  192.168.244.129:3380 ssl  JS > cluster.addInstance('root@192.168.244.129:3382')##查看集群状态MySQL  192.168.244.129:3380 ssl  JS > cluster.status()##解散InnoDB ClusterMySQL  192.168.244.129:3380 ssl  JS > cluster.dissolve()##配置新主选举权重MySQL  192.168.244.129:3380 ssl  JS >  var mycluster = dba.getCluster()MySQL  192.168.244.129:3380 ssl  JS > mycluster.addInstance('root@192.168.244.129:3381', {memberWeight:25})MySQL  192.168.244.129:3380 ssl  JS > mycluster.addInstance('root@192.168.244.129:3382', {memberWeight:50})##指定一个新的主节点MySQL  192.168.244.129:3380 ssl  JS > cluster.setPrimaryInstance('192.168.244.129:3381')##Cluster.switchToMultiPrimaryMode()切换到多主模式:MySQL  192.168.244.129:3380 ssl  JS > cluster.switchToMultiPrimaryMode()##Cluster.switchToSinglePrimaryMode()切换到单主模式MySQL  192.168.244.129:3380 ssl  JS > cluster.switchToSinglePrimaryMode('172.16.1.125:3306')

MGR集群接管:
如果在已经配置好的组复制上创建InnoDB Cluster,并且希望使用它来创建集群,可将adoptFromGR选项传递给dba.createCluster()函数。创建的InnoDB Cluster会匹配复制组是以单主数据库还是多主数据库运行。要采用现有的组复制组,使用MySQL Shell连接到组成员。

[root@ss30 mysqlrouter]# mysqlsh --uri root@192.168.244.129:3380MySQL  192.168.244.129:3380 ssl  JS > var cluster = dba.createCluster('testCluster', {adoptFromGR: true});
A new InnoDB cluster will be created based on the existing replication group on instance '192.168.244.129:3380'.Creating InnoDB cluster 'testCluster' on 'ens8:3380'...Adding Seed Instance...
Adding Instance 'ens8:3380'...
Adding Instance 'ens8:3381'...
Adding Instance 'ens8:3382'...
Resetting distributed recovery credentials across the cluster...
Cluster successfully created based on existing replication group.MySQL  192.168.244.129:3380 ssl  JS > cluster.status();
{"clusterName": "testCluster","defaultReplicaSet": {"name": "default","primary": "ens8:3380","ssl": "DISABLED","status": "OK","statusText": "Cluster is ONLINE and can tolerate up to ONE failure.","topology": {"ens8:3380": {"address": "ens8:3380","mode": "R/W","readReplicas": {},"replicationLag": null,"role": "HA","status": "ONLINE","version": "8.0.19"},"ens8:3381": {"address": "ens8:3381","mode": "R/O","readReplicas": {},"replicationLag": null,"role": "HA","status": "ONLINE","version": "8.0.19"},"ens8:3382": {"address": "ens8:3382","mode": "R/O","readReplicas": {},"replicationLag": null,"role": "HA","status": "ONLINE","version": "8.0.19"}},"topologyMode": "Single-Primary"},"groupInformationSourceMember": "ens8:3380"
}


其他命令

##检查节点配置实例,用于加入cluster之前
dba.checkInstanceConfiguration("root@hostname:3306")##重启
dba.rebootClusterFromCompleteOutage('mycluster');##删除schema
dba.dropMetadataSchema();   ##获取当前集群
var cluster = dba.getCluster('mycluster')    ##检查cluster里节点状态
cluster.checkInstanceState("root@hostname:3306") ##重新加入节点,我本地测试的时候发现rejoin一直无效,每次是delete后
cluster.rejoinInstance("root@hostname:3306")##删除集群
addcluster.dissolve({force:true})  ##增加节点
cluster.addInstance("root@hostname:3306")   ##删除节点
cluster.removeInstance("root@hostname:3306") ##强制删除节点
cluster.removeInstance('root@host:3306',{force:true})    ##解散集群
cluster.dissolve({force:true})     ###集群描述
cluster.describe()

如何重置Innodb cluster集群环境:

##主节点:登录mysql-shell清空集群
mysql-js>dba.dropMetadataSchema();mysql> stop group_replication;
##清空日志,确保和从库的表没有冲突
mysql> reset master;
mysql> reset slave;##其他节点(主要清理和主库的主从信息, 确保主库和从库的表没有冲突)
mysql> stop group_replication;
mysql> reset master;
mysql> reset slave

如何将Multi-Primary改为Single-Primary

## a) 解散原来的集群:
mysql-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) 重新创建集群:
mysql-js> var cluster = dba.createCluster('mysqlCluster');
mysql-js> cluster.addInstance('chianyu@svr2:3306');
mysql-js> cluster.addInstance('chianyu@svr3:3306');


状态属性

  • 节点状态

  1. ONLINE  - 节点状态正常。

  2. OFFLINE  -   实例在运行,但没有加入任何Cluster。

  3. RECOVERING - 实例已加入Cluster,正在同步数据。

  4. ERROR  -  同步数据发生异常。

  5. UNREACHABLE -  与其他节点通讯中断,可能是网络问题,可能是节点crash。

  6. MISSING 节点已加入集群,但未启动group replication

  • 集群状态

  1. OK – 所有节点处于online状态,有冗余节点。

  2. OK_PARTIAL – 有节点不可用,但仍有冗余节点。

  3. OK_NO_TOLERANCE – 有足够的online节点,但没有冗余,例如:两个节点的Cluster,其中一个挂了,集群就不可用了。

  4. NO_QUORUM – 有节点处于online状态,但达不到法定节点数,此状态下Cluster无法写入,只能读取。

  5. UNKNOWN – 不是online或recovering状态,尝试连接其他实例查看状态。

  6. UNAVAILABLE – 组内节点全是offline状态,但实例在运行,可能实例刚重启还没加入Cluster。

总结

整体搭建还是很快速,方便的。但还需要进行很多优化部分。
MGR算成熟,但还可以继续优化,副本集还存在很多问题,不建议生产使用。

墨天轮原文链接:https://www.modb.co/db/24739(复制到浏览器中打开或者点击“阅读原文”)

推荐阅读:144页!分享珍藏已久的数据库技术年刊

数据和云

ID:OraNews

如有收获,请划至底部,点击“在看”,谢谢!

点击下图查看更多 ↓

云和恩墨大讲堂 | 一个分享交流的地方

长按,识别二维码,加入万人交流社群

请备注:云和恩墨大讲堂

  点个“在看”

你的喜欢会被看到❤

MySQL Shell副本集和MGR快速搭建详解相关推荐

  1. DAMP环境搭建详解 DAMP----Debian Apache2 Mysql PHP5

    DAMP环境搭建详解 DAMP----Debian Apache2 Mysql PHP5 1. 更新Debian apt-get update apt-get updgrade 2. 安装Samba服 ...

  2. mysql cluster rpm包的作用_MySQL之——MySQL Cluster集群搭建详解(基于RPM安装包)

    1.下载MySQL-cluster 7.3.7 http://dev.mysql.com/downloads/cluster/ 2.环境清理及安装 1)清理CentOS6.5自带的mysql服务,其中 ...

  3. OpenStack Queens版搭建详解

    目录 OpenStack Queens版搭建详解 1.基础环境配置 1.2 节点网络规划 1.3 关闭防火墙 1.4 配置yum源 1.5 配置节点IP 1.6 配置主机名 1.7 配置主机名解析(h ...

  4. 并联下垂控制(DROOP控制)_SIMULINK模型搭建详解

    一.前言 对于多逆变器并联,最常见以及最经典的方式是采用下垂控制(DROOP控制).通过下垂控制实现微电网的调压调频功能. 二.控制策略 采用三环控制结构:下垂功率外环+电压电流双闭环 控制部分 功率 ...

  5. 并网模式微电网逆变器VSG控制_SIMULINK_模型搭建详解

    背景 在微电网中,采用电压控制型VSG可以实现并网.离网.以及两种模式的无缝切换,能够为微电网系统提供电压和频率支撑:就应用范围而言,电压控制型相较于电流控制型的VSG适用范围更广.基于电压控制型VS ...

  6. 小皮面板有php环境吗,php环境搭建详解

    本文主要和大家分享php环境搭建wampserver.Apache.Mysql和php php环境搭建csdn php环境搭建详解 ,希望能帮助到大家. wampserver2.5-Apache-2. ...

  7. jdbc mysql 自动重连_JDBC实现Mysql自动重连机制的方法详解

    JDBC是Java程序连接和访问各种数据库的API,它可以提供Java程序和各种数据库之间的连接服务,下面是爱站技术频道小编为大家带来的JDBC实现Mysql自动重连机制的方法详解. 日志:using ...

  8. mysql主从同步默认延迟_减少mysql主从数据同步延迟问题的详解

    基于局域网的master/slave机制在通常情况下已经可以满足'实时'备份的要求了.如果延迟比较大,就先确认以下几个因素: 1. 网络延迟 2. master负载 3. slave负载 一般的做法是 ...

  9. 怎么打开python shell_Python之使用adb shell命令启动应用的方法详解

    一直有一个心愿希望可以用Python做安卓自动化功能测试,在一步步摸索中,之前是用monkeyrunner,但是发现对于控件ID的使用非常具有局限性,尤其是ID的内容不便于区分 具有重复性时,后面又发 ...

最新文章

  1. [转贴]世上最强的中国式英文
  2. 油管网红AI老师人设崩了:搞培训货不对板,谈退钱一律拉黑
  3. linux keepalived 脚本,Linux下 keepalived 的安装和配置
  4. 嵌入式linux 定时 唤醒,Linux的cron定时任务使用说明
  5. asp.net缓存(二)
  6. java学习(101):arraylist的遍历和增加
  7. centos5 安装python 需要的rpm包
  8. 写python代码的心得体会_写python代码的一点感想
  9. python自学网-python自学网
  10. java过滤器Filter
  11. MySQL学习笔记10(流程控制、函数)
  12. 高等数学--集合概念
  13. html半圆形,【实例】CSS3画一个半圆的方法
  14. 51单片机游戏(俄罗斯方块)
  15. thx是什么意思_在高数中thx表示什么意思-thx-数学-别杂南同学
  16. 微信实现qq群的qq小冰功能
  17. expert个人版 sqlite_SQLite Expert Personal
  18. 【论文笔记】Program synthesis using natural language
  19. 大数据采集的几点问题的思考
  20. 铁路专业的未来发展趋势如何

热门文章

  1. sysadmin默认密码_Sysadmin指南,开源电子邮件客户端,macOS应用程序,SELinux,Firefox扩展等...
  2. java/01/java简介,java基本概念,java基本类型的划分
  3. HTML5 Canvas中绘制线段
  4. Bootstrap 列嵌套
  5. 视觉SLAM十四讲学习笔记-第六讲学习笔记总结(1)---非线性优化原理
  6. 树莓派4B Raspbian-buster 更换源
  7. 单载波DSP模块介绍
  8. 栈溢出脚本_漏洞练习之网络编程与堆栈溢出技术
  9. java long的包,long longValue()
  10. Linux 7.x 防火墙端口