In diesem Experiment konfigurieren wir die standardmäßige asynchrone Replikation von MySQL mit einem Master und zwei Slaves für drei Modi: leere Datenbank, offline und online. Es wird nur die gesamte Replikation auf Serverebene durchgeführt, einzelne Datenbanktabellen oder gefilterte Replikationen werden nicht berücksichtigt. Experimentelle Umgebung [root@slave2 ~]# cat /etc/hosts 192.168.2.138 Meister 192.168.2.192 Sklave1 192.168.2.130 Slave2 mysql> Version auswählen(); +-------------+ | version() | +-------------+ | 8.0.16 | +-------------+ 1 Zeile im Satz (0,00 Sek.) 1. Leeres Lager 1. Zeigen Sie die Binärinformationen der Hauptbibliothek an mysql> Masterstatus anzeigen; +------------------+----------+--------------+------------------+-------------------+ | Datei | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set | +------------------+----------+--------------+------------------+-------------------+ | mysql-bin.000004 | 155 | | | | +------------------+----------+--------------+------------------+-------------------+ 1 Zeile im Satz (0,00 Sek.) 2. Erstellen Sie einen Replikationsbenutzer auf der Masterdatenbank mysql> Benutzer „repl“@„%“ erstellen, identifiziert mit mysql_native_password durch „wwwwww“; Abfrage OK, 0 Zeilen betroffen (0,03 Sek.) mysql> gewähre 'repl'@'%' Replikationsclient, Replikations-Slave auf *.*; Abfrage OK, 0 Zeilen betroffen (0,04 Sek.) mysql> Berechtigungen leeren; Abfrage OK, 0 Zeilen betroffen (0,00 Sek.) 3. Erstellen Sie Master-Datenbankinformationen aus der Slave-Datenbank mysql> Slave stoppen; mysql> ändere Master in master_host='192.168.2.138', master_port=3306, master_user='repl', master_password='wwwwww', master_log_file='mysql-bin.000004', master_log_pos=155; Abfrage OK, 0 Zeilen betroffen, 2 Warnungen (0,00 Sek.) mysql> Slave starten; Abfrage OK, 0 Zeilen betroffen (0,00 Sek.) mysql> Slave-Status anzeigen\G Wir haben gerade keinen Repl-Benutzer in der Slave-Datenbank erstellt, aber da die Anweisung „Benutzer erstellen“ nach dem Startpunkt ausgeführt wird, kann sie normal in die Slave-Datenbank kopiert werden. Sie können dies bestätigen, indem Sie die Tabelle mysql.user abfragen. sql> wähle * von mysql.user, wobei user='repl'\G 2. Offline Wenn die Datenbank bereits Anwendungsdaten enthält, aber ein akzeptables Offline-Zeitfenster für die Replikation zulässt, besteht in diesem Szenario ein gängiger Ansatz darin, das gesamte Datenverzeichnis der Masterdatenbank direkt in die Slavedatenbank zu kopieren und dann die Replikation zu starten. Die einzelnen Schritte sind wie folgt. 1. Erstellen Sie eine Testbibliothek und eine Testtabelle auf dem Masterknoten CREATE DATABASE-Test; Abfrage OK, 1 Zeile betroffen (0,04 Sek.) mysql> USE-Test; Datenbank geändert mysql> TABELLE ERSTELLEN t(id int(10)); Abfrage OK, 0 Zeilen betroffen (0,09 Sek.) mysql> INSERT INTO t VALUES (111); Abfrage OK, 1 Zeile betroffen (0,05 Sek.) mysql> INSERT INTO t VALUES (222); Abfrage OK, 1 Zeile betroffen (0,00 Sek.) mysql> INSERT INTO t VALUES (333); Abfrage OK, 1 Zeile betroffen (0,00 Sek.) 2. Erstellen Sie einen Replikationsbenutzer in der Masterdatenbank mysql> Benutzer „repl“@„%“ erstellen, identifiziert mit mysql_native_password durch „wwwwww“; Abfrage OK, 0 Zeilen betroffen (0,03 Sek.) mysql> gewähre 'repl'@'%' Replikationsclient, Replikations-Slave auf *.*; Abfrage OK, 0 Zeilen betroffen (0,04 Sek.) mysql> Berechtigungen leeren; Abfrage OK, 0 Zeilen betroffen (0,00 Sek.) 3. Stoppen Sie alle replizierten Instanzen und führen Sie sie jeweils auf Master, Slave1 und Slave2 aus [root@master ~]# ln -s /usr/local/mysql/bin/mysqladmin /usr/bin/mysqladmin [root@master ~]# mysqladmin -hlocalhost -uroot -pwwwwww shutdown 4. Daten auf Slave1 und Slave2 kopieren [root@master-Daten]# cd /data [root@master data]# scp -r mysql/ slave1:/data/ [root@master data]# scp -r mysql/ slave2:/data/ 5. Führen Sie Befehle von Slave1 und Slave2 aus, um die Datei auto.cnf zu löschen [root@slave1 mysql]# cd /data/mysql [root@slave1 mysql]# rm -rf auto.cnf [root@slave2 mysql]# cd /data/mysql [root@slave2 mysql]# rm -rf auto.cnf 6. Starten Sie die Instanz neu. Dies muss auf allen drei Knoten durchgeführt werden. [root@master data]# service mysqld start MySQL wird gestartet.. ERFOLGREICH! 7. Zeigen Sie das Binärprotokoll in der Hauptbibliothek an mysql> Masterstatus anzeigen; +------------------+----------+--------------+------------------+-------------------+ | Datei | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set | +------------------+----------+--------------+------------------+-------------------+ | mysql-bin.000005 | 155 | | | | +------------------+----------+--------------+------------------+-------------------+ 1 Zeile im Satz (0,00 Sek.) 8. Befehle von Slave1 und Slave2 ausführen mysql> Slave stoppen; Abfrage OK, 0 Zeilen betroffen (0,01 Sek.) mysql> ändere Master in master_host='192.168.2.138', master_port=3306, master_user='repl', master_password='wwwwww', master_log_file='mysql-bin.000005', master_log_pos=155; Abfrage OK, 0 Zeilen betroffen, 2 Warnungen (0,02 Sek.) mysql> Slave starten; Abfrage OK, 0 Zeilen betroffen (0,03 Sek.) mysql> Slave-Status anzeigen\G 9. Führen Sie Befehle von Slave1 und Slave2 aus, um zu überprüfen, ob Datenbank und Tabelle synchronisiert sind. mysql> Test verwenden; 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_im_Test | +----------------+ | t | +----------------+ 1 Zeile im Satz (0,00 Sek.) mysql> wähle * aus t; +------+ |Ich würde| +------+ | 111 | | 222 | | 333 | +------+ 3 Zeilen im Satz (0,00 Sek.) 3. mysqldump online Die Forderung, eine Offline-Replikation durchzuführen, ist zu idealistisch. In den meisten Fällen muss die Replikation online durchgeführt werden, ohne das Online-Geschäft zu beeinträchtigen, und die Auswirkungen auf die Online-Datenbank müssen so gering wie möglich sein. Beispielsweise wirkt sich das Sperren der Masterdatenbank während der Replikation auf den Zugriff auf die Masterdatenbank aus und ist daher normalerweise nicht zulässig. Für dieses Szenario gibt es zwei alternative Replikationslösungen: die Verwendung des Programms mysqldump oder die Verwendung eines Drittanbietertools wie XtraBackup. Diese beiden Lösungen haben ihre eigenen Anwendungsfälle. Der Vorgang zum Einrichten der Online-Replikation mit mysqldump läuft wie folgt ab. 1. Erstellen Sie eine Testdatenbank und eine Tabelle in der Hauptbibliothek mysql> DATENBANK ERSTELLEN-Test; Abfrage OK, 1 Zeile betroffen (0,04 Sek.) mysql> Test verwenden; Datenbank geändert mysql> TABELLE ERSTELLEN t(id int(10)); Abfrage OK, 0 Zeilen betroffen (0,10 Sek.) mysql> IN t-WERTE EINFÜGEN (111); Abfrage OK, 1 Zeile betroffen (0,09 Sek.) mysql> IN t-WERTE EINFÜGEN (222); Abfrage OK, 1 Zeile betroffen (0,00 Sek.) mysql> INSERT INTO t VALUES(333); Abfrage OK, 1 Zeile betroffen (0,05 Sek.) mysql> INSERT INTO t VALUES(444); Abfrage OK, 1 Zeile betroffen (0,00 Sek.) 2. Erstellen Sie einen Replikationsbenutzer in der Masterdatenbank mysql> Benutzer „repl“@„%“ erstellen, identifiziert mit mysql_native_password durch „wwwwww“; Abfrage OK, 0 Zeilen betroffen (0,01 Sek.) mysql> gewähre 'repl'@'%' Replikationsclient, Replikations-Slave auf *.*; Abfrage OK, 0 Zeilen betroffen (0,01 Sek.) mysql> Berechtigungen leeren; Abfrage OK, 0 Zeilen betroffen (0,01 Sek.) 3. Erstellen Sie Master-Datenbankinformationen in Slave1 und Slave2 mysql> ändere Master in master_host='192.168.2.138', master_port=3306, master_user='repl', master_password='wwwwww'; Abfrage OK, 0 Zeilen betroffen, 2 Warnungen (0,04 Sek.) 4. Verwenden Sie den Befehl mysqldump, um Daten aus den Bibliotheken slave1 und slave2 zu kopieren [root@slave2 ~]# mysqldump --single-transaction --all-databases --master-data=1 --host=192.168.2.138 --user=root --password=wwwwww --apply-slave-statements | mysql -uroot -pwwwwww -hlocalhost mysql: [Warnung] Die Verwendung eines Passworts in der Befehlszeilenschnittstelle kann unsicher sein. mysqldump: [Warnung] Die Verwendung eines Passworts in der Befehlszeilenschnittstelle kann unsicher sein. Parameter Beschreibung Der Parameter –single-transaction ermöglicht den Export von Innodb-Tabellen ohne Sperren. Diese Option setzt den Transaktionsisolationsmodus auf REPEATABLE READ und sendet eine START TRANSACTION-SQL-Anweisung an den Server, bevor Daten ausgegeben werden. Es funktioniert nur mit Transaktionstabellen wie Innodb, da es beim Ausgeben von START TRANSACTION einen konsistenten Status der Datenbank sichert, ohne Anwendungen zu blockieren. Daher wird hier Folgendes angenommen: 1. Alle Anwendungsdatentabellen verwenden die Innodb-Engine. 2. Während des Sicherungsvorgangs werden die Daten der Systemtabelle nicht geändert. Der Parameter --master-data bewirkt, dass die Dump-Ausgabe eine SQL-Anweisung ähnlich CHANGE MASTER TO MASTER_LOG_FILE='binlog.000004', MASTER_LOG_POS=1480; enthält, die die Binärlogkoordinaten (Dateiname und Position) des Masters angibt. Wenn der Optionswert 2 ist, wird die CHANGE MASTER TO-Anweisung als SQL-Kommentar geschrieben und hat daher nur informativen Charakter und wird nicht ausgeführt. Wenn der Parameterwert 1 ist, wird die Anweisung nicht als Kommentar geschrieben und beim erneuten Laden der Dump-Datei ausgeführt. Wenn kein Optionswert angegeben ist, ist der Standardwert 1. Der Parameter –apply-slave-statements fügt vor der CHANGE MASTER TO-Anweisung eine STOP SLAVE-Anweisung und am Ende der Ausgabe eine START SLAVE-Anweisung hinzu, um die Replikation automatisch zu starten. Durch den Pipeline-Operator werden Export und Import in einem Schritt durchgeführt, ohne dass zwischendurch Dateien generiert werden müssen. 5. Bestätigen Sie den Replikationsstatus aus der Datenbank mysql> Slave-Status anzeigen\G 6. Überprüfen Sie, ob die Datenbank und die Tabelle erfolgreich aus der Datenbank kopiert wurden Test verwenden; 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> wähle * aus t; +------+ |Ich würde| +------+ | 111 | | 222 | | 333 | | 444 | | 555 | +------+ 5 Zeilen im Satz (0,00 Sek.) Der Vorteil der mysqldump-Methode besteht darin, dass sie eine teilweise Replikation durchführen kann. Wenn Sie beispielsweise replicate-do-table=db1.* in der Konfigurationsdatei definieren, können Sie mit dieser Methode nur die db1-Bibliothek replizieren und andere Replikationsereignisse ignorieren. Der Nachteil besteht darin, dass mysqldump SQL-Anweisungen zum Dumpen von Daten aus der Hauptdatenbank generiert. Es handelt sich eigentlich um eine logische Sicherungsmethode, die daher langsam und nicht für große Datenbanken geeignet ist. 4. XtraBackup Online-Replikation Eine weitere Möglichkeit, die Replikation online einzurichten, ist die Verwendung von XtraBackup. XtraBackup ist ein Open-Source-Projekt von Percona, das zur Implementierung ähnlicher Funktionen wie InnoDB Hot Backup, dem offiziellen Hot-Backup-Tool von InnoDB, verwendet wird. Es unterstützt Online-Hot-Backup und beeinträchtigt das Lesen und Schreiben von Daten während des Backups nicht. Die bisher neueste Version ist Percona XtraBackup 8.0.6, die unter https://www.percona.com/downloads/ heruntergeladen werden kann. XtraBackup bietet viele Funktionen und Vorteile, wie etwa die Unterstützung von Voll-Backup, inkrementellem Backup, Teil-Backup, Unterstützung von komprimiertem Backup; Backup hat keinen Einfluss auf das Lesen und Schreiben von Daten, Transaktionen usw., aber es hat auch Mängel und Unzulänglichkeiten: Beispielsweise unterstützt es kein Offline-Backup, unterstützt kein direktes Backup auf Bandgeräte, unterstützt kein Cloud Back und MyISAM-Backup wird ebenfalls blockiert. Diese kleineren Mängel beeinträchtigen jedoch nicht, dass sich XtraBackup zu einem beliebten MySQL-Sicherungstool entwickelt. Beachten Sie außerdem, dass XtraBackup nur Linux-Plattformen unterstützt, nicht Windows-Plattformen. Im Folgenden wird der Vorgang zum Einrichten der Master-Slave-Replikation online mit XtraBackup veranschaulicht. Die Masterdatenbank hat den Benutzer repl zur Durchführung der Replikation eingerichtet. Erstellen eines Replikationsbenutzers in der Masterdatenbank mysql> Benutzer „repl“@„%“ erstellen, identifiziert mit mysql_native_password durch „wwwwww“; Abfrage OK, 0 Zeilen betroffen (0,01 Sek.) mysql> gewähre 'repl'@'%' Replikationsclient, Replikations-Slave auf *.*; Abfrage OK, 0 Zeilen betroffen (0,01 Sek.) mysql> Berechtigungen leeren; Abfrage OK, 0 Zeilen betroffen (0,01 Sek.) 1. Installieren Sie XtraBackupv sowohl auf der Master- als auch auf der Slave-Bibliothek [root@master ~]# yum -y installiere libev [root@master home]# yum localinstall percona-xtrabackup-80-8.0.6-1.el7.x86_64.rpm -y 2. Konfigurieren Sie eine passwortfreie SSH-Verbindung von der Master-Bibliothek zur Slave-Bibliothek [root@master-home]# ssh-keygen Generieren eines öffentlichen/privaten RSA-Schlüsselpaars. Geben Sie die Datei ein, in der der Schlüssel gespeichert werden soll (/root/.ssh/id_rsa): Passphrase eingeben (leer, wenn keine Passphrase vorhanden ist): Geben Sie dieselbe Passphrase erneut ein: Ihre Identifikation wurde in /root/.ssh/id_rsa gespeichert. Ihr öffentlicher Schlüssel wurde in /root/.ssh/id_rsa.pub gespeichert. Der Schlüsselfingerabdruck ist: SHA256:GBLbrw17UVck8RyCa/fbYyLkSNZIRc5p+jPQmpkD+bI root@master Das Randomart-Bild des Schlüssels ist: +---[RSA 2048]----+ | . .o+o+ | | + +..* . | | ooo*.o | | . +.o*.. | |ooS+oo . | | =o=Bo . | | o.=B++ o | | .o..oo..o.| | E . o .| +----[SHA256]-----+ [root@master-home]# ssh-copy-id 192.168.2.138 [root@master-home]# ssh-copy-id 192.168.2.192 [root@master-home]# ssh-copy-id 192.168.2.130 3. Stoppen Sie die Slave-Datenbank und löschen Sie die Daten in der Slave-Datenbank [root@slave1 home]# Dienst MySQL stoppen [root@slave2 home]# Dienst MySQL stoppen [root@slave1 home]# rm -rf /data/mysql/* [root@slave2 home]# rm -rf /data/mysql/* 4.Daten sichern und übertragen [root@master tmp]# xtrabackup -uroot -pwwwwww --socket=/data/mysql/mysql.sock --no-lock --backup --compress --stream=xbstream --parallel=4 --target-dir=./ | ssh [email protected] "xbstream -x -C /data/mysql/ --decompress" Während der Ausführung ist ein Fehler aufgetreten. 190606 01:21:47 >> Protokoll gescannt bis (19597291) 190606 01:21:47 LSN und Binärprotokollposition aus p_s.log_status auswählen
mysql> gewähren Sie BACKUP_ADMIN auf *.* an „root“@„%“; Abfrage OK, 0 Zeilen betroffen (0,01 Sek.) Führen Sie den folgenden Befehl aus, um den Inhalt von 192.168.2.192:/data/mysql/* zu löschen, und führen Sie den Befehl erneut aus, um sicherzustellen, dass er korrekt ist. Eine erfolgreiche Ausführung sieht folgendermaßen aus: Dieser Befehl stellt eine Verbindung zum Master her, führt ein paralleles komprimiertes Streaming-Backup durch, überträgt das Backup über den Pipe-Operator an den Slave und dekomprimiert es direkt in das Datenverzeichnis des Slaves. Alle Vorgänge werden mit einem Befehl ausgeführt, ohne dass zwischendurch Dateien auf die Festplatte geschrieben werden müssen. 5. Stellen Sie das Backup aus der Bibliothek wieder her [root@slave1 /]# xtrabackup --prepare --target-dir=/data/mysql [root@slave2 /]# xtrabackup --prepare --target-dir=/data/mysql 6. Zeigen Sie das binäre Binärprotokoll aus der Bibliothek an [root@slave1 mysql]# cat xtrabackup_binlog_info mysql-bin.000008 155 [root@slave2 mysql]# cat xtrabackup_binlog_info mysql-bin.000009 155 7. Starten Sie die Slave-Bibliothek [root@slave1 data]# service mysqld start MySQL wird gestartet ... ERFOLGREICH! [root@slave2 data]# service mysqld start MySQL wird gestartet ... ERFOLGREICH! 8. Erstellen Sie die Master-Datenbankinformationen, wobei die Werte master_log_file und master_log_pos aus Schritt 6 stammen mysql> ändere Master in master_host='192.168.2.138', master_port=3306, master_user='repl', master_password='wwwwww', master_log_file='mysql-bin.000008', master_log_pos=155; Abfrage OK, 0 Zeilen betroffen, 2 Warnungen (0,04 Sek.) mysql> Slave starten; Abfrage OK, 0 Zeilen betroffen (0,00 Sek.) mysql> Slave-Status anzeigen\G 9. Testdaten aus der Bibliothek mysql> Test verwenden; 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> wähle * aus t; +------+ |Ich würde| +------+ | 111 | | 222 | | 333 | | 444 | | 555 | +------+ 5 Zeilen im Satz (0,00 Sek.) XtraBackup ist eine physische Kopie mit viel höherer Leistung als mysqldump und minimaler Auswirkung auf die Masterdatenbank. Es eignet sich sehr gut für die Online-Erstellung einer Slave-Datenbank mit hoher Auslastung und großem Datenvolumen sowie einer vollständigen Instanz von Grund auf. Damit ist dieser Artikel über die drei Methoden der asynchronen Replikation von MySQL 8.0 abgeschlossen. Weitere Informationen zur asynchronen Replikation von MySQL 8.0 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:
|
<<: Analyse des Framework-Prinzips des Linux-Eingabesubsystems
>>: JavaScript implementiert einfache Rechnerfunktion
Während der heutigen Vorlesung habe ich über den ...
Dies ist mein erstes Mal, dass ich das Element-Fr...
Überprüfen Sie, ob Ihr CUDA installiert ist Geben...
Allgemeiner CSS-Code verursacht nur geringfügige ...
MySQL Version 5.0 begann, gespeicherte Prozeduren...
So implementieren Sie die Funktionen „Als Startse...
Nutzungsumgebung Geben Sie im cmd-Modus mysql --v...
Hier sind einige gängige MySQL-Befehle für Sie: -...
Inhaltsverzeichnis Abfragehintergrund 1. Like-Abf...
Inhaltsverzeichnis Hintergrund Problemanalyse 1. ...
Die Ladegeschwindigkeit einer Webseite ist ein wic...
1. CSS-Schreibformat 1. Inline-Stile Sie können C...
1. Importieren Sie den grundlegenden Stil externe...
Der Befehl „Explain“ ist der erste empfohlene Bef...
1. Hintergrund Auf jeder OLTP-Datenbankinstanz vo...