Detaillierte Erläuterung der Prinzipien und der Verwendung der MySQL-Master-Slave-Replikation und der Lese-/Schreibtrennung

Detaillierte Erläuterung der Prinzipien und der Verwendung der MySQL-Master-Slave-Replikation und der Lese-/Schreibtrennung

Dieser Artikel veranschaulicht anhand von Beispielen die Prinzipien und die Verwendung der MySQL-Master-Slave-Replikation und der Lese-/Schreibtrennung. Teilen Sie uns die Einzelheiten zu Ihrer Information mit:

Master-Slave-Replikation

Bildbeschreibung hier einfügen

Konzept

Operationen, welche die MySQL-A-Datenbank betreffen, werden nach ihrer Ausführung auf der Datenbank in das lokale Protokollsystem A geschrieben.
Nehmen Sie an, dass die geänderten Datenbankereignisvorgänge im Protokollsystem in Echtzeit über das Netzwerk am Port 3306 von MYSQL-A an MYSQL-B gesendet werden.
Nach dem Empfang schreibt MySQL-B es in das lokale Protokollsystem B und vervollständigt dann die Datenbankereignisse nacheinander in der Datenbank.
Wenn sich dann MySQL-A ändert, ändert sich auch MySQL-B. Dies ist die sogenannte MySQL-Replikation.
Im obigen Modell ist MYSQL-A der Masterserver und MYSQL-B der Slaveserver.
Das Protokollsystem A ist eigentlich ein Binärprotokoll im MySQL-Protokolltyp, das speziell zum Speichern aller Aktionen verwendet wird, die Datenbanktabellen ändern, nämlich das Binärprotokoll. [Beachten Sie, dass MySQL nach der Ausführung der Anweisung und vor dem Aufheben der Sperre in das Binärprotokoll schreibt, um die Transaktionssicherheit zu gewährleisten]
Das Protokollsystem B ist kein Binärprotokoll. Da es aus dem Binärprotokoll von MySQL-A kopiert wird und nicht durch eigene Datenbankänderungen generiert wird, hat es ein Relaisgefühl und wird als Relaisprotokoll bezeichnet.
Es lässt sich feststellen, dass durch den oben genannten Mechanismus die Konsistenz der Datenbankdaten von MySQL-A und MySQL-B garantiert werden kann, es jedoch definitiv zu einer Zeitverzögerung kommt, d. h. die Daten von MySQL-B hinken hinterher.
Auch ohne Berücksichtigung von Netzwerkfaktoren können die Datenbankoperationen von MYSQL-A gleichzeitig ausgeführt werden, MYSQL-B kann jedoch nur einen Eintrag aus dem Relay-Protokoll lesen und ausführen. Daher schreibt MYSQL-A häufig und MYSQL-B kann möglicherweise nicht mithalten. 】

Lösung des Problems

So verhindern Sie Datenverlust, Backup, Lese-/Schreibtrennung, Datenbank-Lastausgleich, hohe Verfügbarkeit

Umweltkonstruktion

1. Bereiten Sie die Umgebung vor. Die IP-Adressen der beiden Windows-Betriebssysteme lauten: 172.27.185.1 (Master) und 172.27.185.2 (Slave)
2. Stellen Sie eine Verbindung zum Master-Dienstserver (172.27.185.1) her und weisen Sie dem Slave-Knoten Kontoberechtigungen zu.
GRANT REPLICATION SLAVE ON . AN ‚root‘@‚172.27.185.2‘ IDENTIFIZIERT DURCH ‚root‘;
3. Fügen Sie in der Hauptdienstdatei my.ini hinzu

Server-ID = 200
log-bin=mysql-bin
Relay-Log = Relay-Bin
Relay-Log-Index = Relay-Bin-Index

Starten Sie den MySQL-Dienst neu
4. Fügen Sie dem Slave-Dienst die Datei my.ini hinzu

Server-ID = 210
replicate-do-db =itmayiedu #Datenbanksynchronisierung erforderlich

Starten Sie den MySQL-Dienst neu
5. Synchronisieren Sie die Masterdatenbank vom Dienst

Sklave stoppen;
ändern
Master zu Master_Host='172.27.185.1', ​​Master_Benutzer='root', Master_Passwort='root';
Slave starten;
Slave-Status anzeigen;

Hinweise: ① Stellen Sie sicher, dass Sie sich im selben LAN befinden ② Verwenden Sie 360WiFi, um ein LAN zu erstellen ③ Schalten Sie am besten alle Firewalls aus

Was ist Lese-/Schreibtrennung?

