MySQL家族”新”成员——MySQL Shell[通俗易懂]

MySQL家族”新”成员——MySQL Shell[通俗易懂]本文转载自“MySQL解决方案工程师”公众号,由徐轶韬翻译 标题虽然叫做MySQL家族新成员,但如果从发布时间上来看,MySQL Shell已经不能算做新成员了,它的正式版与MySQL8.0同一天诞…

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

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

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

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

MySQL家族"新"成员——MySQL Shell[通俗易懂]

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

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

MySQL家族"新"成员——MySQL Shell[通俗易懂]

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将会简化很多工作。让我们通过一个例子来感受一下。

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

MySQL家族"新"成员——MySQL Shell[通俗易懂]接下来连接到这台服务器,执行:

MySQL家族"新"成员——MySQL Shell[通俗易懂]

创建集群,执行:

MySQL家族"新"成员——MySQL Shell[通俗易懂]

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

MySQL家族"新"成员——MySQL Shell[通俗易懂]

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

MySQL家族"新"成员——MySQL Shell[通俗易懂]

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

MySQL家族"新"成员——MySQL Shell[通俗易懂]

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

MySQL家族"新"成员——MySQL Shell[通俗易懂]

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

MySQL家族"新"成员——MySQL Shell[通俗易懂]

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

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

•群组名称

•群组协议版本

•集群成员的 UUID

•集群成员的角色和状态

•Read-only的配置

MySQL家族"新"成员——MySQL Shell[通俗易懂]

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

•连接和回放处理的事务

MySQL家族"新"成员——MySQL Shell[通俗易懂]

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

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

MySQL家族"新"成员——MySQL Shell[通俗易懂]

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

MySQL家族"新"成员——MySQL Shell[通俗易懂]

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

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

•集群全局配置选项

•每个集群成员的设置

MySQL家族"新"成员——MySQL Shell[通俗易懂]

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

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

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

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

•autoRejoinTries 驱逐后尝试重新加入

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

例如:

MySQL家族"新"成员——MySQL Shell[通俗易懂]

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

如何保证集群范围内:

•永远读到最新数据?

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

•不会发生脏读?

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

MySQL家族"新"成员——MySQL Shell[通俗易懂]

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

实时更改主节点:

MySQL家族"新"成员——MySQL Shell[通俗易懂]

// 变成多主模式

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

MySQL家族"新"成员——MySQL Shell[通俗易懂]使用 $mysqlsh –-log-level=4

MySQL家族"新"成员——MySQL Shell[通俗易懂]

输出诊断信息。

使用

$ mysqlsh –-dba-log-sql=2

AdminAPI SQL日志:

•0: 无日志

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

•2: 记录全部查询

MySQL家族"新"成员——MySQL Shell[通俗易懂]

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

最后,总结一下:

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

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

•MySQLShell是开发人员和DBA的统一接口以及InnoDB Cluster的前端管理软件

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
转载请注明出处: https://daima100.com/10019.html

(0)
上一篇 2023-01-27
下一篇 2023-01-27

相关推荐

  • Python实现元组转列表操作

    Python实现元组转列表操作Python是一种高级编程语言,拥有简洁易懂的语法结构,但是在不同的数据结构之间的转换有时依然令初学者感到棘手。本文将阐述Python中如何将元组(tuple)转化为列表(list)。

    2024-04-22
    17
  • Python实现1+1运算

    Python实现1+1运算Python作为一种强大的编程语言,具有高效、易学、多样化等特点,其应用范围广泛。本文将从多个方面阐述Python实现1+1运算的方法,包括基本语法、数据类型、运算符、变量、函数和模块等方面。

    2023-12-27
    58
  • Python实现文件定位及查找指定字符的位置和读取内容的方法

    Python实现文件定位及查找指定字符的位置和读取内容的方法在Python中,我们可以使用内置函数open()来打开一个文件,打开文件后可以选择读取文件的方式,常用的方式有:读取整个文件、逐行读取文件和读取部分文件。

    2024-02-14
    50
  • 【数据库_06】Oracle[通俗易懂]

    【数据库_06】Oracle[通俗易懂]一、Oracle简介 1. 概述 * ORACLE数据库系统是美国ORACLE公司(甲骨文)提供的以分布式数据库为核心的一组软件产品, 是目前最流行的客户/服务器(CLIENT/SERVER)或B/…

    2023-01-28
    104
  • Mysql千万级别水平分表优化「终于解决」

    Mysql千万级别水平分表优化「终于解决」  需求:随着数据量的增加单表已经不能很好的支持业务,千万级别数据查询缓慢   Mysql数据优化方案:   方案一:使用myisam进行水平分表优化   方案二:使用mysql分区优化   一:M…

    2023-02-17
    95
  • 遇见SQL(3)

    遇见SQL(3)SQL自学笔记 事务 1.0事务的基本介绍 2.0 事务的自动提交&手动提交 3.0 事务的四大特征 4.0 事务的隔离级别 DCL

    2023-03-20
    113
  • 用Python编写CGI脚本,实现动态Web页面生成

    用Python编写CGI脚本,实现动态Web页面生成CGI(Common Gateway Interface)是一种通信协议,它定义了Web服务器如何与其他软件程序(称为CGI程序或脚本)交互,从而在Web页面上动态地生成内容。

    2024-01-21
    63
  • Python中if-else语句的用途以及如何在pandas中使用

    Python中if-else语句的用途以及如何在pandas中使用条件语句,即if-else语句,是编程语言中的常见语句之一,它的目的是根据某个条件执行代码块中的语句。在Python中,if-else语句同样被使用。

    2024-01-13
    60

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注