>  기사  >  데이터 베이스  >  MySQL5.7 그룹 제출 및 병렬 복제 예제 튜토리얼

MySQL5.7 그룹 제출 및 병렬 복제 예제 튜토리얼

PHP中文网
PHP中文网원래의
2017-06-20 15:13:181319검색
MySQL 버전 5.5부터 MySQL의 매우 중요한 기능인 병렬 복제 메커니즘이 도입되었습니다.
MySQL5.6에서는 스키마를 차원으로 하여 병렬 복제를 지원하기 시작합니다. 즉, binlog 행 이벤트가 다른 스키마의 객체에 대해 작동하는 경우 DDL 및 외래 키 종속성이 없다고 판단되면 병렬 복제가 가능합니다.
커뮤니티에서는 테이블을 차원으로 사용하거나 레코드를 차원으로 사용하는 병렬 복제 버전도 도입했습니다. 스키마, 테이블, 레코드 등 행 형식의 대기 데이터베이스 슬레이브 구문 분석 이벤트를 기반으로 실시간으로 판단합니다. 충돌이 없는지 확인하고 병렬성을 달성하기 위해 배포하십시오.
MySQL5.7, 멀티 스레드 슬레이브, 즉 MTS의 병렬 복제는 메인 데이터베이스의 병렬성을 극대화할 것으로 예상되며 구현 방법은 슬레이브 노드가 병렬을 구현할 수 있도록 binlog 이벤트에 필요한 정보를 추가하는 것입니다. 이 정보를 기반으로 복제합니다.
MySQL 5.7의 병렬 복제는 그룹 커밋을 기반으로 합니다. 기본 데이터베이스에서 완료할 수 있는 모든 준비된 명령문은 데이터 충돌이 없음을 나타내며 슬레이브 노드에서 병렬로 복제될 수 있습니다.
MySQL 5.7의 그룹 제출과 관련하여 다음 매개변수를 살펴봐야 합니다.
mysql> show global variables like '%group_commit%';+-----------------------------------------+-------+| Variable_name | Value |+-----------------------------------------+-------+| binlog_group_commit_sync_delay | 0 || binlog_group_commit_sync_no_delay_count | 0 |+-----------------------------------------+-------+2 rows in set (0.00 sec)

binlog_group_commit_sync_delay 이 매개변수는 디스크를 플러시하기 전에 로그 제출을 기다리는 시간을 제어합니다. 기본값은 0입니다. 즉, 제출 후 즉시 디스크를 플러시합니다. 0보다 높게 설정하면 여러 로그 동료가 동시에 디스크 플러시를 제출할 수 있습니다. 이를 그룹 제출이라고 합니다. 그룹 제출은 병렬 복제의 기본입니다. 이 값을 0보다 크게 설정하면 그룹 제출 기능이 활성화된다는 의미입니다. 최대값은 1000000마이크로초로만 설정할 수 있습니다.
binlog_group_commit_sync_no_delay_count, 이 매개변수는 binlog_group_commit_sync_delay의 대기 시간 내에 사물 수가 binlog_group_commit_sync_no_delay_count에 설정된 매개변수에 도달하면 그룹 제출이 트리거됨을 의미합니다. 이 값이 0으로 설정되면 영향이 없습니다. 시간에 도달했지만 트랜잭션 수에 도달하지 않은 경우 그룹 제출 작업도 수행됩니다.
그룹 제출은 MySQL의 binlog를 기반으로 그룹 제출에 무슨 일이 일어나고 있는지 더 재미있는 방법입니다.
[root@mxqmongodb2 log]# mysqlbinlog mysql-bin.000005 |grep last_committed
#170607 11:24:57 server id 353306 end_log_pos 876350 CRC32 0x92093332 GTID last_committed=654 sequence_number=655#170607 11:24:58 server id 353306 end_log_pos 880406 CRC32 0x344fdf71 GTID last_committed=655 sequence_number=656#170607 11:24:58 server id 353306 end_log_pos 888700 CRC32 0x4ba2b05b GTID last_committed=656 sequence_number=657#170607 11:24:58 server id 353306 end_log_pos 890675 CRC32 0xf8a8ad64 GTID last_committed=657 sequence_number=658#170607 11:24:58 server id 353306 end_log_pos 892770 CRC32 0x127f9cdd GTID last_committed=658 sequence_number=659#170607 11:24:58 server id 353306 end_log_pos 894757 CRC32 0x518abd93 GTID last_committed=659 sequence_number=660#170607 11:37:46 server id 353306 end_log_pos 895620 CRC32 0x99174f95 GTID last_committed=660 sequence_number=661#170607 11:37:51 server id 353306 end_log_pos 895897 CRC32 0xb4ffc341 GTID last_committed=661 sequence_number=662#170607 11:38:00 server id 353306 end_log_pos 896174 CRC32 0x6bcbc492 GTID last_committed=662 sequence_number=663#170607 11:39:40 server id 353306 end_log_pos 896365 CRC32 0x1fe16c7c GTID last_committed=663 sequence_number=664

