$ docker run --name mysql3313 -p 3313:3306 --privileged=true -ti -e MYSQL_ROOT_PASSWORD=root -e MYSQL_DATABASE=order -e MYSQL_USER=user -e MYSQL_PASSWORD=pass -v /home/mysql/docker-data/3313/conf:/etc/mysql/conf.d -v /home/mysql/docker-data/3313/data/:/var/lib/mysql -v /home/mysql/docker-data/3313/logs/:/var/log/mysql -d mysql:5.7
So wenden Sie die MySQL GTID-Replikation an
Seit MySQL 5.6.5 wurde eine auf Global Transaction Identifier (GTID) basierende Replikationsmethode eingeführt. GTID stellt sicher, dass jede an die Hauptdatenbank im Cluster übermittelte Transaktion eine eindeutige Kennung hat. Diese Methode stärkt die Primärsicherungskonsistenz, Fehlerwiederherstellung und Fehlertoleranzfähigkeiten der Datenbank.
Was ist GTID
GTID (Global Transaction ID) ist die Nummer für eine übermittelte Transaktion und eine weltweit eindeutige Nummer. GTID besteht eigentlich aus UUID+TID. Die UUID ist die eindeutige Kennung einer MySQL-Instanz. Der Wert von TID steigt monoton mit jeder übermittelten Transaktion und zeichnet die Anzahl der Transaktionen auf, die auf dieser Instanz übermittelt wurden.
Das Folgende ist die spezifische Form einer GTID: 3E11FA47-71CA-11E1-9E33-C80AA9429562:23. Der Doppelpunkt trennt die UUID vorne und die TID hinten.
Die GTID-Sammlung kann durch Kommas getrennte Transaktionen von mehreren MySQL-Instanzen enthalten.
Wenn die Bereiche mehrerer Transaktionssequenznummern von derselben MySQL-Instanz stammen, sollte jeder Bereich durch einen Doppelpunkt getrennt werden. Zum Beispiel: e6954592-8dba-11e6-af0e-fa163e1cf111:1-5:11-18,e6954592-8dba-11e6-af0e-fa163e1cf3f2:1-27.
Was sind die GTID-Verbesserungen? Bei falscher Angabe können Daten weggelassen werden, was zu Dateninkonsistenzen führt. Mit Hilfe von GTID können die anderen Slave-Datenbanken von MySQL im Falle einer Master-Slave-Umschaltung automatisch den richtigen Replikationsspeicherort in der neuen Master-Datenbank finden, was die Wartung des Clusters unter komplexen Replikationstopologien erheblich vereinfacht und das Auftreten von Fehlern reduziert Manuelles Festlegen von Replikationsstandorten. Risiko eines Missbrauchs. Die Verwendung der GTID-basierten Replikation verringert das Risiko von Dateninkonsistenzen, indem bereits ausgeführte Transaktionen ausgeschlossen werden.
Basierend auf dem gtid-Satz kann die Hauptbibliothek genau erkennen, welche Daten in der Slave-Bibliothek fehlen, und gibt nicht mehr oder weniger Daten an die Slave-Bibliothek weiter, um eine Verschwendung von Netzwerkbandbreite zu vermeiden. Mysql Master-Slave-Struktur hat für GTID keinen Vorteil im Fall von einem Master und einem Slave. Die Vorteile der Struktur mit mehr als 2 Mastern liegen jedoch äußerst auf der Hand und es können neue ausgetauscht werden ohne Datenverlust.Hinweis
: Führen Sie vor dem Erstellen der Master-Slave-Replikation einige Vorgänge (z. B. Datenbereinigung usw.) auf einer Instanz durch, die über GTID zum Master wird. Hierbei handelt es sich um Vorgänge, die vor der Einrichtung des Master-Slave-Servers ausgeführt werden und auch auf den Slave-Server kopiert werden, was dazu führt, dass die Replikation fehlschlägt. Das heißt, die Replikation über GTID beginnt immer mit dem frühesten Transaktionsprotokoll, auch wenn diese Vorgänge vor der Replikation ausgeführt werden. Wenn Sie beispielsweise einige Bereinigungsvorgänge zum Löschen und Löschen auf Server1 und dann einen Änderungsvorgang auf Server2 durchführen, führt Server2 auch Bereinigungsvorgänge auf Server1 durch.So funktioniert GTID
Wenn eine Transaktion auf der Seite der Hauptbibliothek ausgeführt und übermittelt wird, wird eine GTID erstellt wird generiert und gemeinsam im Binlog-Protokoll aufgezeichnet.
- Nachdem das Binlog an den Slave übertragen und im Relaylog des Slaves gespeichert wurde, lesen Sie den Wert dieser GTID und legen Sie die Variable gtid_next fest, die dem Slave die nächste GTID mitteilt Wert ausgeführt werden.
- Der SQL-Thread erhält die GTID aus dem Relay-Protokoll und vergleicht dann das Binlog auf der Slave-Seite, um zu sehen, ob es die GTID hat.
- Wenn ein Datensatz vorhanden ist, bedeutet dies, dass die Transaktion mit der GTID ausgeführt wurde und der Slave ihn ignoriert.
- Wenn kein Datensatz vorhanden ist, führt der Slave die GTID-Transaktion aus und zeichnet die GTID in seinem eigenen Binlog auf. Er prüft andere Sitzungsbestände, bevor er die Transaktion liest und ausführt Diese GTID stellt sicher, dass sie nicht wiederholt ausgeführt wird.
- Erstellen mit einer Master- und einer Slave-GTID-Kopie
#🎜 🎜 #master:Docker,Port 3312
Slave:Docker,Port 3313
-
Masterkonfiguration#🎜 🎜#
Der Inhalt der Konfigurationsdatei my.cnf lautet wie folgt:
$ cat /home/mysql/docker-data/3313/conf/my.cnf # For advice on how to change settings please see # http://dev.mysql.com/doc/refman/5.7/en/server-configuration-defaults.html [mysqld] # # Remove leading # and set to the amount of RAM for the most important data # cache in MySQL. Start at 70% of total RAM for dedicated server, else 10%. # innodb_buffer_pool_size = 128M # # Remove leading # to turn on a very important data integrity option: logging # changes to the binary log between backups. # log_bin # # Remove leading # to set options mainly useful for reporting servers. # The server defaults are faster for transactions and fast SELECTs. # Adjust sizes as needed, experiment to find the optimal values. # join_buffer_size = 128M # sort_buffer_size = 2M # read_rnd_buffer_size = 2M #datadir=/home/mysql/docker-data/3307/data #socket=/home/mysql/docker-data/3307/mysql.sock character_set_server=utf8 init_connect='SET NAMES utf8' # Disabling symbolic-links is recommended to prevent assorted security risks symbolic-links=0 #log-error=/home/mysql/docker-data/3307/logs/mysqld.log #pid-file=/home/mysql/docker-data/3307/mysqld.pid lower_case_table_names=1 server-id=1403311 log-bin=mysql-bin binlog-format=ROW auto_increment_increment=1 auto_increment_offset=1 # 开启gtid gtid_mode=ON enforce-gtid-consistency=true #rpl_semi_sync_master_enabled=1 #rpl_semi_sync_master_timeout=10000
$ docker run --name mysql3312 -p 3312:3306 --privileged=true -ti -e MYSQL_ROOT_PASSWORD=root -e MYSQL_DATABASE=order -e MYSQL_USER=user -e MYSQL_PASSWORD=pass -v /home/mysql/docker-data/3312/conf:/etc/mysql/conf.d -v /home/mysql/docker-data/3312/data/:/var/lib/mysql -v /home/mysql/docker-data/3312/logs/:/var/log/mysql -d mysql:5.7
Nach dem Login kopieren
Fügen Sie einen Benutzer zum Kopieren und Autorisieren hinzu: $ docker run --name mysql3312 -p 3312:3306 --privileged=true -ti -e MYSQL_ROOT_PASSWORD=root -e MYSQL_DATABASE=order -e MYSQL_USER=user -e MYSQL_PASSWORD=pass -v /home/mysql/docker-data/3312/conf:/etc/mysql/conf.d -v /home/mysql/docker-data/3312/data/:/var/lib/mysql -v /home/mysql/docker-data/3312/logs/:/var/log/mysql -d mysql:5.7
mysql> GRANT REPLICATION SLAVE,FILE,REPLICATION CLIENT ON *.* TO 'repluser'@'%' IDENTIFIED BY '123456'; Query OK, 0 rows affected, 1 warning (0.01 sec) mysql> FLUSH PRIVILEGES; Query OK, 0 rows affected (0.01 sec)
$ docker run --name mysql3313 -p 3313:3306 --privileged=true -ti -e MYSQL_ROOT_PASSWORD=root -e MYSQL_DATABASE=order -e MYSQL_USER=user -e MYSQL_PASSWORD=pass -v /home/mysql/docker-data/3313/conf:/etc/mysql/conf.d -v /home/mysql/docker-data/3313/data/:/var/lib/mysql -v /home/mysql/docker-data/3313/logs/:/var/log/mysql -d mysql:5.7
Nach dem Login kopieren
GTID-Synchronisierung aktivieren: $ docker run --name mysql3313 -p 3313:3306 --privileged=true -ti -e MYSQL_ROOT_PASSWORD=root -e MYSQL_DATABASE=order -e MYSQL_USER=user -e MYSQL_PASSWORD=pass -v /home/mysql/docker-data/3313/conf:/etc/mysql/conf.d -v /home/mysql/docker-data/3313/data/:/var/lib/mysql -v /home/mysql/docker-data/3313/logs/:/var/log/mysql -d mysql:5.7
mysql> change master to master_host='172.23.252.98',master_port=3310,master_user='repluser',master_password='123456',master_auto_position=1; Query OK, 0 rows affected, 2 warnings (0.02 sec) mysql> start slave; Query OK, 0 rows affected (0.02 sec)
mysql> show master status; +------------------+----------+--------------+------------------+----------------------------------------+ | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set | +------------------+----------+--------------+------------------+----------------------------------------+ | mysql-bin.000008 | 154 | | | cd2eaa0a-7a59-11ec-b3b4-0242ac110002:1 | +------------------+----------+--------------+------------------+----------------------------------------+ 1 row in set (0.00 sec) mysql> show slave status\G; *************************** 1. row *************************** Slave_IO_State: Waiting for master to send event Master_Host: 172.23.252.98 Master_User: repluser Master_Port: 3312 Connect_Retry: 60 Master_Log_File: mysql-bin.000006 Read_Master_Log_Pos: 419 Relay_Log_File: 5dfbef024732-relay-bin.000003 Relay_Log_Pos: 632 Relay_Master_Log_File: mysql-bin.000006 Slave_IO_Running: Yes Slave_SQL_Running: Yes Replicate_Do_DB: Replicate_Ignore_DB: Replicate_Do_Table: Replicate_Ignore_Table: Replicate_Wild_Do_Table: Replicate_Wild_Ignore_Table: Last_Errno: 0 Last_Error: Skip_Counter: 0 Exec_Master_Log_Pos: 419 Relay_Log_Space: 846 Until_Condition: None Until_Log_File: Until_Log_Pos: 0 Master_SSL_Allowed: No Master_SSL_CA_File: Master_SSL_CA_Path: Master_SSL_Cert: Master_SSL_Cipher: Master_SSL_Key: Seconds_Behind_Master: 0 Master_SSL_Verify_Server_Cert: No Last_IO_Errno: 0 Last_IO_Error: Last_SQL_Errno: 0 Last_SQL_Error: Replicate_Ignore_Server_Ids: Master_Server_Id: 1403311 Master_UUID: cd2eaa0a-7a59-11ec-b3b4-0242ac110002 Master_Info_File: /var/lib/mysql/master.info SQL_Delay: 0 SQL_Remaining_Delay: NULL Slave_SQL_Running_State: Slave has read all relay log; waiting for more updates Master_Retry_Count: 86400 Master_Bind: Last_IO_Error_Timestamp: Last_SQL_Error_Timestamp: Master_SSL_Crl: Master_SSL_Crlpath: Retrieved_Gtid_Set: cd2eaa0a-7a59-11ec-b3b4-0242ac110002:1 Executed_Gtid_Set: cd2eaa0a-7a59-11ec-b3b4-0242ac110002:1 Auto_Position: 1 Replicate_Rewrite_DB: Channel_Name: Master_TLS_Version: 1 row in set (0.00 sec)
mysql> insert into t_order values(4,"V");
mysql> select * from order.t_order; +------+------+ | id | name | +------+------+ | 4 | V | +------+------+ 3 rows in set (0.00 sec)
mysql> insert into t_order values(5,"X");
mysql> stop slave; Query OK, 0 rows affected (0.01 sec) mysql> select * from order.t_order; +------+------+ | id | name | +------+------+ | 4 | V | +------+------+ 3 rows in set (0.00 sec) mysql> start slave; Query OK, 0 rows affected (0.02 sec) mysql> select * from order.t_order; +------+------+ | id | name | +------+------+ | 4 | V | | 5 | X | +------+------+ 4 rows in set (0.00 sec)
Probleme aufgetreten
Slave-Status auf dem Slave anzeigen server:
Fatal error: The slave I/O thread stops because master and slave have equal MySQL server UUIDs; these UUIDs must be different for replication to work.
Überprüfen Sie zunächst, ob die server_id von Master und Slave konsistent sind. Wenn sie konsistent sind, ändern Sie das Feld server_id in der my.cnf-Datei:
mysql> show variables like 'server_id';
Überprüfen Sie dann ob die UUID von Master und Slave konsistent sind:
mysql> show variables like '%uuid%';
Wenn die UUID konsistent ist, ändern Sie die Datei auto.cnf im Datenverzeichnis, kopieren Sie das gesamte Datenverzeichnis und kopieren Sie auch die Datei auto.cnf . Die UUID der Datenbank wird darin aufgezeichnet. Die UUID jeder Bibliothek sollte unterschiedlich sein.
Das obige ist der detaillierte Inhalt vonSo wenden Sie die MySQL GTID-Replikation an. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

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



