Dieser Artikel veranschaulicht anhand von Beispielen die Prinzipien und Praktiken der MySQL Master-Slave-Replikation. Teilen Sie uns die Einzelheiten zu Ihrer Information mit: EinführungDie MySQL Master-Slave-Replikation wird auch Replikation und AB-Replikation genannt. Es sind mindestens zwei MySQL-Server erforderlich (sie können sich auf derselben oder auf verschiedenen Maschinen befinden). Wirkung
Prinzip1. Der MySQL-Dienst des Masterservers zeichnet alle Schreibvorgänge im Binlog-Protokoll auf, generiert einen Protokoll-Dump-Thread und übergibt das Binlog-Protokoll an den E/A-Thread des MySQL-Dienstes des Slaveservers. Notiz: - Master-Slave-Replikation ist eine asynchrone und logische Replikation auf SQL-Anweisungsebene; – Während der Replikation verfügt der Master über einen E/A-Thread und der Slave über zwei Threads, den E/A- und den SQL-Thread. – Die notwendige Voraussetzung für die Implementierung der Master-Slave-Replikation ist, dass die Masterdatenbank die Binlog-Funktion aktivieren muss. - Die Server-ID aller als Replikation verwendeten MySQL-Knoten kann nicht dieselbe sein; - Die Binärlogdatei zeichnet nur SQL-Anweisungen auf, die den Dateninhalt ändern, und zeichnet keine Abfrageanweisungen auf. bildenEin Master und ein SlaveMaster-Master-ReplikationEin Herr, viele SklavenMehrere Master und ein Slave (unterstützt ab 5.7)Kaskadierende ReplikationübenbrauchenImplementieren Sie einen Master-Slave-Replikationsmodus, zwei MySQL-Instanzen auf demselben Host UmfeldMac: 10.15.1 Docker: 2.0.0.3 // Die Verwendung von Docker zur Installation von MySQL dient hauptsächlich der einfachen Verwaltung und Wartung, der unabhängigen IP und dem sekundenschnellen Start MySQL-Master: 5.7.29 // Hauptserver MySQL-Master-IP: 172.17.0.3 MySQL-Slave: 5.7.29 // MySQL-Slave-IP vom Server: 172.17.0.4 SchrittSchritt 1: Zwei MySQL-Server vorbereitenmysql-master (Masterserver): 1. Erstellen Sie die Verzeichnisstruktur: Master/Conf, Master/Daten, Master/Protokolle 2. Starten Sie den laufenden Instanzcontainer: docker run --name mysql-master > -p 3310:3306 > -v ~/docker/master/conf:/etc/mysql/conf.d > -v ~/docker/master/data:/var/lib/mysql > -v ~/docker/master/logs:/var/log/mysql > -e MYSQL_ROOT_PASSWORD=123456 > -d mysql:5.7 3. Geben Sie den Container docker exec -it mysql-master bash ein 4. Melden Sie sich bei MySQL an mysql -uroot -p mysql-slave (Slave-Server): 1. Erstellen Sie die Verzeichnisstruktur: Slave/Conf, Slave/Daten, Slave/Protokolle 2. Starten Sie den laufenden Instanzcontainer: docker run --name mysql-slave > -p 3310:3306 > -v ~/docker/slave/conf:/etc/mysql/conf.d > -v ~/docker/slave/data:/var/lib/mysql > -v ~/docker/slave/logs:/var/log/mysql > -e MYSQL_ROOT_PASSWORD=123456 > -d mysql:5.7 3. Geben Sie den Container docker exec -it mysql-slave bash ein 4. Melden Sie sich bei MySQL an mysql -uroot -p Schritt 2: Ändern der Konfigurationsdatei (my.cnf)Primärer Server: [mysqld] Port = 3306 Server-ID = 1 #Zu synchronisierende Datenbank binlog-do-db = Schule #Um binäre Protokolldateien zu generieren, muss der Masterserver log-bin = mysql-bin aktivieren MySQL neu starten: docker restart mysql-master Vom Server: [mysqld] Port = 3306 Server-ID = 2 #Zu synchronisierende Datenbank binlog-do-db = Schule #Um binäre Logdateien zu erzeugen (optional vom Server) log-bin = mysql-bin MySQL neu starten: docker restart mysql-slave Schritt 3: Erstellen eines Masterserver-Replikationsbenutzers und der zugehörigen BerechtigungenBenutzer „Slave“@„%“ erstellen, identifiziert durch „123456“; //Benutzerberechtigung für Replikations-Slave erstellen, Replikationsclient auf *.* auf „Slave“@„%“; //Benutzerberechtigungen festlegen, Berechtigungen leeren; //Berechtigungen aktualisieren, Berechtigungen für „Slave“@„%“ anzeigen; //Benutzerberechtigungen anzeigen Schritt 4: Datensicherung und Synchronisation1. Melden Sie sich beim Master an und führen Sie den Sperrtabellenvorgang mysql -uroot -p aus FLUSH-TABELLEN MIT LESE-SPERRE; 2. Dumpen Sie die Daten der Datenbank, die im Master synchronisiert werden muss: mysqldump -uroot -p school > school.dump 3. Daten in den Slave importieren mysql -uroot -h172.17.0.4 -p Schule < Schule.dump 4. Entsperren Sie den Master TABELLEN ENTSPERREN; Schritt 5: Replikationsstatus des Masterservers1. Erstellen Sie eine neue Datentabelle und fügen Sie Daten hinzu. create table user( id int(10) auto_increment, name varchar(30), primary key (id) )charset=utf8mb4; in Benutzer(name)-Werte einfügen (222); 2. Binärprotokoll des Masterservers zeichnet den Status mysql auf > Masterstatus anzeigen; +------------------+----------+--------------+------------------+-------------------+ | Datei | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set | +------------------+----------+--------------+------------------+-------------------+ | mysql-bin.000001 | 769 | Schule | | | +------------------+----------+--------------+------------------+-------------------+ Schritt 6: Kopieren vom Server starten1. Verbinden Sie sich mit dem Master-Server und legen Sie den Startknoten für die Replikation fest mysql> ändern Sie master in master_host='172.17.0.3', -> Master-Port = 3306, -> Master-Benutzer = "Sklave", -> Master-Passwort = '123456', -> master_log_file='mysql-bin.000001', -> master_log_pos=769; 2. Replikation starten, Slave starten; 3. Überprüfen Sie den Replikationsstatus mysql> show slave status \G *************************** 1. Reihe *************************** Slave_IO_State: Wartet darauf, dass der Master ein Ereignis sendet Master_Host: 172.17.0.3 Master_User: Sklave Master_Port: 3306 Verbindungswiederholung: 60 Master_Log_File:mysql-bin.000001 Read_Master_Log_Pos: 961 Relay_Log_File: 87dc5224655d-relay-bin.000003 Relay_Log_Pos: 320 Relay_Master_Log_File: mysql-bin.000001 Slave_IO_Running: Ja //Zeigt an, dass der E/A-Thread erfolgreich liest. Slave_SQL_Running: Ja //Zeigt an, dass der SQL-Thread erfolgreich ausgeführt wird. 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: 961 Relay_Log_Space: 892 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: 45540733-4e0c-11ea-b0ac-0242ac110003 Master_Info_Datei: /var/lib/mysql/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: 4. Zeigen Sie die Datentabelle datamysql> show create table user\G an *************************** 1. Reihe *************************** Tabelle: Benutzer Tabelle erstellen: CREATE TABLE `user` ( `id` int(10) NICHT NULL AUTO_INCREMENT, `name` varchar(30) DEFAULT NULL, PRIMÄRSCHLÜSSEL (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8mb4 mysql> wähle * vom Benutzer aus; +----+------+ | Ich würde | Name | +----+------+ | 1 | 222 | +----+------+ Mit der Kopiersteuerung verbundene Befehle: stop salve //Slave-Verbindung stoppen reset slave //Slave-Verbindung zurücksetzen start slave //Slave-Verbindung öffnen stop master //Master-Verbindung stoppen reset master //Master-Verbindung zurücksetzen start master //Master-Verbindung öffnen Schritt 7: Überprüfen Sie den Prozess der Master- und Slave-ServerMySQL-Master: MySQL-Slave: Leser, die an weiteren MySQL-bezogenen Inhalten interessiert sind, können sich die folgenden Themen auf dieser Site ansehen: „MySQL-Abfragekenntnisse“, „Zusammenfassung der allgemeinen MySQL-Funktionen“, „MySQL-Protokolloperationskenntnisse“, „Zusammenfassung der MySQL-Transaktionsoperationskenntnisse“, „MySQL-gespeicherte Prozedurkenntnisse“ und „Zusammenfassung der MySQL-Datenbanksperrenkenntnisse“. Ich hoffe, dass dieser Artikel für jedermann beim Entwurf einer MySQL-Datenbank hilfreich ist. Das könnte Sie auch interessieren:
|
<<: vue3.0 + echarts realisiert dreidimensionales Säulendiagramm
>>: Zusammenfassung von Beispielen gängiger Methoden von JavaScript-Arrays
#include <asm/io.h> #define ioremap(Cookie,...
In diesem Artikelbeispiel wird der spezifische Co...
Awk ist ein leistungsfähiges Tool, das einige Auf...
Bei der Suchmaschinenoptimierung (SEO) sind viele ...
1. Einreihiger Überlauf 1. Wenn eine einzelne Zei...
Ich habe vor Kurzem Front-End- und Back-End-Techn...
1. Umgebung und Vorbereitung 1. Ubuntu 14.04 2.Do...
Suchen Sie die Container-ID von Tomcat und rufen ...
Wenn Sie Schaltflächen (Eingabe, Schaltfläche) sch...
01. Übersicht Absolute und relative Pfade kommen ...
Inhaltsverzeichnis 1. Prinzipübersicht Query Cach...
Inhaltsverzeichnis Hintergrund Problemanalyse 1. ...
Dieser Artikel veranschaulicht anhand von Beispie...
Wie kann ich überprüfen, ob die Zeitzone des Dock...
Inhaltsverzeichnis Einführung Vier Merkmale von T...