剖析复制线程

2017-12-16  本文已影响0人  显卡hg

传统复制线程

复制线程图

GTID原理

gitd_mode 解释
OFF 不产生GTID,Slave只接收不带GTID的事务
OFF_PERMISSIVE 不产生GTID,Slave接收不带GTID的事务也接收带GTID的事务
ON_PERMISSIVE 产生GTID,Slave接收不带GTID的事务也接收带GTID的事务
ON 产生GTID,Slave只接收带GTID的事务
gitd_mode 执行对象
set global gtid_mode='OFF_PERMISSIVE'; 在Group中每个MySQL上执行
set global gtid_mode='ON_PERMISSIVE'; 在Group中每个MySQL上执行,为了安全尽量现在从库上执行
确认每个Group中binlog非GTID的执行完毕
set global gtid_mode='ON'; 在Group中每个MySQL上执行
CREATE TABLE `gtid_executed` (
  `source_uuid` char(36) NOT NULL COMMENT 'uuid of the source where the transaction was originally executed.',
  `interval_start` bigint(20) NOT NULL COMMENT 'First number of interval.',
  `interval_end` bigint(20) NOT NULL COMMENT 'Last number of interval.',
  PRIMARY KEY (`source_uuid`,`interval_start`)

半同步复制

MySQL5.7无数据丢失的半同步复制

半同步复制

增强半同步

半同步

更快的半同步复制

5.7半同步

mysql>set global rpl_semi_sync_master_wait_for_slave_count=2;

并行复制

并发复制

基于锁的并行复制

动作 事务 依赖关系
insert commit T1 (1,0)
update commit T2 (2,0)
delete commit T3 (3,1)

启用并行复制

mysql>stop slave sql_thread;
mysql>set global slave_parallel_workers=4|8|max_cpu_core/2;  #最多可以设成cpu核数,不过不建议,一般4个或8个就够了
mysql>set global slave_parallel_type='LOGICAL_CLOCK'; #OR DATABASE
mysql>start slave sql_thread;

延迟复制

mysql>stop slave sql_thread;
mysql>change master to master_delay=N;  #N单位秒
mysql>start slave sql_thread;

多源复制

group replication

group replication

5.7复制其他方面的增强

mysql>stop slave sql_thread;
mysql>CHANGE REPLICATION FILTER REPLICATE_DO_DB= (db1,db2);
mysql>start slave sql_thread;
mysql>stop slave io_thread;
mysql>change master to master_host='master-2',...;
mysql>start slave io_thread;
上一篇下一篇

猜你喜欢

热点阅读