跳转到主要内容

MySQL 8.0.2复制新特性 MYSQL8

MySQL 8.0.2 对MySQL 组复制进行了加强,主要有以下几个方面:
  1. 不允许对离开组的成员进行更改:每当组成员离开群组,离开的成员将会自动设置super_read_only,这可以防止DBA,用户或路由器/代理/负载平衡等带来的的意外更改。除了默认离开组复制的成员不能够进行修改以外,也可以从刚加入开始就开始禁止写入,我们也可以在服务器启动时设置super_read_only参数并启动组复制插件。一旦组复制动成功,他会自动调整super_read_only的值。在多主模式下,所有的节点都将不会设置super_read_only参数 ;在单主的模式下,除了主节点以外,其他的节点都会设置super_read_only为ON 。如果很不幸,你的组复制启动失败了的话,super_read_only参数将不会被设置,将不能进行任何写入操作。这些最新的变化同样适用于MySQL 5.7.19和MySQL 8.0.2。
  2. 可以在Performance Schema 中查看更多信息:在Performance Schema现存的表中,对相关的统计信息的可读性进行了加强。“replication_group_members” 和 “replication_group_member_stats” 表也做了相关拓展,现在可以清楚的看到组成员的角色信息,组成员版本和事物计数器(本地/远程)
  3. 通过分配权重来指定主库的选举:用户可以通过指定组成员的权重来控制主库的选举,当现有的主节点退出组复制,权重最高的节点就会被提升为主节点。
  4. 流量控制机制加了一些微调项:用户现在可以更精细的调节流量控制组件。可以定义每个成员的最小配额,整个组的最小提交配额,流程控制窗口等等。

 

MySQL 8.0.1 已经在MySQL复制核心框架添加了很多引人注目的功能。而MySQL 8.0.2在此基础上又有很大的提升,主要如下:
  1. 增强对接收器(IO)线程的管理,即使磁盘已满:此功能提高了接收器和其他线程之间的内部协调效率,减少彼此的争用。对于终端用户来说,这意味着在磁盘变满并且接收器线程阻塞的情况下,它不再阻塞监视操作,例如SHOW SLAVE STATUS。它还引入了一个新的线程状态(接收器线程正在等待磁盘空间资源),此外,当磁盘已满的时候,而且你并不能通过释放磁盘空间使接收器线程继续没有完成的工作,这个时候你可以手动停掉它,一般情况下不会有什么问题。但是如果当时有一个写入的事物被清除掉了,而且relay log 也不是在一致的状态下,当接收器线程轮询relay log并且在等待磁盘空间可用时,你就要特别的留心。
  2. binary log中记录更多的元数据信息:将事物长度添加到全局事务日志事件。这可以对我们未来的优化工作有很大的帮助,而且也提高了binary log的可读性。

 

如果你在研究MySQL复制的内部机制与原理,基础组件添加了一个有趣的服务:
  1. 组成员事件可以传播到内部其他组件。通过利用新的基础服务架构,组复制插件现在可以通知服务器中的其他组件关于成员关联的事件。例如,通知组成员的角色改变仲裁丢失等。其他的组件可以对这个信息作出反馈,并且用户也可以自己开发组件用来记录和检测这些事件。
  2. 从XCom(标准的Paxos实现,能严格保证正确性)的内部结构中删除节点上的冗余信息:我们在XCom的结构中删除了一些冗余信息,这使它变得更加简单,更少的出现错误,更容易监控那些节点加入或者离开集群,同时它会在系统中保留以前的信息。
  3. 对XCom核心和新编码风格进行了几项改进:我们已经修复了XCom的几个BUG,重新格式化了代码,使它符合Google的编码准则,如果你恰巧是一个开发人员,并且再看Paxos实现的源代码,你会发现改版后的代码将会更加容易阅读和理解。
  4. 移除了一些老旧版本binary log转换的源代码:这个清理工作我们清除了一些老版本My数据库产的的binary logs转化为新版本能够识别的一些代码(现在仅支持MySQL5.0以及以上版本)。

 

还有一件有意思的事情,MySQL 8.0.2中更改了以下复制默认值:
  1. 复制的元数据信息默认以INNODB系统表来存储:这将使MySQL复制功能变得更加强大,在复制崩溃并且自动恢复时候能够使用INNODB事物的特性来保证恢复到指定位置的正确性。此外,新功能还要求将元数据以表的形式存储(比如组复制和多源复制),它与MySQL 8的新的数据字典保持一致。
  2. 基于行数据的哈希扫描被默认开启:这也许并不是一个被广泛认同的做法,但是当从库有一些没有主键约束的表的时候性能会有提高。在这种情况下,使用基于行的复制时,此更改会最大程度降低性能损失,因为它会减少更新所有行所需的表扫描数(slave_rows_search_algorithms参数默认TABLE_SCAN,INDEX_SCAN,HASH_SCAN)。
  3. transaction-write-set-extraction参数会默认开启:使用写集提取,为用户启动组复制或在主服务器上使用基于WRITESET的依赖关系对master进行跟踪。
  4. 默认开启Binary log 过期时间:expire-logs-days默认设置为30(30天)