mysql 多线程6_【Mysql高可用架构(6)】多线程复制

[toc]

## 概述

mysql从5.7开始支持多线程复制(最好是5.7.19以后的版本,前面版本都有各种问题),**很大程度上解决了主从延迟的问题**。不过默认情况下,还是单数据库单个线程,如果需要使用多线程,需要在从节点进行配置。

Mysql 5.7 对主从复制增加了一种类型,共有两种类型,如下:

* `DATABASE` 基于库的并行复制 , 每个数据库对应一个复制线程

* `LOGICAL_CLOCK` 基于组提交的并行复制方式,同一个数据库下可以有多个线程

## 配置

>[info] 以下配置基于前文的《基于GTID主从复制》

### 查看当前的主从状态

~~~

# 要有双yes: Slave_IO_Running: Yes Slave_SQL_Running: Yes

mysql@slave>show slave status;

# 观察当前线程,发现只有一组线程(IO线程与SQL线程)在处理

mysql@slave>show processlist;

+----+-------------+------+---------+--------------------------------------------------------+

| Id | User | db | Command | State |

+----+-------------+------+---------+--------------------------------------------------------+

| 4 | system user | NULL | Connect | Waiting for master to send event |

| 5 | system user | NULL | Connect | Slave has read all relay log; waiting for more updates |

+----+-------------+------+---------+--------------------------------------------------------+

# 查看复制类型,发现为DATABASE,也就是同一数据库下只有一个线程进行复制,不能并行复制。

mysql@slave>show variables like 'slave_parallel_type';

+---------------------+----------+

| Variable_name | Value |

+---------------------+----------+

| slave_parallel_type | DATABASE |

+---------------------+----------+

# 查看当前并行数量,发现并行工作的进程数是 0

mysql@slave>show variables like 'slave_parallel_workers';

+------------------------+-------+

| Variable_name | Value |

+------------------------+-------+

| slave_parallel_workers | 0 |

+------------------------+-------+

~~~

### 配置多线程

~~~

# 停止从节点复制

mysql@slave>stop slave;

# 设置复制类型为 LOGICAL_CLOCK,基于组提交的并行复制方式

mysql@slave>set global slave_parallel_type='logical_clock';

# 设置并行数量为 4(CPU核心数)

mysql@slave>set global slave_parallel_workers=4;

# 启动主从

mysql@slave>start slave;

~~~

然后再查看当前的主从状态

~~~

mysql@slave> show processlist;

+----+-------------+---------+------+--------------------------------------------------------+

| Id | User | Command | Time | State |

+----+-------------+---------+------+--------------------------------------------------------+

| 10 | system user | Connect | 77 | Waiting for master to send event |

| 11 | system user | Connect | 77 | Slave has read all relay log; waiting for more updates |

| 12 | system user | Connect | 77 | Waiting for an event from Coordinator |

| 13 | system user | Connect | 77 | Waiting for an event from Coordinator |

| 14 | system user | Connect | 77 | Waiting for an event from Coordinator |

| 15 | system user | Connect | 77 | Waiting for an event from Coordinator |

+----+-------------+---------+------+--------------------------------------------------------+

~~~

### 固化配置

以上配置方法重启一下就失效了,可以在slave的**mysql.cnf**增加以下配置

~~~

slave_parallel-type=LOGICAL_CLOCK

#DATABASE 默认值,基于库的并行复制方式

#LOGICAL_CLOCK:基于组提交的并行复制方式

slave_parallel_workers=4

master_info_repository=TABLE

relay_log_info_repository=TABLE

#这两个参数会将master.info和relay.info保存在表中,默认是Myisam引擎,官方建议改为Innodb引擎,防止表损坏后自行修复。

#alter table slave_master_info engine=innodb;

#alter table slave_relay_log_info engine=innodb;

#alter table slave_worker_info engine=innodb;

relay_log_recovery=ON

#当slave从库宕机后,假如relay-log损坏了,导致一部分中继日志没有处理,则自动放弃所有未执行的relay-log,并且重新从master上获取日志,

#这样就保证了relay-log的完整性。默认情况下该功能是关闭的,将relay_log_recovery的值设置为 1时,可在slave从库上开启该功能,建议开启。

~~~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值