mysql多线程复制没用_mysql多线程复制

mysql主从复制原理:

1. master节点上的binlogdump线程,在slave与其正常连接的情况下,将binlog发送到slave上。

2.slave节点上的I/O线程,通过读取master节点发送的内容,并将数据复制到本地的relaylog中。

3.slave节点上的SQL线程,读取relaylog中的日志,并将其事务在本地执行。

而master这边是通过并发线程提交,事物通过LSN写入binlog;但是Slave只有一个IO线程和Thread线程,是单线程,所以在业务大的情况下就很容易造成主从延时

mysql v5.6引入并发复制,基于数据库级别的,这意味着slave可以基于一个数据库处理连续事物;即一个数据库一个线程;当然如果只有一个数据库或者说所有的高负载都在单个库上,这样作用就不是很大;

mysql v5.7.2进行了优化,增加了参数slave_parallel_type,参数有两个选项:

LOGICAL_CLOCK:基于逻辑时钟 ,可以在一个DATABASE中并发执行relay log事物

DATABASE: 基于数据库,v5.6默认是这个参数,改参数每个库只能一个线程;

V5.6设置步骤:

操作之前查看,发现主从一共2个线程,一个IO_thread,一个SQL_thread:

mysql> show processlist;

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

| Id | User | Host | db | Command | Time | State | Info |

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

| 6 | root | localhost | NULL | Query | 0 | init | show processlist |

| 14 | system user | | NULL | Connect | 6 | Waiting for master to send event | NULL |

| 15 | system user | | NULL | Connect | 6 | Slave has read all relay log; waiting for the slave I/O thread to update it | NULL |

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

先停止主从复制stop slave;

而后设置主从复制线程数, 我这里设置5

开启主从复制 start salve;

再show下,发现多了5个

mysql> stop slave;

Query OK, 0 rows affected (0.01 sec)

mysql> set global slave_parallel_workers=5;

Query OK, 0 rows affected (0.03 sec)

mysql> start slave;

Query OK, 0 rows affected, 1 warning (0.04 sec)

mysql> show processlist;

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

| Id | User | Host | db | Command | Time | State | Info |

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

| 6 | root | localhost | NULL | Query | 0 | init | show processlist |

| 16 | system user | | NULL | Connect | 5 | Waiting for master to send event | NULL |

| 17 | system user | | NULL | Connect | 5 | Slave has read all relay log; waiting for the slave I/O thread to update it | NULL |

| 18 | system user | | NULL | Connect | 5 | Waiting for an event from Coordinator | NULL |

| 19 | system user | | NULL | Connect | 5 | Waiting for an event from Coordinator | NULL |

| 20 | system user | | NULL | Connect | 5 | Waiting for an event from Coordinator | NULL |

| 21 | system user | | NULL | Connect | 5 | Waiting for an event from Coordinator | NULL |

| 22 | system user | | NULL | Connect | 5 | Waiting for an event from Coordinator | NULL |

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

8 rows in set (0.00 sec)

mysql> show slave status \G

*************************** 1. row ***************************

Slave_IO_State: Waiting for master to send event

Master_Host: 192.168.10.12

Master_User: repl

Master_Port: 3358

Connect_Retry: 60

Master_Log_File: mysql-bin.000004

Read_Master_Log_Pos: 34353123

Relay_Log_File: pid_mysql-relay-bin.000008

Relay_Log_Pos: 283

Relay_Master_Log_File: mysql-bin.000004

Slave_IO_Running: Yes

Slave_SQL_Running: Yes

V5.7设置步骤

--设置前查看原配置

mysql> show global variables like '%parallel%';

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

| Variable_name | Value |

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

| slave_parallel_type | DATABASE |

| slave_parallel_workers | 0 |

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

2 rows in set (0.05 sec)

--停止主从复制

mysql> stop slave;

Query OK, 0 rows affected, 1 warning (0.00 sec)

--开5个并发(并发个数自己定义0-1024)

mysql> set global slave_parallel_workers = 5;

Query OK, 0 rows affected (0.04 sec)

--设置并发类型为逻辑时钟

mysql> set global slave_parallel_type = 'LOGICAL_CLOCK';

Query OK, 0 rows affected (0.04 sec)

--查看设置后的值

mysql> show global variables like '%parallel%';

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

| Variable_name | Value |

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

| slave_parallel_type | LOGICAL_CLOCK |

| slave_parallel_workers | 5 |

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

2 rows in set (0.05 sec)

mysql> start slave;

Query OK, 0 rows affected (0.03 sec)

--查看线程状态,多了5个线程

mysql> show processlist;

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

| Id | User | Host | db | Command | Time | State | Info |

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

| 6 | root | localhost | NULL | Query | 0 | starting | show processlist |

| 14 | system user | | NULL | Connect | 6 | Waiting for master to send event | NULL |

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

| 16 | system user | | NULL | Connect | 6 | Waiting for an event from Coordinator | NULL |

| 17 | system user | | NULL | Connect | 6 | Waiting for an event from Coordinator | NULL |

| 18 | system user | | NULL | Connect | 6 | Waiting for an event from Coordinator | NULL |

| 19 | system user | | NULL | Connect | 6 | Waiting for an event from Coordinator | NULL |

| 20 | system user | | NULL | Connect | 6 | Waiting for an event from Coordinator | NULL |

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

8 rows in set (0.00 sec)

mysql> show slave status \G

*************************** 1. row ***************************

Slave_IO_State: Waiting for master to send event

Master_Host: 192.168.10.12

Master_User: repl

Master_Port: 3358

Connect_Retry: 60

Master_Log_File: mysql-bin.000002

Read_Master_Log_Pos: 3923

Relay_Log_File: localhost-relay-bin.000006

Relay_Log_Pos: 320

Relay_Master_Log_File: mysql-bin.000002

Slave_IO_Running: Yes

Slave_SQL_Running: Yes

---------------------

作者:老王笔记

来源:CSDN

原文:https://blog.csdn.net/jswangchang/article/details/83070184

版权声明:本文为博主原创文章,转载请附上博文链接!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值