23

MySQL家族"新"成员——MySQL Shell

 4 years ago
source link: http://mp.weixin.qq.com/s?__biz=MjM5NzAzMTY4NQ%3D%3D&%3Bmid=2653933256&%3Bidx=1&%3Bsn=ec901f01592193a2f8d55b00b26e791e
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

本文转载自“MySQL解决方案工程师”公众号,由 徐轶韬翻译

标题虽然叫做MySQL家族新成员,但如果从发布时间上来看,MySQL Shell已经不能算做新成员了,它的正式版与MySQL8.0同一天诞生,2018年4月19日,但还有很多人对它比较陌生,所以称之为“新”。在这篇文章里,我将会介绍一下它的部分功能和使用方法。

首选概括一下它的功能,MySQL Shell是一个统一的命令行客户端,使用它可以对MySQL进行管理和操作。它支持多种语言,包括JavaScript,Python和SQL,并且支持编写脚本。此外,它同时支持文档型和关系型数据库模式,并且具有完整的开发和管理API。

看到这里,您可能会发现MySQL Shell与传统的MySQL数据库的客户端mysql的区别了,旧的mysql客户端缺失了脚本功能(可能有人会说可以通过编写SQL命令进行批处理),但是想要通过脚本语言对数据库进行管理的用户会发现,并没有专门适用于合并脚本语言的工具,MySQL Shell的出现弥补了这一点。

Jbq2Un6.jpg!web

使用MySQL Shell除了可以对数据库里的数据进行操作,还可以对数据库进行管理,特别是对Innodb Cluster的支持,使用它可以十分方便的对Innodb Cluster进行管理,配置。您可以理解为MySQL Shell就是为Innodb Cluster 而生的。这篇文章将主要介绍通过MySQL Shell对I nnodb Cluster进行管 理,配置

既然提到了Innodb Cluster,在这里简单的介绍一下它。Innodb Cluster是由多个组件构成的高可用框架。

Ujiu2yn.jpg!web

MySQL Group Replication:提供DB的扩展、自动故障转移

MySQL Router:轻量级中间件,提供应用程序连接目标的故障转移

MySQL Shell:新的MySQL客户端,多种接口模式。可以设置群组复制及MySQL Router

X DevAPI:通过X Protocol与服务器进行通信的API

Admin API:通过MySQL Shell使用的API,可以用于对Innodb Cluster进行配置管理

相信使用过MGR的人知道,手动配置MGR步骤很多,稍微有些麻烦,如果使用MySQL Shell将会简化很多工作。让我们通过一个例子来感受一下。

我们创建一个集群,首先要配置一台服务器用于在集群中使用。执行:

nyYJ73A.jpg!web接下来连接到这台服务器,执行:

aY73myi.jpg!web

创建集群,执行:

FVVjQfz.jpg!web

向集群内追加节点,执行:

e26jY3Z.jpg!web

当新节点加入集群时,如果有缺失的事务,需要经过一段时间的数据恢复后才会变成在线状态,这个恢复过程可能会持续很长。MGR会根据新加入节点的状态选择增量恢复(增量恢复只提取基于GTID的丢失数据),或者是使用克隆恢复(执行物理快照,替换新服务器的全部数据)。管理员也可以主动选择哪种方式进行恢复。

IJziayI.jpg!web

克隆插件Clone Plugin 是MySQL8.0.17推出的新功能,使用它可以快速创建新节点,恢复数据并加入集群。当进行恢复时,MySQL Shell的提示如下:

aey2U3r.jpg!web

同时,可以监控基于克隆恢复的实时进度信息,主要分为三个步骤,可以通过下图很容易看出每个步骤的状态:

VRniuya.jpg!web

使用 mysqlsh-js>cluster.status() 可以确认集群和节点成员的状态信息:

MFNRb2A.jpg!web

此外,还支持查看扩展状态。使用

mysqlsh-js>cluster.status({extended:1})可以查看:

•群组名称

•群组协议版本

•集群成员的 UUID

•集群成员的角色和状态

•Read-only的配置

AFzIbqM.jpg!web

mysqlsh-js>cluster.status({extended:2})可以查看:

•连接和回放处理的事务

J7jA7nb.jpg!web

mysqlsh-js>cluster.status({extended:3 })可以查看:

•有关每个集群成员的复制机制的详细统计信息

FvEzmie.jpg!web

另外,MySQL Shell还具有报表框架。可以使用系统自带的报表或者用户自定义报表进行输出。

VV7rUvU.jpg!web

使用MySQL Shell还可以对集群进行监控和维护。

执行  mysqlsh-js>cluster.options() 可以查看

•集群全局配置选项

•每个集群成员的设置

MrARren.jpg!web

关于集群,需要注意下面4个选项:

•expelTimeout 避免由于网络故障而频繁驱逐成员

•memberWeight 发生故障转移时的下一个主要成员

•exitStateAction 从群集中驱逐服务器时的操作:中止,只读,脱机模式

•autoRejoinTries 驱逐后尝试重新加入

可以通过MySQL Shell快速改变选项的值

EJva2mF.jpg!web

此外,使用集群时需要考虑集群级别的一致性。Innodb Cluster默认以单主模式运行,应用程序和用户将数据写入到主节点。

如何保证集群范围内:

•永远读到最新数据

不读取被驱逐服务器的过时数据吗?

•不会发生脏读?

通过MySQL Shell可以配置一致性级别的选项来实现:

aqqINje.jpg!web

Innodb Cluster的拓扑模式也可以通过MySQL Shell进行实时更改:

实时更改主节点:

emMR7nA.jpg!web

// 变成多主模式

mysqlsh-js> cluster.switchToMultiPrimaryMode()

//变成单主模式 

mysqlsh-js> cluster.switchToSinglePrimaryMode()

关于日志:默认情况下,MySQL Shell提供了足够的信息,但是某些特殊的情况下,用户会需要更多的信息来排除故障。

MySQL Shell的日志级别包括如下:

•1:none

•2:internal

•3:error

•4:warning

•5:info

6,7, 8: debug

使用 

$mysqlsh –-log-level=8

A7riu2B.jpg!web 使用 $ mysqlsh –-log-level=4

6Vfyqua.jpg!web

输出诊断信息。

使用

$ mysqlsh –-dba-log-sql=2

AdminAPI SQL日志:

•0: 无日志

•1: 记录除SELECT和SHOW以外的查询

•2: 记录全部查询

UvUjUj2.jpg!web

以上是关于使用MySQL Shell对Innodb Cluster进行配置管理的一个简单介绍,更为详细的内容请访问官网手册。

最后,总结一下:

•InnoDB Cluster 是MySQL内置的高可用解决方案

•MySQL Clone插件将InnoDB C luster 的可用性提升到了一个全新的高度! InnoDB Cluster 功能内置了对完整实例配置的支持

MySQL Shell 是开发人员和 DBA 的统一接口 以及 InnoDB  C luster 的前端管理软件

感谢您关注MySQL!

叶老师新课程《 MySQL性能优化 》已经在腾讯课堂发布,本课程讲解读几个MySQL性能优化的核心要素: 合理利用索引,降低锁影响,提高事务并发度 。下面是报名小程序码,厚着脸皮请求大家推荐给需要的小伙伴们。

FNBnMbq.jpg!web

下面是本课程内容目录

vyaEfu7.jpg!web

扫码加入MySQL技术Q群

(群号: 650149401)

ba2EF3u.jpg!web

点“在看”给我一朵小黄花

r2yqyiV.png!web


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK