MySQL-Replikation - ausführliche Erklärung und einfaches Beispiel

MySQL-Replikation - ausführliche Erklärung und einfaches Beispiel

MySQL-Replikation - ausführliche Erklärung und einfaches Beispiel

Die Master-Slave-Replikationstechnologie wird in MySQL häufig verwendet, hauptsächlich zum Synchronisieren von Daten auf einem Server mit mehreren Slave-Servern. Sie kann zum Erreichen von Lastausgleich, hoher Verfügbarkeit und Failover sowie zum Bereitstellen von Backups usw. verwendet werden. MySQL unterstützt eine Vielzahl unterschiedlicher Replikationstechnologien, beispielsweise unidirektionale und halbsynchrone asynchrone Replikation sowie unterschiedliche Replikationsebenen, beispielsweise auf Datenbankebene, Tabellenebene, datenbankübergreifende Synchronisierung usw. Dieser Artikel beschreibt kurz eine grundlegende Master-Slave-Replikation und gibt ein Beispiel.

1. Grundprinzipien der Replikation (Schritte)

a. Binäres Protokoll der in der Masterdatenbank aufgezeichneten Datenänderungen
b. Der E/A-Thread der Slave-Datenbank stellt eine Verbindung zur Master-Datenbank her und fordert das Senden seiner Binärprotokolldatei an (der Binlog-Dump-Thread der Master-Datenbank sendet den Inhalt des Binärprotokolls an die Slave-Datenbank).
c. Der I/O-Thread auf dem Slave liest den vom Master-Dienst gesendeten Binärinhalt und kopiert ihn in das Relay-Protokoll.
d. Der SQL-Thread auf dem Slave liest das Relay-Protokoll und führt die im Protokoll enthaltenen Aktualisierungen aus.

2. Fügen Sie der Konfigurationsdatei ein Kopierelement hinzu

# Die Demonstration in diesem Artikel basiert auf einer Umgebung mit mehreren Instanzen auf demselben Server, wobei Port 3406 als Masterbibliothek und Port 3506 als Slavebibliothek verwendet wird. 
# Weitere Informationen zur Bereitstellung mehrerer Instanzen finden Sie unter: 
# MySQL-Konfiguration für mehrere Instanzen (I) http://blog.csdn.net/leshami/article/details/40339167 
# MySQL-Konfiguration mehrerer Instanzen (Teil 2) http://blog.csdn.net/leshami/article/details/40339295 
# 3406 und 3506 sind beide neu installiert und enthalten Standardbibliotheken, daher beinhaltet dieser Artikel nicht den Schritt a der Migration der Daten von der primären Bibliothek zur Standby-Bibliothek und der Konfigurationsdatei in der primären Bibliothek. # mehr my3406.cnf  
[mysqld] 
Socket = /tmp/mysql3406.sock 
Port = 3406 
pid-Datei = /data/inst3406/data3406/my3406.pid 
Benutzer = MySQL 
log-error=/data/inst3406/data3406/inst3406.err 
datadir=/data/inst3406/data3406 
basedir=/app/soft/mysql5 
 
#### für Master-Artikel #### 
Server-ID = 3406 
log_bin=/data/inst3406/log/bin/inst3406bin 
innodb_flush_log_at_trx_commit = 1 
sync_binlog=1 
 
b. Aus der Konfigurationsdatei der Bibliothek# more my3506.cnf  
[mysqld] 
socket = /tmp/mysql3506.sock # Autor: Leshami 
Port = 3506 # Blog: <a target="_blank" href="http://blog.csdn.net/leshamipid-file" rel="external nofollow" >http://blog.csdn.net/leshami 
pid-Datei = /data/inst3506/data3506/my3506.pid 
Benutzer = MySQL 
log-error=/data/inst3506/data3506/inst3506.err 
datadir=/data/inst3506/data3506 
basedir=/app/soft/mysql5 
 
#### für Slave-Artikel #### 
Server-ID = 3506 
relay_log=/Daten/inst3506/log/Relay/Relay-bin 
schreibgeschützt=1 

3. Erstellen Sie ein Kopierkonto

#Starten Sie die Instanz mit Port 3406 und fügen Sie das Konto [mysql@app ~] hinzu$ mysqld_safe --defaults-file=/data/inst3406/data3406/my3406.cnf & 
[mysql@app ~]$ mysql -P3406 #Melden Sie sich bei 3406 an 
 
master@localhost[(none)]> Variablen wie „server_id“ anzeigen; 
+---------------+-------+ 
| Variablenname | Wert | 
+---------------+-------+ 
| Server-ID | 3406 | 
+---------------+-------+ 
 
#Erstellen Sie ein Konto für den Replikationsmaster@localhost[(keine)]> gewähren Sie Replikationsslave, Replikationsclient auf *.* 
  -> zu repl@'192.168.1.177', identifiziert durch 'repl'; 
 
#Initialisieren Sie die Hauptdatenbank-Protokolldatei. Verwenden Sie Reset in der Build-Umgebung mit Vorsicht 
master@localhost[(keine)]> Master zurücksetzen; 
Abfrage OK, 0 Zeilen betroffen (0,01 Sek.) 
 
#Überprüfen Sie den Status der Hauptdatenbank und initialisieren Sie das Protokoll auf 000001. 
master@localhost[(none)]> zeige Masterstatus, Position ist 120 
+--------------------+----------+--------------+------------------+-------------------+ 
| Datei | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set | 
+--------------------+----------+--------------+------------------+-------------------+ 
| inst3406bin.000001 | 120 | | | | 
+--------------------+----------+--------------+------------------+-------------------+ 

4. Konfigurieren Sie die Master-Slave-Synchronisierung

#Starten Sie die Instanz mit Port 3506 [mysql@app ~]$ mysqld_safe --defaults-file=/data/inst3506/data3506/my3506.cnf & 
 
[mysql@app ~]$ msyql -P3506 
 
slave@localhost[(none)]> Variablen wie „server_id“ anzeigen; 
+---------------+-------+ 
| Variablenname | Wert | 
+---------------+-------+ 
| Server-ID | 3506 | 
+---------------+-------+ 
1 Zeile im Satz (0,00 Sek.) 
 
#Fügen Sie relevante Konfigurationsinformationen hinzu, die auf die Master-Datenbank für die Slave-Datenbank verweisen. Dieser Befehl generiert und ändert die Dateien master.info und relay-log.info in der Standby-Datenbank. slave@localhost[(keine)]> CHANGE MASTER TO MASTER_HOST='192.168.1.177', 
  -> MASTER_USER='repl', 
  -> MASTER_PASSWORD='repl', 
  -> MASTER_PORT=3406, 
  -> MASTER_LOG_FILE='inst3406bin.000001', 
  -> MASTER_LOG_POS=0; 
Abfrage OK, 0 Zeilen betroffen, 2 Warnungen (0,04 Sek.) 
 
#Es sind zwei Warnungen aufgetreten. Überprüfen Sie slave@localhost[(keine)]> Warnungen anzeigen \G 
*************************** 1. Reihe *************************** 
 Level: Hinweis 
  Code: 1759 
Nachricht: Das Senden von Passwörtern im Klartext ohne SSL/TLS ist äußerst unsicher. 
*************************** 2. Reihe *************************** 
 Level: Hinweis 
  Code: 1760 
Nachricht: Das Speichern von MySQL-Benutzernamen- oder Kennwortinformationen im Master.info-Repository ist nicht sicher und wird daher nicht empfohlen.  
Weitere Informationen zu diesem Problem und möglichen Alternativen finden Sie im MySQL-Handbuch. 
2 Zeilen im Satz (0,00 Sek.) 
 