MySQL ist ein Open Source Relational Database Management System. 1) Datenbank und Tabellen erstellen: Verwenden Sie die Befehle erstellte und creatEtable. 2) Grundlegende Vorgänge: Einfügen, aktualisieren, löschen und auswählen. 3) Fortgeschrittene Operationen: Join-, Unterabfrage- und Transaktionsverarbeitung. 4) Debugging -Fähigkeiten: Syntax, Datentyp und Berechtigungen überprüfen. 5) Optimierungsvorschläge: Verwenden Sie Indizes, vermeiden Sie ausgewählt* und verwenden Sie Transaktionen.

Sie können PhpMyAdmin in den folgenden Schritten öffnen: 1. Melden Sie sich beim Website -Bedienfeld an; 2. Finden und klicken Sie auf das Symbol phpmyadmin. 3. Geben Sie MySQL -Anmeldeinformationen ein; 4. Klicken Sie auf "Login".

Erstellen Sie eine Datenbank mit Navicat Premium: Stellen Sie eine Verbindung zum Datenbankserver her und geben Sie die Verbindungsparameter ein. Klicken Sie mit der rechten Maustaste auf den Server und wählen Sie Datenbank erstellen. Geben Sie den Namen der neuen Datenbank und den angegebenen Zeichensatz und die angegebene Kollektion ein. Stellen Sie eine Verbindung zur neuen Datenbank her und erstellen Sie die Tabelle im Objektbrowser. Klicken Sie mit der rechten Maustaste auf die Tabelle und wählen Sie Daten einfügen, um die Daten einzufügen.

