## 前期回顾 这期的专题我们来介绍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/](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](https://dev.mysql.com/doc/refman/5.7/en/group-replication-requirements-and-limitations.html)