#Überprüfen Sie zu diesem Zeitpunkt die Slave-Statusinformationen slave@localhost[(none)]> show slave status \G 
*************************** 1. Reihe *************************** 
        Slave_IO_State:  
         Master_Host: 192.168.1.177 
         Master_Benutzer: repl 
         Master_Port: 3406 
        Verbindungswiederholung: 60 
       Master_Log_File: inst3406bin.000001 
     Read_Master_Log_Pos: 4 
        Relay_Log_File: relay-bin.000001 
        Relay_Log_Pos: 4 
    Relay_Master_Log_File: inst3406bin.000001 
       Slave_IO_Running: Nein, #IO-Thread läuft nicht. Slave_SQL_Running: Nein, #SQL-Thread läuft nicht...................... 
       Master_Info_Datei: /data/inst3506/data3506/master.info 
 
slave@localhost[(keine)]> Slave starten; #Slave starten 
Abfrage OK, 0 Zeilen betroffen (0,01 Sek.) 
 
#Die Bedeutung ist wie folgt: START SLAVE ohne thread_type-Optionen startet beide Slave-Threads. Der I/O-Thread liest 
Ereignisse vom Master-Server und speichert sie im Relay-Log. Der SQL-Thread liest Ereignisse vom 
Relay-Protokoll und führt sie aus. 
 
# Überprüfen Sie den Slave-Status erneut robin@localhost[(none)]> show slave status\G 
*************************** 1. Reihe *************************** 
        Slave_IO_State: Wartet darauf, dass der Master ein Ereignis sendet 
         Master_Host: 192.168.1.177 
         Master_Benutzer: repl 
         Master_Port: 3406 
        Verbindungswiederholung: 60 
       Master_Log_File: inst3406bin.000001 
     Read_Master_Log_Pos: 120 
        Relay_Log_File: relay-bin.000002 
        Relay_Log_Pos: 285 
    Relay_Master_Log_File: inst3406bin.000001 
       Slave_IO_Running: Ja #IO-Thread ist im Ausführungszustand Slave_SQL_Running: Ja #SQL-Thread ist im Ausführungszustand............. 
     Exec_Master_Log_Pos: 120 
       Relay_Log_Space: 452 
           ............ 
       Master_Server_Id: 3406 
         Master_UUID: 32f53a0a-63ef-11e4-93d9-8c89a5d108ae 
       Master_Info_Datei: /data/inst3506/data3506/master.info 
          SQL_Delay: 0 
     SQL_Remaining_Delay: NULL   
   Slave_SQL_Running_State: Der Slave hat alle Relay-Protokolle gelesen; wartet auf die Aktualisierung durch den E/A-Thread des Slaves. #Wichtige Eingabeaufforderungsinformationen#Sie können zwei Threads in der Slave-Bibliothek sehen, einer ist für den E/A-Thread, der zum Herstellen einer Verbindung mit der Master-Bibliothek verwendet wird, um die Master-Bibliothek zum Senden eines Binärprotokolls aufzufordern, und der andere ist der SQL-Thread zum Ausführen von SQL. 
slave@localhost[(keine)]> Prozessliste anzeigen\G 
*************************** 1. Reihe *************************** 
   ID: 4 
  Benutzer: Systembenutzer 
  Gastgeber:  
   db: NULL 
Befehl: Verbinden 
  Zeit: 510993 
 Status: Wartet darauf, dass der Master ein Ereignis sendet 
  Info: NULL 
*************************** 2. Reihe *************************** 
   ID: 5 
  Benutzer: Systembenutzer 
  Gastgeber:  
   db: NULL 
Befehl: Verbinden 
  Zeit: 333943 
 Status: Der Slave hat alle Relay-Protokolle gelesen und wartet auf die Aktualisierung durch den Slave-E/A-Thread. 
  Info: NULL 

5. Überprüfen Sie die Synchronisierung

#Führen Sie als Nächstes einige Vorgänge an der Masterdatenbank aus, um den Synchronisierungsstatus der Slavedatenbank master@localhost[(none)]> show variables like 'server_id'; zu überprüfen. 
+---------------+-------+ 
| Variablenname | Wert | 
+---------------+-------+ 
| Server-ID | 3406 | 
+---------------+-------+ 
1 Zeile im Satz (0,00 Sek.) 
 
