MySQL InnoDB ReplicaSet(副本集)简单介绍

01 InnoDB ReplicaSet(副本集)介绍

在MySQL8.0引入了InnoDB ReplicaSet,它提供了我们熟悉的复制特性,如果有mongodb副本集的概念,理解InnoDB ReplicaSet会比较容易。

InnoDB ReplicaSet使用了下面的技术:

1、MySQL Shell,一个功能更强大的客户端

2、MySQL Router,一个轻量级别的中间件,可以类比MongoDB中的mongos的角色;

3、MySQL Server,也就是MySQL服务

InnoDB ReplicaSet,下面简称 innodb副本集。它采用了MySQL的复制技术,副本集中拥有一个primary节点,一个或者多个secondary节点,它不像innodb cluster(innodb cluster是另外一种MySQL高可用方案)一样提供故障自愈和多主模式,但是提供手工的方法添加、移除和配置相关节点。

我们通常使用MySQL Shell中的AdminApi来管理innodb副本集,adminapi有js和python两种版本,我们可以很方便的去编写脚本来自动部署MySQL,AdminAPI为MySQL实例集提供了一个有效的现代接口,使您能够从一个中心工具提供、管理和监视部署。

innodb副本集支持MySQL Clone组件,我们可以利用克隆插件很方便的搭建起来一个副本集。

InnoDB ReplicaSet与MySQL Router紧密集成,可以使用AdminAPI与它们一起工作。MySQL Router可以基于InnoDB ReplicaSet自动配置自己,这个过程称为bootstrapping,这样就不需要手动配置路由。

02 InnoDB ReplicaSet的限制

上面介绍了innodb 副本集的一些基本知识和概念,这里我们有必要说一下它的局限性,innodb副本集的局限性,主要是对比innodb cluster来体现出来的,下面我们罗列一下:

1、没有故障自动切换功能。在主库不可用的情况下,需要使用AdminApi手动触发故障转移;

2、无法防止由于意外或者不可用而导致的数据丢失,发生故障时候没有应用的事务可能有丢失现象;

3、无法防止意外退出之后的数据不一致现象;在主节点因为网络问题而短暂失联时候,如果某个从节点提升为主节点,则可能发生脑裂现象;

4、innodb 副本集不支持多主模式,经典的多主写入复制方案无法保证数据一致性;

5、innodb副本集基于异步复制,不能像MGR那样进行流控,因此读的扩展性会一定程度上受限;

6、所有secondary都要从primary复制,因此可能会对源实例产生一定的影响

从上面的描述中不难看出,innodb副本集跟MongoDB的副本集还有很大的差距,但是我们依然有研究的必要,因为它是MySQL官方在高可用之路上迈出的重要一步,后续随着版本的迭代,我相信这些问题会得到关注和解决,有更好的方案进一步满足用户的要求。

03 部署前须知

innodb副本集的运行环境有一定的要求,如下:

1、仅支持MySQL8.0及以上版本;

2、仅支持GTID的复制方法

3、仅支持row格式的binlog,不支持statement格式的binlog

4、不支持复制过滤器

5、不允许建立额外的复制通道

6、副本集primary节点只有一个,secondary节点可以有多个,MySQL Router会对每个节点进行监控

7、副本集必须完全由MySQL Shell管理,不支持在MySQL Shell之外对实例进行配置和更改

下一篇文章我将会从最基本的安装过程说起,详细描述MySQL Shell、MySQL Router的安装以及innodb 副本集的搭建过程。

以上就是MySQL InnoDB ReplicaSet(副本集)简单介绍的详细内容,更多关于MySQL InnoDB ReplicaSet(副本集)的资料请关注我们其它相关文章!

(0)

