视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
Mysql5.7从节点配置多线程主从复制的方法详解
2020-11-09 20:37:03 责编:小采
文档


前言

Mysql 采用多线程进行复制是从 Mysql 5.6 开始支持的内容,但是 5.6 版本下有缺陷,虽然支持多线程,但是每个数据库只能一个线程,也就是说如果我们只有一个数据库,则主从复制时也只有一个线程在工作。相当于还是以前的单线程。 从 Mysql 5.7 开始支持同一数据库下并行主从复制。不过默认情况下,还是单数据库单个线程,如果需要使用多线程,需要在从节点进行配置。

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

  • DATABASE 基于库的并行复制 , 每个数据库对应一个复制线程
  • LOGICAL_CLOCK 基于组提交的并行复制方式,同一个数据库下可以有多个线程
  • 下面的步骤,在从节点上进行配置。

    查看当前配置

    在开始配置之前,我们先看一下当前配置下的主从复制的进程数。

    mysql> show processlist;
    +----+-------------+-----------+------+---------+-------+--------------------------------------------------------+------------------+
    | Id | User | Host | db | Command | Time | State | Info |
    +----+-------------+-----------+------+---------+-------+--------------------------------------------------------+------------------+
    | 1 | system user | | NULL | Connect | 91749 | Waiting for master to send event | NULL |
    | 2 | system user | | NULL | Connect | 208 | Slave has read all relay log; waiting for more updates | NULL |
    | 37 | root | localhost | NULL | Query | 0 | starting | show processlist |
    +----+-------------+-----------+------+---------+-------+--------------------------------------------------------+------------------+
    3 rows in set (0.00 sec)

    从上面看出只有一个主进程在等待同步。

    下面查看复制类型和并行数量配置

    mysql> show variables like 'slave_parallel_type';
    +---------------------+----------+
    | Variable_name | Value |
    +---------------------+----------+
    | slave_parallel_type | DATABASE |
    +---------------------+----------+
    1 row in set (0.00 sec)

    当前的复制类型是 DATABASE,也就是统一数据库下只有一个线程进行复制,不能并行复制。

    mysql> show variables like 'slave_parallel_workers';
    +------------------------+-------+
    | Variable_name | Value |
    +------------------------+-------+
    | slave_parallel_workers | 0 |
    +------------------------+-------+
    1 row in set (0.01 sec)

    当前并行工作的进程数是 0

    配置多线程

    1、停止从节点复制

    mysql> stop slave;
    Query OK, 0 rows affected (0.01 sec)

    2、设置复制类型为 LOGICAL_CLOCK

    mysql> set global slave_parallel_type='logical_clock';
    Query OK, 0 rows affected (0.00 sec)
    mysql> show variables like 'slave_parallel_type';
    +---------------------+---------------+
    | Variable_name | Value |
    +---------------------+---------------+
    | slave_parallel_type | LOGICAL_CLOCK |
    +---------------------+---------------+
    1 row in set (0.01 sec)

    3、设置并行数量为 4

    mysql> set global slave_parallel_workers=4;
    Query OK, 0 rows affected (0.00 sec)
    mysql> show variables like 'slave_parallel_workers';
    +------------------------+-------+
    | Variable_name | Value |
    +------------------------+-------+
    | slave_parallel_workers | 4 |
    +------------------------+-------+
    1 row in set (0.00 sec)

    4、启动从节点复制

    mysql> start slave;
    Query OK, 0 rows affected (0.02 sec)

    5、查看一下当前工作的线程数

    mysql> show processlist;
    +----+-------------+-----------+------+---------+------+--------------------------------------------------------+------------------+
    | Id | User | Host | db | Command | Time | State | Info |
    +----+-------------+-----------+------+---------+------+--------------------------------------------------------+------------------+
    | 37 | root | localhost | NULL | Query | 0 | starting | show processlist |
    | 38 | system user | | NULL | Connect | 8 | Waiting for master to send event | NULL |
    | 39 | system user | | NULL | Connect | 7 | Slave has read all relay log; waiting for more updates | NULL |
    | 40 | system user | | NULL | Connect | 8 | Waiting for an event from Coordinator | NULL |
    | 41 | system user | | NULL | Connect | 8 | Waiting for an event from Coordinator | NULL |
    | 42 | system user | | NULL | Connect | 8 | Waiting for an event from Coordinator | NULL |
    | 43 | system user | | NULL | Connect | 8 | Waiting for an event from Coordinator | NULL |
    +----+-------------+-----------+------+---------+------+--------------------------------------------------------+------------------+
    7 rows in set (0.00 sec)

    最后说一下为什么需要多线程复制?因为主从之间的同步会有延时,多线程的目的是为了尽量减少这个延时时间。虽然如何优化主从是一个系统的功能,不同的场景需要不同的解决方案,但是多线程至少从基础上能减少延迟时间。另外根据数据库的实际情况,能否真正减少延时,以及配置多少线程,则需要反复的测试得出适合自己的数据。

    总结

    下载本文
    显示全文
    专题