Sie können eine neue MySQL -Verbindung in Navicat erstellen, indem Sie den Schritten folgen: Öffnen Sie die Anwendung und wählen Sie eine neue Verbindung (Strg N). Wählen Sie "MySQL" als Verbindungstyp. Geben Sie die Hostname/IP -Adresse, den Port, den Benutzernamen und das Passwort ein. (Optional) Konfigurieren Sie erweiterte Optionen. Speichern Sie die Verbindung und geben Sie den Verbindungsnamen ein.

MySQL ist ein Open Source Relational Database Management -System, das hauptsächlich zum schnellen und zuverlässigen Speicher und Abrufen von Daten verwendet wird. Sein Arbeitsprinzip umfasst Kundenanfragen, Abfragebedingungen, Ausführung von Abfragen und Rückgabergebnissen. Beispiele für die Nutzung sind das Erstellen von Tabellen, das Einsetzen und Abfragen von Daten sowie erweiterte Funktionen wie Join -Operationen. Häufige Fehler umfassen SQL -Syntax, Datentypen und Berechtigungen sowie Optimierungsvorschläge umfassen die Verwendung von Indizes, optimierte Abfragen und die Partitionierung von Tabellen.

MySQL und SQL sind wesentliche Fähigkeiten für Entwickler. 1.MYSQL ist ein Open -Source -Relational Database Management -System, und SQL ist die Standardsprache, die zum Verwalten und Betrieb von Datenbanken verwendet wird. 2.MYSQL unterstützt mehrere Speichermotoren durch effiziente Datenspeicher- und Abruffunktionen, und SQL vervollständigt komplexe Datenoperationen durch einfache Aussagen. 3. Beispiele für die Nutzung sind grundlegende Abfragen und fortgeschrittene Abfragen wie Filterung und Sortierung nach Zustand. 4. Häufige Fehler umfassen Syntaxfehler und Leistungsprobleme, die durch Überprüfung von SQL -Anweisungen und Verwendung von Erklärungsbefehlen optimiert werden können. 5. Leistungsoptimierungstechniken umfassen die Verwendung von Indizes, die Vermeidung vollständiger Tabellenscanning, Optimierung von Join -Operationen und Verbesserung der Code -Lesbarkeit.