#Der Binlog-Dump-Thread in der Master-Datenbank wird verwendet, um Binlog-Protokolldateien an die Slave-Datenbank zu senden. Die folgende Abfrage lautet master@localhost[(none)]> show processlist\G 
*************************** 1. Reihe *************************** 
   ID: 12 
  Benutzer: repl 
  Gastgeber: 192.168.1.177:57440 
   db: NULL 
Befehl: Binlog Dump 
  Zeit: 511342 
 Status: Der Master hat das gesamte Binärprotokoll an den Slave gesendet. Wartet auf die Aktualisierung des Binärprotokolls. 
  Info: NULL 
   
#Datenbank und Tabelle in der Hauptbibliothek erstellen master@localhost[(none)]> create database tempdb; 
Abfrage OK, 1 Zeile betroffen (0,01 Sek.) 
 
master@localhost[(keine)]> benutze tempdb 
Datenbank geändert 
master@localhost[tempdb]> Tabelle tb_engines erstellen als select * aus information_schema.engines; 
Abfrage OK, 9 Zeilen betroffen (0,02 Sek.) 
Datensätze: 9 Duplikate: 0 Warnungen: 0 
 
#Das Folgende ist das Ergebnis der Prüfung aus der Slave-Bibliothek slave@localhost[(none)]> select count(*) from tempdb.tb_engines; 
+----------+ 
| Anzahl(*) | 
+----------+ 
| 9 | 
+----------+ 

Vielen Dank fürs Lesen, ich hoffe, es kann Ihnen helfen, danke für Ihre Unterstützung dieser Site!

Das könnte Sie auch interessieren:
  • Das Prinzip und die Konfigurationsmethode der MySQL-Master-Slave-Replikation (ausführlicher)
  • So schreiben Sie eine SQL-Anweisung in MySQL, um den Inhalt eines Felds in einer Tabelle in ein Feld in einer anderen Tabelle zu kopieren
  • Stapelverarbeitung von Feldinhalten, Löschen, Kopieren und anderen Aktualisierungsbefehlen für MySQL-Datentabellen
  • Zusammenfassung der Methoden zum Kopieren der Tabellenstruktur in MySQL
  • MySQL SQL-Anweisungen zum Kopieren der Tabellenstruktur und des Tabelleninhalts in eine andere Tabelle
  • Tabellenreplikation in MySQL: Tabelle wie folgt erstellen und Tabelle als Auswahl erstellen
  • Implementierung der Stapelverarbeitung automatischer MySQL-Sicherungen unter Windows (Kopieren von Verzeichnissen oder mysqldump-Sicherung)
  • Tatsächlicher Betriebsfall der MySQL-Master-Slave-Replikation (Master-Slave)

<<:  Schritte zum Kapseln der Karussellkomponente in vue3.0

>>:  Führen Sie die Schritte zur Installation der Boost-Bibliothek unter Linux aus

Artikel empfehlen

Detailliertes Beispiel einer MySQL-Unterabfrage

Unterabfrageklassifizierung Klassifizierung nach ...

MySQL-Datenaggregation und -gruppierung

Wir müssen Daten häufig zusammenfassen, ohne sie ...

So ändern Sie die Master-Slave-Replikationsoptionen in MySQL online

Vorwort: Die am häufigsten verwendete Architektur...

5 Möglichkeiten, um schnell den Leerraum eines Inline-Blocks in HTML zu entfernen

Der Eigenschaftswert „Inline-Block“ ist sehr nütz...

So lösen Sie das Problem der Randüberlappung

1. Zunächst müssen Sie wissen, was den vertikalen ...

Ein kurzer Vortrag über Rx-responsive Programmierung

Inhaltsverzeichnis 1. Beobachtbar 2. Funktionen h...

...

Regeln für die Gestaltung des Anmeldeformulars

Ich habe „Patterns for Sign Up & Ramp Up“ vor ...