Was wir jetzt simulieren, ist ein Master-Slave-System (1 Host und 1 Slave). Das Prinzip der Master-Slave-Synchronisierung besteht darin, die Binärdatei Bin-Log zu synchronisieren und den Inhalt dieser Datei vom Host zum Slave zu synchronisieren. 1. Änderung von Konfigurationsdateien 1. Ändern Sie die Host-KonfigurationsdateiWir benötigen zunächst die Konfigurationsdatei /etc/my.cnf des MySQL-Hosts (192.168.254.130) und fügen die folgende Konfiguration hinzu: #Eindeutige Host-ID Server-ID = 1 #Binärprotokoll log-bin=mysql-bin #Datenbank, die nicht synchronisiert werden muss binlog-ignore-db=mysql binlog-ignore-db=informationsschema #Synchronisierter Datenbankname binlog-do-db=mycat #Binärformat binlog_format=ANWEISUNG Schauen wir uns die gesamte Datei my.cnf an [root@localhost Desktop]# cat /etc/my.cnf [mysqld] datadir=/usr/local/mysql/data basedir=/usr/local/mysql socket=/usr/local/mysql/data/mysql.sock Benutzer=mysql # Das Deaktivieren symbolischer Links wird empfohlen, um verschiedene Sicherheitsrisiken zu vermeiden symbolische Links = 0 Server-ID = 1 log-bin=mysql-bin binlog-ignore-db=mysql binlog-ignore-db=informationsschema binlog-do-db=mycat binlog_format=ANWEISUNG [mysqld_safe] log-error=/usr/local/mysql/data/mysqld.log pid-Datei=/usr/local/mysql/data/mysqld/mysqld.pid [root@localhost Desktop]# Nachdem wir die Konfigurationsdatei des Hosts geändert haben, müssen wir den Dienst mit dem folgenden Befehl neu starten: [root@localhost Support-Dateien]# ls Magie mysqld_multi.server mysql-log-rotate mysql.server [root@localhost Support-Dateien]# pwd /usr/local/mysql/support-files [root@localhost Support-Dateien]# ./mysql.server Neustart Dann ändern wir die Konfigurationsdatei der Slave-Maschine (192.168.254.131). 2. Slave-KonfigurationDie Konfigurationsänderung des Slaves ist relativ einfach: #Eindeutige ID der Slave-Maschine Server-ID = 2 #Relay-Protokoll relay-log=mysql-relay Nach der Änderung der Konfiguration starten wir den Slave neu 2. MySQL-Client-BefehlsvorgangAls nächstes können wir über den folgenden Befehl eine Verbindung zur MySQL-Befehlszeile herstellen: [root@localhost bin]# [root@localhost bin]# pwd /usr/local/mysql/bin [root@localhost bin]# ./mysql -uroot -p 1. Host-Betrieb 1) Erstellen Sie einen Synchronisationsbenutzer Zunächst können wir auf dem Host einen Benutzer erstellen, der ausschließlich für die Master-Slave-Synchronisierung zuständig ist. Dazu führen wir den folgenden Befehl aus: GRANT REPLICATION SLAVE ON *.* TO 'SLAVE'@'%' IDENTIFIZIERT DURCH '123456'; 2) Überprüfen Sie den Status der synchronisierten Dateien Anschließend verwenden wir „show master status“, um den Synchronisierungsstatus des Hosts anzuzeigen: mysql> Masterstatus anzeigen; +------------------+----------+--------------+--------------------------+-----------------------+ | Datei | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set | +------------------+----------+--------------+--------------------------+-----------------------+ | mysql-bin.000001 | 154 | mycat | mysql,Informationsschema | | +------------------+----------+--------------+--------------------------+-----------------------+ 1 Zeile im Satz (0,00 Sek.) 2. Slave-Betrieb 1) Stellen Sie den Slave-Host ein Führen Sie den folgenden Befehl aus, der die relevanten Informationen für die Einrichtung der Synchronisierung mit dem Host festlegt ÄNDERN SIE MASTER IN MASTER_HOST='192.168.254.130', MASTER_USER='SLAVE', MASTER_PASSWORD = '123456', MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS=430; Wenn hier die Meldung erscheint, dass die Host-Konfiguration festgelegt wurde, können Sie diese durch „Stoppen Sie den Slave und setzen Sie den Master zurück“ zurücksetzen. 2) Synchronisation starten Als nächstes starten wir die Synchronisierung, indem wir den Slave starten: Sie können sehen: mysql> Slave-Status anzeigen\G *************************** 1. Reihe *************************** Slave_IO_State: Wartet darauf, dass der Master ein Ereignis sendet Master_Host: 192.168.254.130 Master_Benutzer: SLAVE Master_Port: 3306 Verbindungswiederholung: 60 Master_Log_File:mysql-bin.000001 Read_Master_Log_Pos: 592 Relay-Logdatei:mysql-relay.000002 Relay_Log_Pos: 482 Relay_Master_Log_File: mysql-bin.000001 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: 592 Relay_Log_Space: 685 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: 1 Master_UUID: 74397a99-accf-11eb-ae0d-000c2912d302 Master_Info_Datei: /usr/local/mysql/data/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: 1 Zeile im Satz (0,00 Sek.) MySQL> Hier können wir sehen, dass Slave_IO_Running und Slave_SQL_Running beide JA sind, was bedeutet, dass es erfolgreich war. Wenn es das Folgende ist: *************************** 1. Reihe *************************** Slave_IO_State: Verbindung zum Master wird hergestellt Master_Host: 192.168.254.130 Master_User: Sklave Master_Port: 3306 Verbindungswiederholung: 60 Master_Log_File:mysql-bin.000001 Read_Master_Log_Pos: 430 Relay-Logdatei:mysql-relay.000001 Relay_Log_Pos: 4 Relay_Master_Log_File: mysql-bin.000001 Slave_IO_Running: Verbindung wird hergestellt 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: 430 Relay_Log_Space: 154 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: Seconds_Behind_Master: NULL Master_SSL_Verify_Server_Cert: Nein Last_IO_Errno: 1045 Last_IO_Error: Fehler beim Verbinden mit Master „[email protected]:3306“ – Wiederholungszeit: 60 Wiederholungen: 1 Last_SQL_Errno: 0 Letzter_SQL_Fehler: Server-IDs replizieren_ignorieren: Master_Server_Id: 0 Master_UUID: Master_Info_Datei: /usr/local/mysql/data/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: Letzter_IO_Error_Timestamp: 210505 00:18:08 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: 1 Zeile im Satz (0,00 Sek.) Wir können sehen, dass hier in Last_IO_Error ein Fehler vorliegt, also können wir nachsehen, was das Protokoll meldet. Derzeit besteht mein Problem darin, dass der Synchronisierungsbenutzer aufgrund eines Fehlers nicht synchronisiert werden kann. Wie oben erwähnt, stoppen Sie zuerst die Synchronisierung und setzen Sie sie zurück, ändern Sie den Synchronisierungsbefehl und führen Sie ihn dann erneut aus. 3. Master-Slave-Synchronisationstest 1. Bibliothek zur Host-ErstellungWir erstellen zunächst die Datenbank mycat, die wir zuvor für die Synchronisierung auf dem Host eingerichtet haben: mysql> Datenbank mycat erstellen; Abfrage OK, 1 Zeile betroffen (0,00 Sek.) mysql> verwende mycat; Datenbank geändert mysql> Datenbanken anzeigen; +--------------------+ | Datenbank | +--------------------+ | Informationsschema | | meine Katze | |mysql | | Leistungsschema | |System| +--------------------+ 5 Zeilen im Satz (0,00 Sek.) MySQL> 2. Zeigen Sie die Bibliothek vom Computer aus anDann können wir diese Bibliothek auf der Slave-Maschine sehen mysql> Datenbanken anzeigen; +--------------------+ | Datenbank | +--------------------+ | Informationsschema | | meine Katze | |mysql | | Leistungsschema | |System| +--------------------+ 5 Zeilen im Satz (0,00 Sek.) 3. Initialisierung der Tabellendaten Als nächstes testen wir die Tabellendaten 1) Host Zuerst erstellen wir eine Tabelle auf dem Host und fügen Daten ein mysql> verwende mycat; Datenbank geändert MySQL> mysql> Tabelle `test1` erstellen( -> id int auto_increment nicht null Primärschlüssel, -> Name varchar(10) Standard null -> ); Abfrage OK, 0 Zeilen betroffen (0,03 Sek.) mysql> einfügen in test1(`id`,`name`) Wert(1,"petty"); Abfrage OK, 1 Zeile betroffen (0,16 Sek.) mysql> wähle * aus test1; +----+--------+ | Ich würde | Name | +----+--------+ | 1 | kleinlich | +----+--------+ 1 Zeile im Satz (0,00 Sek.) MySQL> 2) Als nächstes prüfen wir, ob der Slave erfolgreich synchronisiert wurde: mysql> verwende mycat; Einlesen von Tabelleninformationen zur Vervollständigung von Tabellen- und Spaltennamen Sie können diese Funktion deaktivieren, um einen schnelleren Start mit -A zu erhalten Datenbank geändert mysql> Tabellen anzeigen; +-----------------+ | Tabellen_in_mycat | +-----------------+ | Prüfung1 | +-----------------+ 1 Zeile im Satz (0,00 Sek.) mysql> wähle * aus test1; +----+--------+ | Ich würde | Name | +----+--------+ | 1 | kleinlich | +----+--------+ 1 Zeile im Satz (0,00 Sek.) MySQL> Sie können sehen, dass unsere Master-Slave-Konfiguration erfolgreich war. 4. Mehrere Master und mehrere SlavesWir können auch mehrere Master und mehrere Slaves haben. Beispielsweise ist unsere Master-Slave-Reihenfolge Nummer 1 als Master, Nummer 2 als Slave, dann Nummer 3 als Master und Nummer 4 als Slave. Gleichzeitig sind Host Nummer 1 und Host Nummer 3 Master und Slave füreinander. Auf diese Weise kann der gesamte MySQL-Cluster auch dann noch normal funktionieren, wenn einer der Hosts ein Problem hat. Da derzeit nur drei Maschinen vorhanden sind, werden nur drei zum Schreiben der Demo verwendet (eine Windows- und zwei Linux-Maschinen). 1. Host Nr. 1 (192.168.254.30)1) Um die Konfiguration zu ändern, müssen wir zuerst die ursprüngliche Datei etc/my.cnf ändern und Folgendes hinzufügen: # Als Slave ändern Sie auch dessen Bin-Log-Log-Slave-Updates #Auto-Inkrement-Inkrement=2 #Startposition der Selbstinkrementierung Auto-Increment-Offset=1 Informationen zur gesamten Datei [root@localhost Desktop]# cat /etc/my.cnf [mysqld] datadir=/usr/local/mysql/data basedir=/usr/local/mysql socket=/usr/local/mysql/data/mysql.sock Benutzer=mysql # Das Deaktivieren symbolischer Links wird empfohlen, um verschiedene Sicherheitsrisiken zu vermeiden symbolische Links = 0 Server-ID = 1 log-bin=mysql-bin binlog-ignore-db=mysql binlog-ignore-db=informationsschema binlog-do-db=mycat binlog_format=ANWEISUNG Log-Slave-Updates automatische Inkrementierung-Inkrement = 2 automatischer Inkrement-Offset = 1 [mysqld_safe] log-error=/usr/local/mysql/data/mysqld.log pid-Datei=/usr/local/mysql/data/mysqld/mysqld.pid [root@localhost Desktop]# Nach der Änderung dieser Datei müssen wir den Rechner neu starten 2. Sklave Nr. 2 (192.168.254.31)Diese Maschine ist bereits für die Verbindung mit 30 Maschinen konfiguriert, daher müssen dieses Mal keine Änderungen vorgenommen werden. 3. Host Nr. 3 (192.168.254.1)1) Ändern Sie die Konfigurationsdatei. Da es sich bei diesem Rechner um ein Windows-Gerät handelt, müssen wir die Datei my.ini ändern und hinzufügen Server-ID = 3 log-bin=mysql-bin binlog-ignore-db=mysql binlog-ignore-db=informationsschema binlog-do-db=mycat binlog_format=ANWEISUNG Log-Slave-Updates automatische Inkrementierung-Inkrement = 2 automatischer Inkrement-Offset = 2 Beachten Sie, dass wir oben die Server-ID und auch den Wachstumsstartpunkt auto-increment-offset=2 geändert haben. Starten Sie gleichzeitig den Dienst neu. 2) Erstellen eines Synchronisierungsbenutzers Zunächst können wir einen Benutzer für die Master-Slave-Synchronisierung auf dem Host erstellen, indem wir den folgenden Befehl ausführen: GRANT REPLICATION SLAVE ON *.* TO 'SLAVE'@'%' IDENTIFIZIERT DURCH '123456'; 3) Überprüfen Sie den Status mysql> Masterstatus anzeigen; +------------------+----------+--------------+--------------------------+-----------------------+ | Datei | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set | +------------------+----------+--------------+--------------------------+-----------------------+ | mysql-bin.000001 | 154 | mycat | mysql,Informationsschema | | +------------------+----------+--------------+--------------------------+-----------------------+ 1 Zeile im Satz (0,00 Sek.) MySQL> 4) Synchronisationsstatus festlegen Als nächstes führen wir die Host (30) Informationen, mit denen es verbunden ist ÄNDERN SIE MASTER IN MASTER_HOST='192.168.254.130', MASTER_USER='SLAVE', MASTER_PASSWORD = '123456', MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS=430; 5) Synchronisierung mit Host Nr. 1 (192.168.254.30) ÄNDERN SIE MASTER IN MASTER_HOST='192.168.254.1', MASTER_USER='SLAVE', MASTER_PASSWORD = '123456', MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS=154; Dann führen wir „Synchronous Start Slave“ auf Host Nummer 1 und „Synchronous Start Slave“ auf Host Nummer 3 aus. 4. Testen und ansehen 1) Mögliche Probleme (können übersprungen werden) Nun testen wir und prüfen anschließend den Masterstatus der beiden Maschinen separat: show master status;. mysql> Slave-Status anzeigen\G *************************** 1. Reihe *************************** Slave_IO_State: Wartet darauf, dass der Master ein Ereignis sendet Master_Host: 192.168.254.1 Master_Benutzer: SLAVE Master_Port: 3306 Verbindungswiederholung: 60 Master_Log_File:mysql-bin.000001 Read_Master_Log_Pos: 154 Relay_Log_File: localhost-relay-bin.000002 Relay_Log_Pos: 320 Relay_Master_Log_File: mysql-bin.000001 Slave_IO_Running: Ja Slave_SQL_Running: Ja ........ mysql> Slave-Status anzeigen\G *************************** 1. Reihe *************************** Slave_IO_State: Wartet darauf, dass der Master ein Ereignis sendet Master_Host: 192.168.254.130 Master_Benutzer: SLAVE Master_Port: 3306 Verbindungswiederholung: 60 Master_Log_File:mysql-bin.000002 Read_Master_Log_Pos: 462 Relay_Log_Datei: LAPTOP-QR83QEC0-relay-bin.000003 Relay_Log_Pos: 675 Relay_Master_Log_File: mysql-bin.000002 Slave_IO_Running: Ja Slave_SQL_Running: Ja Replicate_Do_DB: ......... Sie können sehen, dass ihre Synchronisierung ja ist. Hier liegt möglicherweise ein Problem vor, das wir selbst lösen müssen. Beispielsweise ändere ich die Konfiguration auf Maschine Nummer 1 und überprüfe dann ihren Status. mysql> Masterstatus anzeigen; +------------------+----------+--------------+--------------------------+-----------------------+ | Datei | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set | +------------------+----------+--------------+--------------------------+-----------------------+ | mysql-bin.000002 | 462 | mycat | mysql,Informationsschema | | +------------------+----------+--------------+--------------------------+-----------------------+ 1 Zeile im Satz (0,00 Sek.) MySQL> Wenn ich diese Nachricht verwende, um Maschine Nr. 3 mit Maschine Nr. 1 synchronisieren zu lassen, wird eine Meldung angezeigt (weil ich eine neue Einfügeanweisung ausgeführt habe), aber die Anweisung zur Tabellenerstellung befindet sich im Protokoll mysql-bin.000001, und hier habe ich neu gestartet, und es gibt ein neues mysql-bin.000002, sodass die Synchronisierungsinformationen der ursprünglichen Nr. 2 geändert wurden. mysql> Slave-Status anzeigen\G *************************** 1. Reihe *************************** Slave_IO_State: Wartet darauf, dass der Master ein Ereignis sendet Master_Host: 192.168.254.130 Master_Benutzer: SLAVE Master_Port: 3306 Verbindungswiederholung: 60 Master_Log_File:mysql-bin.000002 Read_Master_Log_Pos: 462 Relay_Log_Datei: LAPTOP-QR83QEC0-relay-bin.000002 Relay_Log_Pos: 320 Relay_Master_Log_File: mysql-bin.000002 Slave_IO_Running: Ja Slave_SQL_Running: Nein Replicate_Do_DB: Replikat_Ignorieren_DB: Tabelle_replizieren: Tabelle_Ignorieren_replizieren: Wild_Do_Tabelle replizieren: Tabelle_Wild_Ignore_replizieren: Letzte_Fehlernummer: 1146 Last_Error: Fehler „Tabelle ‚mycat.test1‘ existiert nicht“ bei Abfrage. Standarddatenbank: ‚mycat‘. Abfrage: ‚insert into test1(`id`,`name`) value(2,"TOm")‘ 2) Daten in Nummer 3 einfügen. Lassen Sie uns erneut Daten in Nummer 3 einfügen, um zu sehen, ob die Nummern 1 und 2 angezeigt werden. In Operation Nummer 3: mysql> einfügen in test1(`id`,`name`) Wert(3,"kitt"); Abfrage OK, 1 Zeile betroffen (0,01 Sek.) mysql> wähle * aus test1; +----+--------+ | Ich würde | Name | +----+--------+ | 1 | kleinlich | | 2 | Tom | | 3 | Kätzchen | +----+--------+ 3 Zeilen im Satz (0,00 Sek.) MySQL> Ansicht bei Nr. 1 mysql> wähle * aus test1; +----+--------+ | Ich würde | Name | +----+--------+ | 1 | kleinlich | | 2 | Tom | | 3 | Kätzchen | +----+--------+ 3 Zeilen im Satz (0,00 Sek.) MySQL> Ansicht bei Nr. 2 mysql> wähle * aus test1; +----+--------+ | Ich würde | Name | +----+--------+ | 1 | kleinlich | | 2 | Tom | | 3 | Kätzchen | +----+--------+ 3 Zeilen im Satz (0,00 Sek.) MySQL> Es ist ersichtlich, dass wir erfolgreich synchronisiert haben und die Einfügungsinformationen von Host Nummer 3 unter Nummer 1 angezeigt werden. 3) Verarbeitungsdaten mit Nummer 1 Als nächstes überprüfen wir die Operation Nummer 1 Nr. 1: mysql> einfügen in test1(`id`,`name`) Wert(4,"lisa"); Abfrage OK, 1 Zeile betroffen (0,00 Sek.) mysql> wähle * aus test1; +----+--------+ | Ich würde | Name | +----+--------+ | 1 | kleinlich | | 2 | Tom | | 3 | Kätzchen | | 4 | lisa | +----+--------+ 4 Zeilen im Satz (0,00 Sek.) MySQL> Nummer 3: mysql> wähle * aus test1; +----+--------+ | Ich würde | Name | +----+--------+ | 1 | kleinlich | | 2 | Tom | | 3 | Kätzchen | | 4 | lisa | +----+--------+ 4 Zeilen im Satz (0,00 Sek.) MySQL> Sie können sehen, dass sie miteinander synchronisiert sind. Dies ist das Ende dieses Artikels über die MySQL-Master-Slave-Konfiguration und die Multi-Master-Multi-Slave-Konfiguration. Weitere Informationen zur MySQL-Master-Slave-Konfiguration und zur Multi-Master-Multi-Slave-Konfiguration finden Sie in früheren Artikeln auf 123WORDPRESS.COM oder in den folgenden verwandten Artikeln. Ich hoffe, Sie werden 123WORDPRESS.COM auch in Zukunft unterstützen! Das könnte Sie auch interessieren:
|
<<: CSS3 verwendet Animationsattribute, um coole Effekte zu erzielen (empfohlen)
>>: Das Homepage-Design spiegelt am besten das Niveau des Webdesigners wider
In letzter Zeit muss ich im Projektverlauf häufig ...
Lösung: Beenden Sie alle mit .vscode in Zusammenh...
Phänomen: Führen Sie ein Image aus, zum Beispiel ...
Studenten, die Websites erstellen, stellen häufig...
1. Voraussetzungen Bei der Entwicklung von Front-...
Die Verwendung von depends_on zum Sortieren von C...
Heute bin ich etwas verwirrt über <a href="...
In diesem Artikel wird hauptsächlich die Vollbild...
In diesem Artikelbeispiel wird der spezifische Ja...
Verwenden Sie CSS3, um das Eingabefeld ähnlich de...
Inhaltsverzeichnis 1. Mathematische Funktionen 2....
Vorwort Wenn Sie jemand fragt: „Was sind die Merk...
Inhaltsverzeichnis Vorwort Was ist eine virtuelle...
Vorwort Als ich heute eine selbstgeschriebene Kom...
Inhaltsverzeichnis Prämisse TypeScript vs. JavaSc...