Aufgrund der Vorteile von GTID müssen wir die herkömmliche, auf Dateipositionen basierende Replikation in eine GTID-basierte Replikation ändern. Wie dies online geändert werden kann, wird zu einem Problem. Im Folgenden finden Sie eine spezielle Methode: Derzeit verfügen wir über eine MS-Struktur unter herkömmlicher Replikation: Port 3301 Master Port 3302 Sklave Auf Master (3301): [zejin] 3301>Wählen Sie * aus t_users aus; +----+------+ | Ich würde | Name | +----+------+ | 1 | ja | | 2 | zhou | +----+------+ Zeilen im Set (0,00 Sek.) Auf Slave (3302): [zejin] 3302>Slave-Status anzeigen\G *************************** 1. Reihe *************************** Slave_IO_State: Wartet darauf, dass der Master ein Ereignis sendet Master_Host: 192.168.1.240 Master_Benutzer: repl Master_Port: 3301 Verbindungswiederholung: 60 Master_Log_File: binlog57.000002 Read_Master_Log_Pos: 417 Relay_Log_File: zejin240-relay-bin.000004 Relay_Log_Pos: 628 Relay_Master_Log_File: binlog57.000002 Slave_IO_Running: Ja Slave_SQL_Running: Ja Replicate_Do_DB: Replikat_Ignorieren_DB: Tabelle_replizieren: Tabelle_Ignorieren_replizieren: Wild_Do_Tabelle replizieren: Tabelle_Wild_Ignore_replizieren: Last_Errno: 0 Letzter_Fehler: Skip_Counter: 0 Exec_Master_Log_Pos: 417 Relay_Log_Space: 884 Until_Condition: Keine Bis_Log_Datei: Bis_Log_Pos: 0 Master_SSL_Allowed: Nein Master_SSL_CA_Datei: Master_SSL_CA_Pfad: Master_SSL_Zertifikat: Master_SSL_Chiffre: Master_SSL_Schlüssel: Sekunden_Hinter_Master: 0 Master_SSL_Verify_Server_Cert: Nein Last_IO_Errno: 0 Letzter_E/A-Fehler: Last_SQL_Errno: 0 Letzter_SQL_Fehler: Server-IDs replizieren_ignorieren: Master_Server_Id: 3301 Master_UUID: a97983fc-5a29-11e6-9d28-000c29d4dc3f Master_Info_Datei: /home/mysql/I3302/master.info SQL_Delay: 0 SQL_Remaining_Delay: NULL Slave_SQL_Running_State: Slave hat alle Relay-Logs gelesen; wartet auf weitere Updates Master_Retry_Count: 86400 Master_Bind: Zeitstempel des letzten IO-Fehlers: Letzter_SQL_Fehler_Zeitstempel: Master_SSL_Crl: Master_SSL_Crlpfad: Abgerufenes_Gtid_Set: Ausgeführtes_Gtid_Set: Auto_Position: 0 DB replizieren_neu schreiben: Kanalname: Master_TLS_Version: Zeile im Satz (0,00 Sek.) [zejin] 3302>Wählen Sie * aus t_users aus; +----+------+ | Ich würde | Name | +----+------+ | 1 | ja | | 2 | zhou | +----+------+ Zeilen im Set (0,00 Sek.) Im Folgenden sind die einzelnen Schritte für Online-Änderungen aufgeführt: Prämisse: 1. Erfordert alle MySQL-Versionen 5.7.6 oder höher. 2. Der gtid_mode-Wert aller MySQL in der aktuellen Topologie ist deaktiviert. 3. Die folgenden Schritte sind in der richtigen Reihenfolge und dürfen nicht übersprungen werden. Ergänzen Sie die Beschreibung der globalen Systemvariablen GTID_MODE um den Variablenwert: AUS Neue Transaktionen sind nicht GTID. Der Slave akzeptiert nur Transaktionen ohne GTID. Transaktionen mit GTID melden einen Fehler. OFF_PERMISSIVE Neue Transaktionen sind nicht GTID, und der Slave akzeptiert sowohl Transaktionen ohne GTID als auch Transaktionen mit GTID ON_PERMISSIVE Neue Transaktionen sind GTIDs und der Slave akzeptiert sowohl Transaktionen ohne als auch mit GTIDs. ON Neue Transaktionen sind GTID, Slave akzeptiert nur Transaktionen mit GTID Es ist zu beachten, dass die Änderungen dieser Werte in Ordnung sind, nämlich aus<--->AUS_ZULÄSSIG<--->EIN_ZULÄSSIG<--->EIN Zur Ausführung kann nicht gesprungen werden, es wird ein Fehler gemeldet. Schritt 1: Setzen Sie ENFORCE_GTID_CONSISTENCY auf jeder MySQL-Instanz auf Warnung. Es spielt keine Rolle, welche Instanz zuerst ausgeführt wird. [zejin] 3302>setze @@global.enforce_gtid_consistency=warn; Abfrage OK, 0 Zeilen betroffen (0,00 Sek.) [zejin] 3301>Setzen Sie @@global.enforce_gtid_consistency=warn; Abfrage OK, 0 Zeilen betroffen (0,00 Sek.) Hinweis: Wenn nach der Ausführung dieser Anweisung eine GTID-inkompatible Anweisung verwendet wird, zeichnet das Fehlerprotokoll die entsprechenden Informationen auf. Anschließend müssen Sie das Programm anpassen, um inkompatibles Schreiben zu vermeiden , bis keine inkompatiblen Anweisungen mehr generiert werden. Sie können das Programm verwenden, um alle SQL-Anweisungen zu überprüfen, oder Sie können es einrichten und das Fehlerprotokoll für einen bestimmten Zeitraum beobachten. Dieser Schritt ist sehr wichtig. Schritt 2: Setzen Sie ENFORCE_GTID_CONSISTENCY auf jeder MySQL-Instanz auf ON. Das Ergebnis wird nicht davon beeinflusst, welche Instanz zuerst ausgeführt wird. Nachdem der erste Schritt abgeschlossen ist, kann der Wert auf „Ein“ gesetzt werden. [zejin] 3301>setze @@global.enforce_gtid_consistency=on; Abfrage OK, 0 Zeilen betroffen (0,03 Sek.) [zejin] 3302>setze @@global.enforce_gtid_consistency=on; Abfrage OK, 0 Zeilen betroffen (0,00 Sek.) Schritt 3: Setzen Sie GTID_MODE auf jeder MySQL-Instanz auf off_permissiv. Welche Instanz zuerst ausgeführt wird, hat keinen Einfluss auf das Ergebnis. [zejin] 3301>SET @@GLOBAL.GTID_MODE = OFF_PERMISSIVE; Abfrage OK, 0 Zeilen betroffen (0,00 Sek.) [zejin] 3302>SET @@GLOBAL.GTID_MODE = OFF_PERMISSIVE; Abfrage OK, 0 Zeilen betroffen (0,00 Sek.) Schritt 4: Setzen Sie GTID_MODE bei jeder MySQL-Instanz auf on_permissive. Welche Instanz zuerst ausgeführt wird, hat keine Auswirkungen auf das Ergebnis. [zeigen] 3302>SET @@GLOBAL.GTID_MODE = on_permissive; Abfrage OK, 0 Zeilen betroffen (0,00 Sek.) [zeigen] 3301>SET @@GLOBAL.GTID_MODE = on_permissive; Abfrage OK, 0 Zeilen betroffen (0,01 Sek.) Schritt 5: Überprüfen Sie die Variable ONGOING_ANONYMOUS_TRANSACTION_COUNT auf jeder MySQL-Instanz [zejin] 3301>STATUS WIE „ONGOING_ANONYMOUS_TRANSACTION_COUNT“ ANZEIGEN; +-------------------------------------+----------+ | Variablenname | Wert | +-------------------------------------+----------+ | Laufende Anzahl anonymer Transaktionen | 0 | +-------------------------------------+----------+ Zeile im Satz (0,02 Sek.) [zejin] 3302>STATUS WIE „ONGOING_ANONYMOUS_TRANSACTION_COUNT“ ANZEIGEN; +-------------------------------------+----------+ | Variablenname | Wert | +-------------------------------------+----------+ | Laufende Anzahl anonymer Transaktionen | 0 | +-------------------------------------+----------+ Zeile im Satz (0,02 Sek.) Sie müssen warten, bis diese Variable 0 ist Schritt 6: Stellen Sie sicher, dass alle anonymen Transaktionen (nicht-GTID-Transaktionen) vollständig auf alle Server repliziert wurden. Prüfmethode: Auf dem Master: [zejin] 3301>Masterstatus anzeigen; +-----------------+----------+--------------+------------------+-------------------+ | Datei | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set | +-----------------+----------+--------------+------------------+-------------------+ | binlog57.000005 | 154 | | | | +-----------------+----------+--------------+------------------+-------------------+ Zeile im Satz (0,00 Sek.) Auf dem Sklaven, [zejin] 3302>Slave-Status anzeigen\G *************************** 1. Reihe *************************** … Relay_Master_Log_File: binlog57.000005 Exec_Master_Log_Pos: 154 … Überprüfen Sie, ob der Wert von Relay_Master_Log_File größer als binlog57.000005 ist. Oder es ist gleich Relay_Master_Log_File gleich binlog57.000005 und der Wert von Exec_Master_Log_Pos ist größer oder gleich 154 Oder der Slave verwendet die Funktion direkt: [zeigen] 3302>SELECT MASTER_POS_WAIT('binlog57.000005', 154); +-----------------------------------------+ | MASTER_POS_WAIT('binlog57.000005', 154) | +-----------------------------------------+ | 0 | +-----------------------------------------+ Zeile im Satz (0,00 Sek.) Wenn das zurückgegebene Ergebnis größer oder gleich 0 ist, bedeutet dies, dass alle anonymen Transaktionen kopiert wurden. Schritt 7: Bestätigen Sie, dass in der gesamten Topologie keine anonymen Transaktionen vorhanden sind. Beispielsweise wurden alle zuvor generierten anonymen Transaktionen ausgeführt, und im Binärprotokoll sollten keine anonymen Transaktionen vorhanden sein. Sie können Protokolle leeren und MySQL die alten Binärprotokolldateien automatisch bereinigen lassen. Schritt 8: Setzen Sie GTID_MODE auf jeder MySQL-Instanz auf „Ein“. [zeigen] 3301>SET @@GLOBAL.GTID_MODE = ON; Abfrage OK, 0 Zeilen betroffen (0,04 Sek.) [zeigen] 3302>SET @@GLOBAL.GTID_MODE = ON; Abfrage OK, 0 Zeilen betroffen (0,04 Sek.) Schritt 9: Fügen Sie der Konfigurationsdatei my.cnf jeder MySQL-Instanz gtid-mode=ON hinzu. verifizieren: [zejin] 3301>in t_users Werte einfügen (3, 'chen'); Abfrage OK, 1 Zeile betroffen (0,02 Sek.) [zejin] 3301>Aktualisiere t_users, setze Name='li', wobei ID=1 ist; Abfrage OK, 1 Zeile betroffen (0,03 Sek.) Übereinstimmende Zeilen: 1 Geändert: 1 Warnungen: 0 [zejin] 3301>Wählen Sie * aus t_users aus; +----+------+ | Ich würde | Name | +----+------+ | 1 | li | | 2 | zhou | | 3 | chen | +----+------+ Zeilen im Set (0,00 Sek.) [zejin] 3302>Slave-Status anzeigen\G *************************** 1. Reihe *************************** Slave_IO_State: Wartet darauf, dass der Master ein Ereignis sendet Master_Host: 192.168.1.240 Master_Benutzer: repl Master_Port: 3301 Verbindungswiederholung: 60 Master_Log_File: binlog57.000006 Read_Master_Log_Pos: 462 Relay_Log_File: zejin240-relay-bin.000012 Relay_Log_Pos: 673 Relay_Master_Log_File: binlog57.000006 Slave_IO_Running: Ja Slave_SQL_Running: Ja Replicate_Do_DB: Replikat_Ignorieren_DB: Tabelle_replizieren: Tabelle_Ignorieren_replizieren: Wild_Do_Tabelle replizieren: Tabelle_Wild_Ignore_replizieren: Last_Errno: 0 Letzter_Fehler: Skip_Counter: 0 Exec_Master_Log_Pos: 462 Relay_Log_Space: 969 Until_Condition: Keine Bis_Log_Datei: Bis_Log_Pos: 0 Master_SSL_Allowed: Nein Master_SSL_CA_Datei: Master_SSL_CA_Pfad: Master_SSL_Zertifikat: Master_SSL_Chiffre: Master_SSL_Schlüssel: Sekunden_Hinter_Master: 0 Master_SSL_Verify_Server_Cert: Nein Last_IO_Errno: 0 Letzter_E/A-Fehler: Last_SQL_Errno: 0 Letzter_SQL_Fehler: Server-IDs replizieren_ignorieren: Master_Server_Id: 3301 Master_UUID: a97983fc-5a29-11e6-9d28-000c29d4dc3f Master_Info_Datei: /home/mysql/I3302/master.info SQL_Delay: 0 SQL_Remaining_Delay: NULL Slave_SQL_Running_State: Slave hat alle Relay-Logs gelesen; wartet auf weitere Updates Master_Retry_Count: 86400 Master_Bind: Zeitstempel des letzten IO-Fehlers: Letzter_SQL_Fehler_Zeitstempel: Master_SSL_Crl: Master_SSL_Crlpfad: Abgerufen_Gtid_Set: a97983fc-5a29-11e6-9d28-000c29d4dc3f:1-2 Ausgeführtes_Gtid_Set: a97983fc-5a29-11e6-9d28-000c29d4dc3f:1-2 Auto_Position: 0 DB replizieren_neu schreiben: Kanalname: Master_TLS_Version: Zeile im Satz (0,00 Sek.) Damit ist die Online-Konvertierung von der herkömmlichen Replikation zur GTID-Replikation abgeschlossen. Das obige Beispiel der Umstellung der traditionellen Replikation auf GTID-Replikation ohne Unterbrechung des MySQL 5.7-Betriebs ist alles, was ich mit Ihnen teilen möchte. Ich hoffe, es kann Ihnen als Referenz dienen. Ich hoffe auch, dass Sie 123WORDPRESS.COM unterstützen werden. Das könnte Sie auch interessieren:
|
>>: JavaScript zum Erreichen einer festen Seitenleiste
Rownum ist eine einzigartige Schreibmethode in Or...
Seien Sie vorsichtig, wenn Sie auf Ereignisse ach...
Inhaltsverzeichnis Die Fallstricke Füllmethode Wa...
Inhaltsverzeichnis Die Entstehung und Verwirrung ...
Inhaltsverzeichnis Frage: 1. Aktivieren Sie die B...
Einführung Beginnen wir wie immer mit einer Szene...
Im Prozess der Teamentwicklung ist die Formulieru...
Der Formularcode ist wie in der Abbildung dargest...
Wirkung: CSS-Stil: <style type="text/css&...
brauchen: In naher Zukunft werden wir die Funktio...
Kürzlich habe ich festgestellt, dass die Serverze...
brauchen Nachdem der Benutzer das Formular ausgef...
Vorwort Es gibt zwei Arten von Nginx-Modulen: off...
Warum optimieren: Beim Start des eigentlichen Pro...
Inhaltsverzeichnis 1. Einleitung: 2. Die erste Id...