MySQL 5.6 GTID neue Funktion practice_MySQL
GTID-Einführung
Was ist GTID
GTID (Global Transaction ID) ist die Nummer einer übermittelten Transaktion und eine weltweit eindeutige Nummer.
GTID besteht eigentlich aus UUID+TID. Die UUID ist die eindeutige Kennung einer MySQL-Instanz. TID stellt die Anzahl der Transaktionen dar, die auf dieser Instanz festgeschrieben wurden, und steigt monoton an, wenn Transaktionen festgeschrieben werden. Das Folgende ist die spezifische Form einer GTID
3E11FA47-71CA-11E1-9E33-C80AA9429562:23
Eine ausführlichere Einführung finden Sie unter: Offizielle Dokumentation
Die Rolle von GTID
Was ist also der Zweck der GTID-Funktion? Die spezifische Zusammenfassung umfasst hauptsächlich die folgenden zwei Punkte:
Anhand der GTID können Sie erkennen, auf welcher Instanz die Transaktion ursprünglich übermittelt wurde. Das Vorhandensein der GTID erleichtert das Failover der Replikation. Der zweite Punkt wird hier ausführlich erläutert. Wir können einen Blick auf den Vorgang des Replikations-Failovers werfen, bevor die GTID von MySQL 5.6 erschien. Angenommen, wir haben eine Umgebung wie unten
Zu diesem Zeitpunkt ist der Server von Server A ausgefallen und das Unternehmen muss auf Server B umgestellt werden. Gleichzeitig müssen wir die Replikationsquelle von Server C auf Server B ändern. Die Befehlssyntax für die Änderung der Kopierquelle ist sehr einfach, nämlich CHANGE MASTER TO MASTER_HOST='xxx', MASTER_LOG_FILE='xxx', MASTER_LOG_POS=nnnn. Die Schwierigkeit besteht darin, dass es zu einem Problem wird, den aktuellen Synchronisationsstopppunkt von Server C und die entsprechenden Werte für „master_log_file“ und „master_log_pos“ von Server B zu finden, da dieselbe Transaktion auf jedem Computer unterschiedliche Binlog-Namen und Speicherorte hat. Dies ist ein wichtiger Grund, warum M-S-Replikationscluster zusätzliche Verwaltungstools wie MMM und MHA verwenden müssen.
Dieses Problem wird nach dem Aufkommen von GTID in 5.6 sehr einfach. Da die GTID derselben Transaktion auf allen Knoten den gleichen Wert hat, kann die GTID auf Server B anhand der GTID des aktuellen Stopppunkts von Server C eindeutig lokalisiert werden. Selbst aufgrund der Entstehung der Funktion MASTER_AUTO_POSITION müssen wir den spezifischen Wert von GTID nicht kennen. Wir können den Befehl CHANGE MASTER TO MASTER_HOST='xxx', MASTER_AUTO_POSITION direkt verwenden, um die Failover-Arbeit abzuschließen. So einfach, nicht wahr?
Einführung in die GTID-basierte Master-Slave-Replikation
Bauen
Basierend auf dem mysql_sandbox-Skript wurde zunächst eine standortbasierte Replikationsumgebung mit einem Master und drei Slaves erstellt. Durch Konfigurationsänderungen wird dann die gesamte Architektur für die GTID-basierte Replikation ausgelegt.
Gemäß den GTID-Konstruktionsvorschlägen in der offiziellen MySQL-Dokumentation. Es ist notwendig, die Konfiguration der Master- und Slave-Knoten einmal zu ändern und den Dienst neu zu starten. Ein solcher Vorgang ist bei einem Upgrade in einer Produktionsumgebung offensichtlich nicht akzeptabel. Facebook, Booking.com und Percona haben dies allesamt durch Patches optimiert und elegantere Upgrades erreicht. Die spezifischen Betriebsmethoden werden in zukünftigen Blogbeiträgen vorgestellt. Hier werden wir ein experimentelles Upgrade gemäß der offiziellen Dokumentation durchführen.
Die wichtigsten Upgrade-Schritte sind wie folgt:
Stellen Sie die Master-Slave-Synchronisation sicher, um sicherzustellen, dass keine neuen Daten zum Ändern von my.cnf auf dem Master geschrieben werden auf dem Slave und aktivieren Sie die GTID-basierte Replikation auf master_auto_position=1. Da es sich um eine experimentelle Umgebung handelt, ist es keine große Sache, read_only und den Dienst neu zu starten. Solange Sie die offiziellen GTID-Konstruktionsempfehlungen befolgen, können Sie das Upgrade erfolgreich abschließen. Der detaillierte Prozess wird hier nicht beschrieben. Nachfolgend sind einige Fehler aufgeführt, die während des Upgrade-Vorgangs leicht auftreten können.
Häufige Fehler
Die drei Parameter „gtid_mode=ON“, „log_slave_updates“ und „force_gtid_consistency“ müssen gleichzeitig in my.cnf konfiguriert werden. Andernfalls wird in mysql.err
der folgende Fehler angezeigt2016-10-08 20:11:08 32147 [FEHLER] --gtid-mode=ON oder UPGRADE_STEP_1 oder UPGRADE_STEP_2 erfordert --log-bin und --log-slave-updates
08.10.2016 20:13:53 32570 [FEHLER] --gtid-mode=ON oder UPGRADE_STEP_1 erfordert --enforce-gtid-consistency
Warnungen nach dem Wechsel des Masters zu
Nachdem Sie gemäß der Dokumentation „master“ auf „master“ geändert haben, werden Sie zwei Warnungen finden. Tatsächlich handelt es sich um zwei Sicherheitswarnungen, die sich nicht auf die normale Synchronisierung auswirken (interessierte Leser können die ausführliche Einleitung dieser Warnung lesen. Der spezifische Inhalt der Warnung lautet wie folgt:
slave1 [localhost] {msandbox} ((none)) > stop slave; Query OK, 0 rows affected (0.03 sec) slave1 [localhost] {msandbox} ((none)) > change master to master_host='127.0.0.1',master_port =21288,master_user='rsandbox',master_password='rsandbox',master_auto_position=1; Query OK, 0 rows affected, 2 warnings (0.04 sec) slave1 [localhost] {msandbox} ((none)) > show warnings; +-------+------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | Level | Code | Message | +-------+------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | Note | 1759 | Sending passwords in plain text without SSL/TLS is extremely insecure. | | Note | 1760 | Storing MySQL user name or password information in the master info repository is not secure and is therefore not recommended. Please consider using the USER and PASSWORD connection options for START SLAVE; see the 'START SLAVE Syntax' in the MySQL Manual for more information. | +-------+------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ 2 rows in set (0.00 sec)
Experiment 1: Wenn die GTID, die der vom Slave benötigten Transaktion entspricht, auf dem Master gelöscht wurde
Den Befehlsergebnissen zum Anzeigen globaler Variablen wie „%gtid%“ können wir entnehmen, dass es unter den Variablen, die sich auf die GTID beziehen, ein gtid_purged gibt. Aus der wörtlichen Bedeutung und der offiziellen Dokumentation können wir erkennen, dass in dieser Variablen der gtid_set aufgezeichnet ist, der auf dem lokalen Computer ausgeführt, aber durch den Befehl „purge Binary Logs to“ bereinigt wurde.
In diesem Abschnitt testen wir, was passiert, wenn der Master einige gtid-Ereignisse löscht, die nicht vom Slave abgerufen wurden.
Die folgenden Anweisungen werden auf dem Master ausgeführt
master [localhost] {msandbox} (test) > show global variables like '%gtid%'; +---------------------------------+----------------------------------------+ | Variable_name | Value | +---------------------------------+----------------------------------------+ | binlog_gtid_simple_recovery | OFF | | enforce_gtid_consistency | ON | | gtid_executed | 24024e52-bd95-11e4-9c6d-926853670d0b:1 | | gtid_mode | ON | | gtid_owned | | | gtid_purged | | | simplified_binlog_gtid_recovery | OFF | +---------------------------------+----------------------------------------+ 7 rows in set (0.01 sec) master [localhost] {msandbox} (test) > flush logs;create table gtid_test2 (ID int) engine=innodb; Query OK, 0 rows affected (0.04 sec) Query OK, 0 rows affected (0.02 sec) master [localhost] {msandbox} (test) > flush logs;create table gtid_test3 (ID int) engine=innodb; Query OK, 0 rows affected (0.04 sec) Query OK, 0 rows affected (0.04 sec) master [localhost] {msandbox} (test) > show master status; +------------------+----------+--------------+------------------+------------------------------------------+ | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set | +------------------+----------+--------------+------------------+------------------------------------------+ | mysql-bin.000005 | 359 | | | 24024e52-bd95-11e4-9c6d-926853670d0b:1-3 | +------------------+----------+--------------+------------------+------------------------------------------+ 1 row in set (0.00 sec) master [localhost] {msandbox} (test) > purge binary logs to 'mysql-bin.000004'; Query OK, 0 rows affected (0.03 sec) master [localhost] {msandbox} (test) > show global variables like '%gtid%'; +---------------------------------+------------------------------------------+ | Variable_name | Value | +---------------------------------+------------------------------------------+ | binlog_gtid_simple_recovery | OFF | | enforce_gtid_consistency | ON | | gtid_executed | 24024e52-bd95-11e4-9c6d-926853670d0b:1-3 | | gtid_mode | ON | | gtid_owned | | | gtid_purged | 24024e52-bd95-11e4-9c6d-926853670d0b:1 | | simplified_binlog_gtid_recovery | OFF | +---------------------------------+------------------------------------------+ 7 rows in set (0.00 sec)
在slave2上重新做一次主从,以下命令在slave2上执行
slave2 [localhost] {msandbox} ((none)) > change master to master_host='127.0.0.1',master_port =21288,master_user='rsandbox',master_password='rsandbox',master_auto_position=1; Query OK, 0 rows affected, 2 warnings (0.04 sec) slave2 [localhost] {msandbox} ((none)) > start slave; Query OK, 0 rows affected (0.01 sec) slave2 [localhost] {msandbox} ((none)) > show slave status\G *************************** 1. row *************************** ...... Slave_IO_Running: No Slave_SQL_Running: Yes ...... Last_Errno: 0 Last_Error: Skip_Counter: 0 Exec_Master_Log_Pos: 0 Relay_Log_Space: 151 ...... Last_IO_Errno: 1236 Last_IO_Error: Got fatal error 1236 from master when reading data from binary log: 'The slave is connecting using CHANGE MASTER TO MASTER_AUTO_POSITION = 1, but the master has purged binary logs containing GTIDs that the slave requires.' Last_SQL_Errno: 0 Last_SQL_Error: ...... Auto_Position: 1 1 row in set (0.00 sec)
实验二:忽略purged的部分,强行同步
那么实际生产应用当中,偶尔会遇到这样的情况:某个slave从备份恢复后(或者load data infile)后,DBA可以人为保证该slave数据和master一致;或者即使不一致,这些差异也不会导致今后的主从异常(例如:所有master上只有insert没有update)。这样的前提下,我们又想使slave通过replication从master进行数据复制。此时我们就需要跳过master已经被purge的部分,那么实际该如何操作呢?
我们还是以实验一的情况为例:
先确认master上已经purge的部分。从下面的命令结果可以知道master上已经缺失24024e52-bd95-11e4-9c6d-926853670d0b:1这一条事务的相关日志
master [localhost] {msandbox} (test) > show global variables like '%gtid%'; +---------------------------------+------------------------------------------+ | Variable_name | Value | +---------------------------------+------------------------------------------+ | binlog_gtid_simple_recovery | OFF | | enforce_gtid_consistency | ON | | gtid_executed | 24024e52-bd95-11e4-9c6d-926853670d0b:1-3 | | gtid_mode | ON | | gtid_owned | | | gtid_purged | 24024e52-bd95-11e4-9c6d-926853670d0b:1 | | simplified_binlog_gtid_recovery | OFF | +---------------------------------+------------------------------------------+ 7 rows in set (0.00 sec)
在slave上通过set global gtid_purged='xxxx'的方式,跳过已经purge的部分
slave2 [localhost] {msandbox} ((none)) > stop slave; Query OK, 0 rows affected (0.04 sec) slave2 [localhost] {msandbox} ((none)) > set global gtid_purged = '24024e52-bd95-11e4-9c6d-926853670d0b:1'; Query OK, 0 rows affected (0.05 sec) slave2 [localhost] {msandbox} ((none)) > start slave; Query OK, 0 rows affected (0.01 sec) slave2 [localhost] {msandbox} ((none)) > show slave status\G *************************** 1. row *************************** Slave_IO_State: Waiting for master to send event ...... Master_Log_File: mysql-bin.000005 Read_Master_Log_Pos: 359 Relay_Log_File: mysql_sandbox21290-relay-bin.000004 Relay_Log_Pos: 569 Relay_Master_Log_File: mysql-bin.000005 Slave_IO_Running: Yes Slave_SQL_Running: Yes ...... Exec_Master_Log_Pos: 359 Relay_Log_Space: 873 ...... Master_Server_Id: 1 Master_UUID: 24024e52-bd95-11e4-9c6d-926853670d0b Master_Info_File: /data/mysql/rsandbox_mysql-5_6_23/node2/data/master.info SQL_Delay: 0 SQL_Remaining_Delay: NULL Slave_SQL_Running_State: Slave has read all relay log; waiting for the slave I/O thread to update it ...... Retrieved_Gtid_Set: 24024e52-bd95-11e4-9c6d-926853670d0b:2-3 Executed_Gtid_Set: 24024e52-bd95-11e4-9c6d-926853670d0b:1-3 Auto_Position: 1 1 row in set (0.00 sec)
可以看到此时slave已经可以正常同步,并补齐了24024e52-bd95-11e4-9c6d-926853670d0b:2-3范围的binlog日志。
以上所述是小编给大家介绍的MySQL 5.6 GTID新特性实践,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对网站的支持!

Heiße KI -Werkzeuge

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool
Ausziehbilder kostenlos

Clothoff.io
KI-Kleiderentferner

AI Hentai Generator
Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

Heiße Werkzeuge

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Heiße Themen

PHP8.3 veröffentlicht: Überblick über neue Funktionen Da sich die Technologie weiterentwickelt und sich ändern muss, werden Programmiersprachen ständig aktualisiert und verbessert. PHP ist eine in der Webentwicklung weit verbreitete Skriptsprache und wurde ständig verbessert, um Entwicklern leistungsfähigere und effizientere Tools zur Verfügung zu stellen. Die kürzlich veröffentlichte PHP 8.3-Version bringt viele lang erwartete neue Funktionen und Verbesserungen. Werfen wir einen Blick auf einen Überblick über diese neuen Funktionen. Initialisierung von Nicht-Null-Eigenschaften Wenn in früheren Versionen von PHP einer Klasseneigenschaft nicht explizit ein Wert zugewiesen wurde, ist es ihr Wert

Eine ausführliche Analyse der neuen Funktionen von PHP8, um Ihnen zu helfen, die neueste Technologie zu beherrschen. Im Laufe der Zeit hat sich die Programmiersprache PHP ständig weiterentwickelt und verbessert. Die kürzlich veröffentlichte PHP8-Version bietet Entwicklern viele spannende neue Funktionen und Verbesserungen, die unsere Entwicklungsarbeit komfortabler und effizienter machen. In diesem Artikel analysieren wir die neuen Funktionen von PHP8 eingehend und stellen spezifische Codebeispiele bereit, die Ihnen helfen, diese neuesten Technologien besser zu beherrschen. Der JIT-Compiler PHP8 führt die JIT-Kompilierung (Just-In-Time) ein

Die in PHP8.1 eingeführte neue Redis-Erweiterung Mit der rasanten Entwicklung des Internets müssen große Datenmengen gespeichert und verarbeitet werden. Um die Effizienz und Leistung der Datenverarbeitung zu verbessern, ist Caching zu einem unverzichtbaren Bestandteil geworden. In der PHP-Entwicklung wird Redis als leistungsstarkes Schlüsselwertspeichersystem häufig in Caching- und Datenspeicherszenarien eingesetzt. Um die Erfahrung bei der Verwendung von Redis in PHP weiter zu verbessern, führt PHP8.1 eine neue Redis-Erweiterung ein. In diesem Artikel werden die neuen Funktionen dieser Erweiterung vorgestellt und bereitgestellt

[Interpretation neuer Funktionen der Go-Sprache: Um die Programmierung effizienter zu gestalten, sind spezifische Codebeispiele erforderlich.] In den letzten Jahren hat die Go-Sprache im Bereich der Softwareentwicklung große Aufmerksamkeit auf sich gezogen, und ihr einfaches und effizientes Designkonzept hat immer mehr Aufmerksamkeit erregt Entwickler. Als statisch typisierte Programmiersprache führt die Go-Sprache weiterhin neue Funktionen ein, um die Entwicklungseffizienz zu verbessern und den Code-Schreibprozess zu vereinfachen. In diesem Artikel werden die neuesten Funktionen der Go-Sprache ausführlich erläutert und anhand spezifischer Codebeispiele erläutert, wie Sie den Komfort dieser neuen Funktionen erleben können. Modulare Entwicklung (GoModules) Go-Sprache ab 1

Übersicht über die neuen Funktionen von CSS3: So erzielen Sie mit CSS3 Übergangseffekte. CSS3 ist die neueste Version von CSS. Unter den vielen neuen Funktionen dürfte der Übergangseffekt die interessanteste und praktischste sein. Übergangseffekte können unsere Seiten während der Interaktion flüssiger und schöner machen und den Benutzern ein gutes visuelles Erlebnis bieten. In diesem Artikel wird die grundlegende Verwendung von CSS3-Übergangseffekten mit entsprechenden Codebeispielen vorgestellt. Attribut „transition-property“: Geben Sie den CSS-Eigenschaftsübergangseffekt an, der überführt werden muss

Zu den neuen Funktionen von PHP8 gehören JIT-Compiler, Typableitung, benannte Parameter, Union-Typen, Eigenschaften, Verbesserungen bei der Fehlerbehandlung, Unterstützung für asynchrone Programmierung, neue Standardbibliotheksfunktionen und anonyme Klassenerweiterungen. Detaillierte Einführung: 1. JIT-Compiler, PHP8 führt den JIT-Compiler ein, der eine wichtige Leistungsverbesserung darstellt. Der JIT-Compiler kann einige hochfrequente Ausführungscodes in Echtzeit kompilieren und optimieren, wodurch die Ausführungsgeschwindigkeit verbessert wird führt die Typinferenzfunktion ein, die es Entwicklern ermöglicht, beim Deklarieren von Variablen usw. automatisch den Typ von Variablen abzuleiten.

Mit der kontinuierlichen Weiterentwicklung der Datenwissenschaft und des Deep Learning ist Python eine der Mainstream-Programmiersprachen, und auch die wissenschaftliche Computerbibliothek Numpy wird ständig weiterentwickelt. Numpy hat kürzlich eine neue Version veröffentlicht, die einige neue Funktionen und Leistungsverbesserungen enthält. In diesem Beitrag tauchen wir tief in die neue Version von Numpy ein und stellen einige ihrer wichtigen Funktionen und Verbesserungen vor. Verbesserung der Shuffle-Funktion Vor numpy1.17.0 ordnete die Shuffle-Funktion die Array-Elemente in zufälliger Reihenfolge neu an. Ran

Neue Funktionen von jdk8: 1. Lambda-Ausdruck; 3. Funktionsschnittstelle 5. Neue Datums- und Zeit-API; Warten.
