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
Inhaltsverzeichnis 1. MySQL-Joinpuffer 2. JoinBuf...
Inhaltsverzeichnis Erster Schritt: Der zweite Sch...
Inhaltsverzeichnis Überblick Was ist die O-Notati...
Für Container ist die einfachste Integritätsprüfu...
Inhaltsverzeichnis 1.0 Einleitung 2.0 Docker-Inst...
Ursprünglicher Link https://github.com/XboxYan/no...
Finden Sie das Problem Ich habe vor Kurzem Django...
Vorwort Zu den logischen Urteilsaussagen, die wir...
Inhaltsverzeichnis Überblick 1. Stapeln und Aufhä...
Nginx wurde in der Programmiersprache C entwickel...
Funktionen von SSHFS: Basierend auf FUSE (dem bes...
Es ist sehr einfach, Daten und Tabellen in MySQL ...
1. Entpacken Sie das heruntergeladene MySQL-Kompr...
Inhaltsverzeichnis Alle Speicher-Engines anzeigen...
In diesem Artikel wird der spezifische JavaScript...