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 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:
|
<<: Schritte zum Kapseln der Karussellkomponente in vue3.0
>>: Führen Sie die Schritte zur Installation der Boost-Bibliothek unter Linux aus
Unterabfrageklassifizierung Klassifizierung nach ...
Wir müssen Daten häufig zusammenfassen, ohne sie ...
Vorwort: Die am häufigsten verwendete Architektur...
MySQL 5.7.17, scheint jetzt die neueste Version z...
Dieser Artikel stellt hauptsächlich ein Beispiel ...
Der Eigenschaftswert „Inline-Block“ ist sehr nütz...
Vorwort Ich habe einen alten Laptop mit Win7. Um ...
1. Zunächst müssen Sie wissen, was den vertikalen ...
Mobile Mobile Seiten müssen nur mit Chrome und Sa...
Inhaltsverzeichnis 1. Beobachtbar 2. Funktionen h...
Ich habe „Patterns for Sign Up & Ramp Up“ vor ...
WIN10 64-Bit installieren Sie das neueste MySQL8....
Das Unternehmen hat kürzlich einen DELL R730-Serv...
Entwicklungsumgebungsfenster Entwicklungstools Vi...