In der Datenbankclusterarchitektur ist die Masterdatenbank für die Verarbeitung von Transaktionsabfragen verantwortlich, während die Slavedatenbank nur für die Verarbeitung ausgewählter Abfragen verantwortlich ist, sodass die Arbeitsteilung zwischen den beiden klar ist und die allgemeine Lese- und Schreibleistung der Datenbank verbessert. Eine weitere Funktion der Masterdatenbank besteht natürlich darin, durch Transaktionsabfragen verursachte Datenänderungen an die Slavedatenbank zu synchronisieren, was den Schreibvorgang darstellt.

Vorteile der Lese-/Schreibtrennung

1) Teilen Sie den Serverdruck und verbessern Sie die Systemverarbeitungseffizienz der Maschine. Die Trennung von Lesen und Schreiben eignet sich für Szenarien, in denen das Lesen das Schreiben bei weitem überwiegt. Wenn es einen Server mit vielen Auswahlen gibt, werden Aktualisierung und Löschen durch die von diesen Auswahlen abgerufenen Daten blockiert und warten auf das Ende der Auswahl. Die Parallelitätsleistung ist nicht hoch. Master und Slave sind nur für ihre eigenen Schreib- und Lesevorgänge verantwortlich, was den Konflikt um X- und S-Sperren erheblich verringert.
Nehmen wir an, dass wir 1 Master und 3 Slaves haben, ignorieren die einseitige Einstellung der Slave-Bibliothek, die oben unter 1 erwähnt wurde, und nehmen wir an, dass in 1 Minute 10 Schreibvorgänge und 150 Lesevorgänge stattfinden. Dann entsprechen 1 Master und 3 Slaves insgesamt 40 Schreibvorgängen, während die Gesamtzahl der Lesevorgänge unverändert bleibt, so dass jeder Server im Durchschnitt für 10 Schreibvorgänge und 50 Lesevorgänge verantwortlich ist (die Masterdatenbank führt keine Lesevorgänge durch). Obwohl die Schreibvorgänge unverändert bleiben, werden die Lesevorgänge stark verteilt, was die Systemleistung verbessert. Darüber hinaus wird durch die Amortisierung des Lesens indirekt auch die Schreibleistung verbessert. Daher wurde die Gesamtleistung verbessert. Um es klar auszudrücken: Es bedeutet, dass Maschinen und Bandbreite gegen Leistung eingetauscht werden.
2) Erhöhen Sie die Redundanz und verbessern Sie die Serviceverfügbarkeit. Wenn ein Datenbankserver ausfällt, kann ein anderer Slave so eingestellt werden, dass der Service so schnell wie möglich wiederhergestellt wird.

Master-Slave-Replikationsprinzip

Hängt vom Binärlog ab, Binärlog.
Das Binärlog zeichnet die Anweisungen auf, die Änderungen an der Datenbank verursachen
Einfügen, Löschen, Aktualisieren, Tabelle erstellen

Unterschied zwischen Scale-Up und Scale-Out

Scale Out bedeutet, dass die Anwendung horizontal erweitert werden kann. Im Allgemeinen bedeutet Scale-Out bei Rechenzentrumsanwendungen, dass die Anwendung auch beim Hinzufügen weiterer Maschinen die Ressourcen dieser Maschinen weiterhin gut nutzen kann, um ihre Effizienz zu verbessern und eine gute Skalierbarkeit zu erreichen.
Scale Up bedeutet, dass die Anwendung in vertikaler Richtung erweitert werden kann. Im Allgemeinen bedeutet Scale-Up für eine einzelne Maschine, dass die Anwendung diese Ressourcen voll ausnutzen kann, um ihre Effizienz zu verbessern und eine gute Skalierbarkeit zu erreichen, wenn ein Rechenknoten (eine Maschine) weitere CPU-Kerne und Speichergeräte hinzufügt und einen größeren Arbeitsspeicher verwendet.

MeineKatze

Was ist Mycat

Es handelt sich um ein verteiltes Open-Source-Datenbanksystem. Da Datenbanken jedoch im Allgemeinen über eigene Datenbank-Engines verfügen und Mycat keine eigene Datenbank-Engine besitzt, kann es im strengen Sinne nicht als vollständiges Datenbanksystem betrachtet werden. Man kann es lediglich als eine Middleware bezeichnen, die als Brücke zwischen Anwendungen und Datenbanken fungiert.
Wenn Sie vor dem Aufkommen der Mycat-Middleware eine Lese-/Schreibtrennung im MySQL-Master-/Slave-Replikationscluster erreichen wollten, taten Sie dies normalerweise im Programmsegment. Dies brachte ein Problem mit sich, nämlich die Kopplung zwischen dem Datensegment und dem Programm war zu hoch. Wenn sich die Adresse der Datenbank ändert, muss mein Programm entsprechend geändert werden. Wenn die Datenbank versehentlich hängt, bedeutet dies auch, dass das Programm nicht verfügbar ist, was für viele Anwendungen inakzeptabel ist.