Redis verwendet eine einzelne Gewindearchitektur, um hohe Leistung, Einfachheit und Konsistenz zu bieten. Es wird E/A-Multiplexing, Ereignisschleifen, nicht blockierende E/A und gemeinsame Speicher verwendet, um die Parallelität zu verbessern, jedoch mit Einschränkungen von Gleichzeitbeschränkungen, einem einzelnen Ausfallpunkt und ungeeigneter Schreib-intensiver Workloads.

Das Wiederherstellen von gelöschten Zeilen direkt aus der Datenbank ist normalerweise unmöglich, es sei denn, es gibt einen Backup- oder Transaktions -Rollback -Mechanismus. Schlüsselpunkt: Transaktionsrollback: Führen Sie einen Rollback aus, bevor die Transaktion Daten wiederherstellt. Sicherung: Regelmäßige Sicherung der Datenbank kann verwendet werden, um Daten schnell wiederherzustellen. Datenbank-Snapshot: Sie können eine schreibgeschützte Kopie der Datenbank erstellen und die Daten wiederherstellen, nachdem die Daten versehentlich gelöscht wurden. Verwenden Sie eine Löschanweisung mit Vorsicht: Überprüfen Sie die Bedingungen sorgfältig, um das Verhandlich von Daten zu vermeiden. Verwenden Sie die WHERE -Klausel: Geben Sie die zu löschenden Daten explizit an. Verwenden Sie die Testumgebung: Testen Sie, bevor Sie einen Löschvorgang ausführen.