相关推荐

  • MySQL Innodb关键特性之插入缓冲(insert buffer)

    什么是insert buffer? 插入缓冲,也称之为insert buffer,它是innodb存储引擎的关键特性之一,我们经常会理解插入缓冲时缓冲池的一个部分,这样的理解是片面的,insert buffer的信息一部分在内存中,另外一部分像数据页一样,存在于物理页中. 在innodb中,我们知道,如果一个表有自增主键,那么对于这个表的默认插入是非常快的,注意,这里的主键是自增的,如果不是自增的,那么这个插入将会变成随机的,就可能带来数据页分裂的开销,这样,插入就不是顺序的,就会变慢.还有一种

  • 如何区分MySQL的innodb_flush_log_at_trx_commit和sync_binlog

    innodb_flush_log_at_trx_commit和sync_binlog  两个参数是控制MySQL磁盘写入策略以及数据安全性的关键参数. show variables like "innodb_flush_log_at_trx_commit"; innodb_flush_log_at_trx_commit: 0: 由mysql的main_thread每秒将存储引擎log buffer中的redo日志写入到log file,并调用文件系统的sync操作,将日志刷新到磁盘.

  • MySQL InnoDB 锁的相关总结

    1.  Shared and Exclusive Locks shared lock (译:共享锁) exclusive lock (译:排它锁.独占锁) InnoDB实现了标准的行级锁,其中有两种类型的锁,共享锁(shared locks)和排他锁(exclusive locks). A shared (S) lock permits the transaction that holds the lock to read a row. An exclusive (X) lock permits

  • Mysql InnoDB的锁定机制实例详解

    1.InnoDB的锁定机制 InnoDB存储引擎支持行级锁,支持事务处理,事务是有一组SQL语句组成的逻辑处理单元,他的ACID特性如下: 原子性(Atomicity): 事务具有原子不可分割的特性,要么一起执行,要么都不执行. 一致性(Consistency): 在事务开始和事务结束时,数据都保持一致状态. 隔离性(Isolation): 在事务开始和结束过程中,事务保持着一定的隔离特性,保证事务不受外部并发数据操作的影响. 持久性(Durability): 在事务完成后,数据将会被持久化到数

  • Mysql技术内幕之InnoDB锁的深入讲解

    前言 自7月份换工作以来,期间一直在学习MySQL的相关知识,听了一些视频课,但是一直好奇那些讲师的知识是从哪里学习的.于是想着从书籍中找答案.毕竟一直 看视频也不是办法,不能形成自己的知识.于是想着看书汲取知识,看了几本MySQL的相关书籍,包括<深入浅出Mysql><高性能Mysql><Mysql技术内幕>,发现那些讲 师讲的内容确实都在书上有出现过,于是确信看书才是正确的汲取知识方式.本片主要记录了Mysql的锁机制的学习. 1.什么是锁 锁是计算机协调多个进程或

  • 详解MySQL InnoDB存储引擎的内存管理

    存储引擎之内存管理 在InnoDB存储引擎中,数据库中的缓冲池是通过LRU(Latest Recent Used,最近最少使用)算法来进行管理的,即最频繁使用的页在LRU列表的最前段,而最少使用的页在LRU列表的尾端,当缓冲池不能存放新读取到的页时,首先释放LRU列表尾端的页. 上面的图中,我使用8个数据页来表示队列,具体作用,先卖个关子.在InnoDB存储引擎中,缓冲池中页的默认大小是16KB,LRU列表中有一个midpoint的位置,新读取到的数据页并不是直接放入到LRU列表的首部,而是放入

  • mysql innodb的重要组件汇总

    innodb包涵如下几个组件 一.innodb_buffer_pool: 它主要用来缓存数据与索引(准确的讲由于innodb中的表是由聚集索引组织的,所以数据只不是过主键这个索引的叶子结点). 二.change buffer: 1 如果更新语句要更新二级索引的记录,但是记录所在的页面这个里面并没有在innodb_buffer_pool中,innodb会把这个对二级索引 面页的更新动作缓存到innodb_buffer_pool的一个特定区域(change buffer):等到之后如果有别的事务B要

  • 获取 MySQL innodb B+tree 的高度的方法

    前言 MySQL 的 innodb 引擎之所以使用 B+tree 来存储索引,就是想尽量减少数据查询时磁盘 IO 次数.树的高度直接影响了查询的性能.一般树的高度在 3~4 层较为适宜.数据库分表的目的也是为了控制树的高度.那么如何获取树的高度呢?下面使用一个示例来说明如何获取树的高度. 示例数据准备 建表语句如下: CREATE TABLE `user` (   `id` int(11) NOT NULL AUTO_INCREMENT,   `name` varchar(100) CHARAC

  • Mysql InnoDB和MyISAM区别原理解析

    mysql支持很多表类型的表(即存储引擎),如myisam.innodb.memory.archive.example等.每种存储引擎都有自己的优点和缺点,充分的理解每种存储引擎,有助于合理的使用它们.有人认为在同一个数据库中使用多种存储引擎很影响性能,其实这是一种十分错误的想法.实际上,除非是非常简单的数据库,否则的话,只使用一种存储引擎,对应用程序的性能来说是一个十分糟糕的行为.对数据库了解的人会根据每张表的作用不同来选择适当的存储引擎,这才是正确的做法. 前面说过mysql的存储引擎很多,

  • 修改MySQL数据库引擎为InnoDB的操作

    PS:我这里用的PHPStudy2016 1.修改时停止MySQL 2.修改my.ini default-storage-engine=INNODB 3.修改后删除D:\phpStudy\MySQL\data下ib开头的日志文件 4.启动MySQL 设置好后,通过navicat创建与目标数据库一致编码的新数据库,然后复制过来即可.复制过来的数据表数据引擎与源数据表数据引擎一致. 注:修改数据表引擎 alter table tableName type=InnoDB 补充:InnoDB和MyISA

随机推荐