위는 그룹 제출을 활성화하지 않는 로그입니다. 거기에는 binlog에 last_committed와 sequence_number라는 두 개의 매개변수가 있습니다. 다음 항목이
메인 라이브러리에서 그룹 제출을 구성한 후 슬레이브 라이브러리에 다음 매개변수를 추가해야 한다는 것을 알 수 있습니다. last_committed는 항상 다음과 같습니다. 이전 항목의 시퀀스 번호가 동일합니다. 이 역시 순차적으로 제출되기 때문에 이해하기 쉽기 때문에 이해하는 것도 놀라운 일이 아닙니다.
그룹 제출 모드의 내용을 살펴보겠습니다.
[root@mxqmongodb2 log]# mysqlbinlog mysql-bin.000008|grep last_commit
#170609 10:11:07 server id 353306 end_log_pos 75629 CRC32 0xd54f2604 GTID last_committed=269 sequence_number=270#170609 10:13:03 server id 353306 end_log_pos 75912 CRC32 0x43675b14 GTID last_committed=270 sequence_number=271#170609 10:13:24 server id 353306 end_log_pos 76195 CRC32 0x4f843438 GTID last_committed=270 sequence_number=272

마지막 두 가지 중 last_committed가 동일하다는 것을 알 수 있습니다. 이는 무엇을 의미하며, 두 가지가 제출되었음을 의미합니다. 그룹으로서 두 가지가 perpare 잘림에서 동일한 last_committed를 얻고 서로 영향을 미치지 않습니다. 결국 그룹으로 제출됩니다. 이를 그룹 제출이라고 합니다.
#MTS
slave-parallel-type=LOGICAL_CLOCK
slave-parallel-workers=8 #太多的线程会增加线程间同步的开销,建议4-8个slave线程
master_info_repository=TABLErelay_log_info_repository=TABLErelay_log_recovery=ONslave-parallel-type有两个之,DATABASE和LOGICAL_CLOCK,DATABASE: 默认值,兼容5.6以schema维度的并行复制, LOGICAL_CLOCK: MySQL 5.7基于组提交的并行复制机制。

요약하자면, MySQL5.7의 병렬 복제는 메인 라이브러리의 그룹 커밋과 슬레이브 라이브러리의 다음 매개변수 구성을 기반으로 합니다. mysql> '%slave_para%';

+------------------------+---------------+| Variable_name | Value |+------------------------+---------------+| slave_parallel_type | LOGICAL_CLOCK || slave_parallel_workers | 8 |+------------------------+---------------+2 rows in set (0.01 sec)

To MySQL 5.7의 병렬 복제를 사용하려면 먼저 마스터 데이터베이스에서 binlog_group_commit_sync_delay를 0보다 큰 값으로 설정한 다음 슬레이브 데이터베이스에서 스레드 수 및 관련 메서드를 설정해야 합니다. 위에서 설정한 값은 8이며, 슬레이브 라이브러리를 보면 슬레이브 라이브러리에 트랜잭션 처리를 기다리는 스레드가 1개가 아닌 8개가 있는 것을 볼 수 있습니다.

위 내용은 MySQL5.7 그룹 제출 및 병렬 복제 예제 튜토리얼의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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