Durch die Einführung der Mycat-Middleware können Programm und Datenbank effektiv entkoppelt werden. Auf diese Weise muss das Programm nur auf die Adresse der Datenbank-Middleware achten, ohne zu wissen, wie die zugrunde liegende Datenbank Dienste bereitstellt. Eine große Anzahl gängiger Datenaggregationen, Transaktionen, Datenquellenwechsel und anderer Aufgaben werden von der Middleware übernommen.
Das Prinzip der Mycat-Middleware besteht darin, die Daten zu sharden. Ausgehend von der ursprünglichen Datenbank werden sie in mehrere Shard-Datenbanken aufgeteilt. Alle Shard-Datenbankcluster bilden den vollständigen Datenbankspeicher, der RAID0 im Festplattenarray ähnelt.

Mycat-Installation

Tabellenstruktur erstellen

Datenbank erstellen, falls „weibo_simple“ nicht vorhanden ist;
--------------------------------------
-- Tabellenstruktur für die Benutzertabelle „t_users“-- ------------------------------------
Tabelle löschen, wenn `t_users` vorhanden ist;
Tabelle „t_users“ erstellen (
 `user_id` varchar(64) NOT NULL COMMENT 'Registrierte Benutzer-ID',
 `user_email` varchar(64) NOT NULL COMMENT 'E-Mail des registrierten Benutzers',
 `user_password` varchar(64) NOT NULL COMMENT 'Passwort des registrierten Benutzers',
 `user_nikename` varchar(64) NOT NULL COMMENT 'Spitzname des registrierten Benutzers',
 `user_creatime` datetime NOT NULL COMMENT 'Registrierungszeit',
 `user_status` tinyint(1) NOT NULL COMMENT 'Verifizierungsstatus 1: verifiziert 0: nicht verifiziert',
 `user_deleteflag` tinyint(1) NOT NULL COMMENT 'Löschmarkierung 1: gelöscht 0: nicht gelöscht',
 PRIMÄRSCHLÜSSEL (`user_id`)
)ENGINE=InnoDB STANDARD-CHARSET=utf8;

-- -------------------------------------
-- Tabellenstruktur für die Microblog-Tabelle „t_message“-- -------------------------------------
Tabelle löschen, wenn `t_message` vorhanden ist;
Tabelle „t_message“ erstellen (
 `messages_id` varchar(64) NICHT NULL KOMMENTAR 'Weibo ID',
 `user_id` varchar(64) NOT NULL COMMENT 'Postender Benutzer',
 `messages_info` varchar(255) DEFAULT NULL COMMENT 'Weibo-Inhalt',
 `messages_time` datetime DEFAULT NULL COMMENT 'Veröffentlichungszeitpunkt',
 `messages_commentnum` int(12) DEFAULT NULL COMMENT 'Anzahl der Kommentare',
 `message_deleteflag` tinyint(1) NOT NULL COMMENT 'Löschmarkierung 1: gelöscht 0: nicht gelöscht',
 `message_viewnum` int(12) DEFAULT NULL COMMENT 'Anzahl der Ansichten',
 PRIMÄRSCHLÜSSEL (`messages_id`),
 SCHLÜSSEL `user_id` (`user_id`),
 EINSCHRÄNKUNG `t_message_ibfk_1` FREMDER SCHLÜSSEL (`user_id`) REFERENZEN `t_users` (`user_id`)
)ENGINE=InnoDB STANDARD-CHARSET=utf8;

Konfigurieren Sie server.xml

	<!-- Benutzer hinzufügen -->
  <Benutzername="mycat">
  <property name="password">mycat</property>
  <Eigenschaftsname="schemas">mycat</Eigenschaft>
  </Benutzer>
	
	<!-- Benutzer hinzufügen -->
  <Benutzername="mycat_red">
  <property name="password">mycat_red</property>
  <Eigenschaftsname="schemas">mycat</Eigenschaft>
	<Eigenschaftsname="readOnly">wahr</Eigenschaft>
  </Benutzer>

Konfigurieren von schema.xml

<?xml version="1.0"?>
<!DOCTYPE mycat:schema SYSTEM "schema.dtd">
<mycat:schema xmlns:mycat="http://org.opencloudb/">
  <!-- Gleich wie der Schemaname des Benutzers in server.xml -->
  <schema name="mycat" checkSQLschema="true" sqlMaxLimit="100">
    <table name="t_users" primaryKey="Benutzer-ID" dataNode="dn1" rule="Regel1"/>
   
    <table name="t_message" type="global" primaryKey="messages_id" dataNode="dn1" />
  </schema>
