这期的专题我们来介绍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有哪些要求和限制
innodb存储引擎
数据必须存储在innodb存储引擎内
我们通过设置如下参数来禁用其他存储引擎
disabled_storage_engines="MyISAM,BLACKHOLE,FEDERATED,ARCHIVE,MEMORY"
主键
每张表都必须定义一个主键或者等价的非空的唯一键
IPv4网络
服务器必须支持IPv4网络
网络性能
MGR组中的各个服务器必须相互联通且网络性能要求较高
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
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中事务的大小
https://dev.mysql.com/doc/refman/5.7/en/group-replication-requirements-and-limitations.html