前期回顾

这期的专题我们来介绍MySQL组复制相关的内容

主机名 业务IP 私有IP 复制用户 角色
rac1 11.12.14.29 10.10.10.11 rpl
rac2 11.12.14.30 10.10.10.12 rpl
rac3 11.12.14.39 10.10.10.13 rpl

前面我们说了如何部署MGR的单主和多主模式

这节总体来说下部署MGR有哪些要求和限制

1. 部署MGR的需求

1. 基础架构

innodb存储引擎

数据必须存储在innodb存储引擎内

我们通过设置如下参数来禁用其他存储引擎

disabled_storage_engines="MyISAM,BLACKHOLE,FEDERATED,ARCHIVE,MEMORY"

主键

每张表都必须定义一个主键或者等价的非空的唯一键

IPv4网络

服务器必须支持IPv4网络

网络性能

MGR组中的各个服务器必须相互联通且网络性能要求较高

1.2 数据库配置要求

binlog日志

必须开启二进制日志文件功能

--log-bin[=log_file_name]

Slave Updates Logged

组内中的服务器必须可以记录所有事务的日志

--log-slave-updates

二进制日志格式

必须设定二进制日志格式为row

--binlog-format=row.

Binary Log Checksums Off

设定 --binlog-checksum=NONE.

开启GTID

必须开启GTID功能,用来检测MGR中事务的执行情况

Replication Information Repositories

必须设定如下参数记录主从库的元数据信息

--master-info-repository=TABLE

--relay-log-info-repository=TABLE

Transaction Write Set Extraction

设置如下参数使在记录日志的时候同时记录写集,用来检测冲突

 --transaction-write-set-extraction=XXHASH64

Lower Case Table Names

设置--lower-case-table-names 参数为同一个值

innodb中设置为1 注意不同平台的该值可能不一致

Multithreaded Appliers

我们可以设定一些参数使同步进程并行起来

 --slave-parallel-workers=N
 --slave-preserve-commit-order=1
 --slave-parallel-type=LOGICAL_CLOCK

2. MGR的一些限制

GTID的一些限制

由于MGR依赖于GTID,所以首先有GTID的一些现在

http://www.zhaibibei.cn/mysql/replication/tutorial10/

Gap Locks

MGR推荐使用 READ COMMITTED 隔离级别来避免使用Gap Locks

Table Locks and Named Locks

MGR的验证过程不考虑table locks 和named locks Replication Event Checksums

MGR无法使用复制事件检测

SERIALIZABLE隔离级别

MGR不支持串行化隔离级别

DDL和DML

多主模式下,MGR不支持同时不同服务器上的同一个对象的的DDL和DML

级联约束的外键索引

多主模式下,MGR不支持级联约束的外键索引

MySQL Enterprise Audit and MySQL Enterprise Firewall

MySQL 5.7.21以前,MySQL Enterprise Audit and MySQL Enterprise Firewall使用的是MyISAM表,所以不支持

多主模式下死锁

多主模式下,SELECT .. FOR UPDATE语句会引发死锁

Replication Filters

MGR不支持复制过滤

组大小

MGR最多可以有9个成员

事务大小的限制

一个成员的独立事务如果过大可能会导致无法在5s内传输到各个节点,这时可能会提出该成员

如果我们不设置单独参数限定大小的话,默认为slave_max_allowed_packet参数的大小,默认是1G

我们可以使用如下方法限定MGR中事务的大小

  • 如果可以减少你事务的大小
  • 设定group_replication_transaction_size_limit参数,5.7中该参数为0,8.0为143M
  • group_replication_compression_threshold 设定消息大小进行压缩的大小,默认为1M

3. 参考资料

https://dev.mysql.com/doc/refman/5.7/en/group-replication-requirements-and-limitations.html