<dataNode name="dn1" dataHost="jdbchost" database="weibo_simple


" />
  
  <dataHost name="jdbchost" maxCon="1000" minCon="10" balance="1"
        Schreibtyp = "0" Datenbanktyp = "mysql" Datenbanktreiber = "native" Schaltertyp = "1"
        SlaveThreshold="100">
     <heartbeat>Benutzer auswählen()</heartbeat> 
    <writeHost host="hostMaster" url="172.27.185.1:3306" Benutzer="root" Passwort="root">
    </writeHost>
    <writeHost host="hostSlave" url="172.27.185.2:3306" Benutzer="root" Passwort="root"/>
  </dataHost>
  
</mycat:schema>

Konfigurieren der Datei „rule.xml“

<?xml version="1.0" encoding="UTF-8"?>
<!-- - - Lizenziert unter der Apache-Lizenz, Version 2.0 (die „Lizenz“); 
	– Sie dürfen diese Datei nur in Übereinstimmung mit der Lizenz verwenden. 
	Sie können eine Kopie der Lizenz unter - - http://www.apache.org/licenses/LICENSE-2.0 erhalten. 
	- - Sofern nicht gesetzlich vorgeschrieben oder schriftlich vereinbart, Software - 
	Die unter der Lizenz vertriebenen Produkte werden „WIE BESEHEN“ vertrieben, - OHNE 
	GARANTIEN ODER BEDINGUNGEN JEGLICHER ART, weder ausdrücklich noch stillschweigend. - Siehe die 
	Lizenz für die jeweilige Sprache, die Berechtigungen und Einschränkungen regelt 
	unter der Lizenz. -->
<!DOCTYPE mycat:regel SYSTEM "regel.dtd">
<mycat:rule xmlns:mycat="http://org.opencloudb/">
	 <tableRule name="regel1">
    <Regel>
      <columns>Benutzer-ID</columns>
      <Algorithmus>Funktion1</Algorithmus>
    </Regel>
  </tableRule>
  <Funktionsname="func1" Klasse="org.opencloudb.route.function.AutoPartitionByLong">
 	<Eigenschaftsname="Kartendatei">autopartition-long.txt</Eigenschaftsname>
  </Funktion>
</mycat:regel>

Um Fehler besser zu lokalisieren, ändern Sie log4j.xml

Doppelklicken Sie startup_nowrap.bat, um zu starten

Häufig gestellte Fragen
SHOW MASTER STATUS Wenn ja, fügen Sie der Datei my.ini eine Zeile hinzu
log-bin=mysql-bin

Zuweisen von Berechtigungen zu Konten
grant all privileges on . to 'root'@'172.27.185.1' identified by 'root';

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:
  • Detaillierte Erläuterung der Konfigurationsmethode der Lese-/Schreibtrennung bei der MySQL-Master-Slave-Replikation
  • Detaillierte Erläuterung der Konstruktion der Lese-/Schreibtrennung bei der MySQL-Master-Slave-Replikation
  • Detaillierte Erläuterung der MySQL Master-Slave-Replikation, Lese-/Schreibtrennung, Sicherung und Wiederherstellung
  • MySQL-Datenbank-Master-Slave-Replikation und Lese-/Schreibtrennung

<<:  Detaillierte Diskussion der Unterschiede zwischen Schleifen in JavaScript

>>:  VMware vSAN - Zusammenfassung der ersten Schritte

Artikel empfehlen

Detaillierte Schritte zur Installation von MySql 5.7.21 unter Linux

Vorwort Die am häufigsten verwendete Datenbank in...

Der gesamte Prozessbericht der Vue-Exportfunktion für Excel

Inhaltsverzeichnis 1. Front-End-Führungsprozess: ...

Detailliertes Tutorial zum Ausführen von Selenium+Chromedriver auf dem Server

1. Einleitung Ich möchte Selenium verwenden, um D...

Detaillierte Schritte zum Löschen von Umgebungsvariablen in Linux

Wie lösche ich Umgebungsvariablen unter Linux? Ve...

Detaillierte Erklärung des Unterschieds zwischen CSS-Link und @import

Wie fügt man CSS in HTML ein? Es gibt drei Möglic...

Lösung zum Vergessen des Administratorkennworts der MySQL-Datenbank

1. Geben Sie den Befehl mysqld --skip-grant-table...

So schreiben Sie DROP TABLE in verschiedene Datenbanken

So schreiben Sie DROP TABLE in verschiedene Daten...

Installation von Docker CE auf Ubuntu

Dieser Artikel dient zur Aufzeichnung der Install...