Heim  >  Artikel  >  Datenbank  >  Beispiel-Tutorial für MySQL5.7-Gruppenübermittlung und parallele Replikation

Beispiel-Tutorial für MySQL5.7-Gruppenübermittlung und parallele Replikation

PHP中文网
PHP中文网Original
2017-06-20 15:13:181263Durchsuche
Seit MySQL Version 5.5 wurde der parallele Replikationsmechanismus eingeführt, was eine sehr wichtige Funktion von MySQL ist.
MySQL 5.6 beginnt mit der Unterstützung der parallelen Replikation mit Schema als Dimension. Das heißt, wenn das Binlog-Zeilenereignis auf Objekten unterschiedlicher Schemata ausgeführt wird, kann eine parallele Replikation erreicht werden, wenn festgestellt wird, dass es keine DDL und Fremddaten gibt Schlüsselabhängigkeiten.
Die Community hat auch eine Version der parallelen Replikation mit Tabellen als Dimensionen oder Datensätzen als Dimensionen eingeführt. Unabhängig davon, ob es sich um ein Schema, eine Tabelle oder einen Datensatz handelt, basiert sie auf dem Standby-Datenbankslave, der Ereignisse im Zeilenformat in Echtzeit analysiert Zur Beurteilung wird sichergestellt, dass keine Konflikte auftreten. Die Verteilung wird durchgeführt, um Parallelität zu erreichen.
Parallele Replikation von MySQL5.7, Multithread-Slave ist MTS. Es wird erwartet, dass die Parallelität der Hauptdatenbank maximiert wird. Dies kann erreicht werden, indem die erforderlichen Informationen zum Binlog-Ereignis hinzugefügt werden, damit der Slave Der Knoten kann anhand dieser Informationen Parallelität erreichen.
Die parallele Replikation von MySQL 5.7 basiert auf Gruppen-Commit. Alle vorbereiteten Anweisungen, die in der Hauptdatenbank ausgeführt werden können, zeigen an, dass kein Datenkonflikt vorliegt, und können parallel auf dem Slave-Knoten repliziert werden.
In Bezug auf die Gruppenübermittlung von MySQL5.7 müssen wir uns die folgenden Parameter ansehen:
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 Dieser Parameter steuert die Zeit, die auf die Protokollübermittlung gewartet wird, bevor die Festplatte geleert wird. Der Standardwert ist 0, was bedeutet, dass die Festplatte sofort nach der Übermittlung geleert wird Gleichzeitiges Spülen nennen wir Gruppenunterwerfung. Die Gruppenübermittlung ist die Grundlage der parallelen Replikation. Wenn wir diesen Wert auf mehr als 0 setzen, bedeutet dies, dass die Gruppenübermittlungsfunktion aktiviert ist. Der Maximalwert kann nur auf 1000000 Mikrosekunden eingestellt werden.
binlog_group_commit_sync_no_delay_count, dieser Parameter bedeutet, dass innerhalb der Wartezeit von binlog_group_commit_sync_delay eine Gruppenübermittlung ausgelöst wird, wenn die Anzahl der Dinge den durch binlog_group_commit_sync_no_delay_count festgelegten Parameter erreicht wird keinen Einfluss haben. Wenn die Zeit erreicht ist, die Anzahl der Transaktionen jedoch nicht erreicht wurde, wird auch ein Gruppenübermittlungsvorgang durchgeführt.
Gruppenübermittlung ist eine unterhaltsamere Möglichkeit. Wir können sehen, worauf die Gruppenübermittlung anhand des Binlogs von MySQL basiert:
[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

Das Obige ist ein Protokoll ohne aktivierte Gruppenübermittlung. Wir können sehen, dass es im Binlog zwei Parameter gibt: last_committed und sequence_number. Wir können sehen, dass das nächste ist:
Nach der Konfiguration der Gruppenübermittlung In der Hauptbibliothek müssen wir der Slave-Bibliothek die folgenden Parameter hinzufügen: last_committed ist immer gleich der sequence_number des vorherigen Dings. Dies ist auch leicht zu verstehen, da die Dinge nacheinander eingereicht werden, sodass es nicht überraschend ist, es zu verstehen.
Hier ist ein Blick auf die Dinge im Gruppeneinreichungsmodus:
[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

Wir können die letzten beiden Dinge sehen „Last_Committed“ ist dasselbe. Was bedeutet das, dass zwei Dinge als Gruppe übermittelt werden? Dies wird als Gruppeneinreichung bezeichnet.
#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基于组提交的并行复制机制。

Zusammenfassend basiert die parallele Replikation von MySQL5.7 auf dem Gruppen-Commit der Hauptbibliothek und der Konfiguration der folgenden Parameter der Slave-Bibliothek: mysql> Variablen wie „% Slave_para%“ anzeigen;

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

Um die parallele Replikation von MySQL5.7 zu verwenden, müssen Sie zunächst binlog_group_commit_sync_delay auf größer als 0 setzen in der Hauptbibliothek, und legen Sie dann den Thread in der Slave-Bibliothek auf Zahlen und verwandte Arten fest. Was wir oben festgelegt haben, ist 8, und dann können Sie der Slave-Bibliothek entnehmen, dass

mysql> show processlist;+----+-------------+--------------------+------+---------+--------+--------------------------------------------------------+------------------+| Id | User        | Host               | db   | Command | Time   | State                                                  | Info             |+----+-------------+--------------------+------+---------+--------+--------------------------------------------------------+------------------+|  1 | system user |                    | NULL | Connect | 373198 | Waiting for master to send event                       | NULL             ||  2 | system user |                    | NULL | Connect |   1197 | Slave has read all relay log; waiting for more updates | NULL             ||  4 | system user |                    | NULL | Connect |   4292 | Waiting for an event from Coordinator                  | NULL             ||  5 | system user |                    | NULL | Connect | 373198 | Waiting for an event from Coordinator                  | NULL             ||  6 | system user |                    | NULL | Connect | 373198 | Waiting for an event from Coordinator                  | NULL             ||  7 | system user |                    | NULL | Connect | 373198 | Waiting for an event from Coordinator                  | NULL             ||  8 | system user |                    | NULL | Connect | 373198 | Waiting for an event from Coordinator                  | NULL             ||  9 | system user |                    | NULL | Connect | 373198 | Waiting for an event from Coordinator                  | NULL             || 10 | system user |                    | NULL | Connect | 373198 | Waiting for an event from Coordinator                  | NULL             || 11 | system user |                    | NULL | Connect | 373198 | Waiting for an event from Coordinator                  | NULL             || 16 | root        | 10.103.16.34:37263 | NULL | Query   |      0 | starting                                               | show processlist |+----+-------------+--------------------+------+---------+--------+--------------------------------------------------------+------------------+

die Slave-Bibliothek acht Threads hat, die auf die Transaktionsverarbeitung warten, statt nur einem.

Das obige ist der detaillierte Inhalt vonBeispiel-Tutorial für MySQL5.7-Gruppenübermittlung und parallele Replikation. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn