>  기사  >  데이터 베이스  >  Mysql5.7 슬레이브 노드에서 다중 스레드 마스터-슬레이브 복제를 구성하는 방법에 대한 자세한 소개

Mysql5.7 슬레이브 노드에서 다중 스레드 마스터-슬레이브 복제를 구성하는 방법에 대한 자세한 소개

黄舟
黄舟원래의
2017-03-16 13:49:081032검색

이 글은 Mysql 5.7 슬레이브 노드 구성 멀티스레드 마스터-슬레이브 복제 관련 정보를 주로 소개합니다. 와서 우리와 함께 볼 수 있습니다.

머리말

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)

마지막으로 멀티 스레드 복제가 필요한 이유는 무엇인가요? 마스터와 슬레이브 사이의 동기화에는 지연이 있기 때문에 멀티스레딩의 목적은 이 지연 시간을 최소화하는 것입니다. 마스터-슬레이브를 최적화하는 방법은 시스템 기능이고 다양한 시나리오에는 다양한 솔루션이 필요하지만 멀티스레딩은 최소한 기본적으로 대기 시간을 줄일 수 있습니다. 또한, 데이터베이스의 실제 상황에 따라 실제로 지연을 줄일 수 있는지, 구성할 스레드 수는 몇 개인지, 자신에게 맞는 데이터를 얻기 위해 반복적으로 테스트해야 합니다.

요약

위 내용은 Mysql5.7 슬레이브 노드에서 다중 스레드 마스터-슬레이브 복제를 구성하는 방법에 대한 자세한 소개의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.