Vorwort Die MySQL Master-Slave-Replikation ist die Grundlage für die Erzielung einer hohen Leistung und Verfügbarkeit von Anwendungen. Bei Anwendungen mit intensiven Datenbank-Lesevorgängen kann der Datenbankdruck durch die Lastverteilung der Datenbankanforderungen auf verschiedene MySQL-Server effektiv reduziert werden. Wenn in MySQL ein einzelner Punktfehler auftritt, kann innerhalb kurzer Zeit ein Failover durchgeführt werden. Dieser Artikel erläutert die integrierte Replikationsfunktion von MySQL. Version
Überblick MySQL-Replikationsdatenprozess:
Konfigurieren Sie die Master-Slave-Bibliothek Hauptbibliothek my.cnf-Konfiguration Aktivieren Sie die binäre Protokollierung in der my.cnf-Datei der Masterdatenbank und legen Sie die Service-ID fest. log-bin = mysql-bin Server-ID = 1 Beachten Sie, dass die Server-ID eine eindeutige Nummer sein muss, zwischen Master und Slave unterschiedlich sein muss und für die Master- und Slave-Datenbanken festgelegt werden muss. Konfigurieren aus der Bibliothek my.cnf log-bin = mysql-bin Server-ID = 2 log-slave-updates = 1 schreibgeschützt = 1 Die Slave-Bibliothek öffnet außerdem log-bin und setzt log-slave-updates, um die Relay-Protokolle in ihrem eigenen Binärprotokoll aufzuzeichnen, wenn die Slave-Bibliothek sie wiedergibt. Dadurch kann die Slave-Bibliothek als Master-Bibliothek für andere Server dienen und die Binärprotokolle an andere Slave-Bibliotheken weiterleiten. Diese Lösung kann bei einer Ein-Master-Mehrere-Slave-Lösung in Betracht gezogen werden. Dockerfile erstellt MySQL-Image Erstellen Sie die erforderlichen Dateien Hier werden die Master- und Slave-Dateien separat gespeichert und nicht gemeinsam genutzt. Erstellen Sie zuerst den Ordner /usr/local/mysql, erstellen Sie dann zwei Verzeichnisse, Master und Slave, im Verzeichnis und erstellen Sie dann für jedes einen Datenordner.
Dockerfile-Inhalt # Erstellen Sie ein neues Bild mit dem MySQL-Bild FROM mysql:5.7.17 ENV MYSQL_ROOT_PASSWORD ytao KOPIEREN Sie start.sh /mysql/start.sh KOPIEREN Sie my.cnf /etc/mysql/my.cnf KOPIEREN Sie init.sql /mysql/init.sql EXPOSE 3306 CMD ["sh", "/mysql/start.sh"] Master und Slave werden hierbei auf Basis desselben Images erstellt und auch die verwendete Speicher-Engine und weitere Komponenten sollten identisch sein, da es sonst beim Replikationsprozess zu Ausnahmen kommen kann. init.sql initialisiert Daten - Erstellen Sie eine data_copy-Datenbank. DROP DATABASE, WENN „data_copy“ EXISTIERT; DATENBANK ERSTELLEN `data_copy` /*!40100 STANDARDZEICHENSATZ utf8mb4 sortieren utf8mb4_general_ci */; -- Personentabelle erstellen. VERWENDEN SIE „data_copy“. Tabelle löschen, wenn `Person` vorhanden ist; CREATE TABLE `Person` ( `id` int(32) NICHT NULL, `name` varchar(255) DEFAULT NULL, PRIMÄRSCHLÜSSEL (`id`) )ENGINE=InnoDB STANDARD-CHARSET=utf8mb4; Erstellen Sie die data_copy-Datenbank und die person-Tabelle. start.sh-Skript #!/bin/sh echo 'MySQL starten' Dienst MySQL starten Schlaf 5 echo 'Datenbank initialisieren' mysql -uroot -pytao < /mysql/init.sql echo 'Initialisierung abgeschlossen! ' tail -f /dev/null Erstellen Sie die Master- und Slave-Images und führen Sie die Container aus Erstellen des Masterimages docker build -t master/mysql. Slave-Image erstellen Docker-Build -t Slave/MySQL. Wenn der Build erfolgreich ist, wird Successfuly zurückgegeben, oder Sie können das Image über den Befehl docker images anzeigen. Führen Sie den Container mit dem soeben erstellten Image aus # Master-Container Docker ausführen --name master -p 3306:3306 -v /usr/local/mysql/master/data/:/var/lib/mysql -d master/mysql # Slave-Container Docker ausführen --name Slave -p 3307:3306 -v /usr/local/mysql/slave/data/:/var/lib/mysql -d Slave/mysql Geben Sie den Master-Port als 3306 und den Slave-Port als 3307 an und mounten Sie das Datenverzeichnis als das Verzeichnis, in dem die Daten gespeichert sind. Überprüfen Sie nach dem Herstellen der Verbindung zur Datenbank, ob die Datenbank erfolgreich initialisiert wurde Überprüfen Sie, ob Log-Bin aktiviert ist Erstellen eines Replikationskontos Wie bereits erwähnt, muss der Slave-E/A-Thread eine Verbindung mit dem Master herstellen, sodass zur Überprüfung ein Konto erforderlich ist. Zusätzlich zur Verbindungsberechtigung (REPLICATION CLIENT) muss das Konto auch über die Replikationsberechtigung (REPLICATION SLAVE) verfügen. GRANT REPLICATION CLIENT, REPLICATION SLAVE ON *.* AN muser@'%' IDENTIFIZIERT DURCH 'ytao'; Die hier eingestellte Zugangsadresse ist offen. Aus Sicherheitsgründen müssen Sie bei der tatsächlichen Nutzung die Zugangsadresse angeben. Beginnen Sie mit dem Kopieren aus dem Repository Verbinden Sie die Slave-Datenbank mit der Master-Datenbank, rufen Sie das Binärprotokoll ab und spielen Sie es erneut ab. Hier müssen wir zunächst den oben erstellten Account für die Verbindung konfigurieren und mit dem Befehl die entsprechenden Einstellungen vornehmen. ÄNDERN SIE MASTER IN MASTER_HOST = '47.107.xx.xxx', MASTER_PORT = 3306, MASTER_USER = 'muser', MASTER_PASSWORD = "ytao", MASTER_LOG_FILE = "mysql-bin.000006"; Zu diesem Zeitpunkt wurde der Kopiervorgang noch nicht gestartet, Sie müssen ihn also erneut aus der Bibliothek starten SLAVE STARTEN; Verwenden Sie Die oben mit „Slave_IO_Running: Yes“ und „Slave_SQL_Running: Yes“ gekennzeichneten Ausgabeinformationen zeigen an, dass der I/O-Thread und der SQL-Thread gestartet wurden und ausgeführt werden. Testen der Synchronisationsdaten Wenn Daten in der Masterdatenbank hinzugefügt, aktualisiert oder gelöscht werden, sollte die Slavedatenbank auch entsprechende Datenänderungen an der Masterdatenbank vornehmen. Fügen Sie der Hauptdatenbank Daten hinzu INSERT INTO `data_copy`.`person` (`id`, `name`) VALUES ('1', 'ytao'); Fragen Sie die Slave-Datenbankdaten ab, die Daten wurden synchronisiert. Zusammenfassen Das Obige ist die einfachste und grundlegendste Konfiguration. Wenn Sie jedoch den obigen Konfigurationsprozess verstehen, können Sie verschiedene Lösungen entsprechend Ihrer eigenen Situation anpassen, einen Master und mehrere Slaves, Master-Master-Replikation (Aktiv-Aktiv- oder Aktiv-Passiv-Modus) usw. implementieren, um Ihren eigenen Anforderungen gerecht zu werden. Obwohl die MySQL-Replikation einfach und bequem zu verwenden ist, bringt sie auch einige Probleme mit sich, die wir während der Verwendung lösen müssen, z. B.: Unfähigkeit zur Wiederherstellung nach einem abnormalen Server-Shutdown, Verzögerungen bei der Datensynchronisierung usw. Glücklicherweise wurden die meisten der inzwischen aufgetretenen Probleme in der Branche entsprechend gelöst. Wer sich für diesen Aspekt interessiert, kann sich über die Middleware-Implementierungslösungen informieren, die diese Probleme derzeit lösen. Das ist alles für diesen Artikel. Ich hoffe, dass der Inhalt dieses Artikels für Ihr Studium oder Ihre Arbeit von gewissem Referenzwert ist. Vielen Dank für Ihre Unterstützung von 123WORDPRESS.COM. Das könnte Sie auch interessieren:
|
<<: So verwenden Sie JavaScript, um mehrere gängige Browser über userAgent zu bestimmen
>>: MySQL implementiert eine Lösung ähnlich der Oracle-Sequenz
JavaScript kann viele tolle Dinge. Dieser Artikel...
Ohne weitere Umschweife werde ich den Code direkt...
Hintergrund Ich habe mit meinen Klassenkameraden ...
Mysql ist eine beliebte und einfach zu bedienende...
Wenn wir das Platzhalterzeichen „like %“ verwende...
Ziehen Sie einfach das Image, erstellen Sie einen...
Vorwort Normale Benutzer definieren geplante Cron...
Inhaltsverzeichnis 1. Grundlegende Verwendung von...
Vorwort Gestern gab es ein Projekt, das die Imple...
1. CSS-Hintergrund-Tag 1. Stellen Sie die Hinterg...
Griechische Buchstaben sind eine sehr häufig verw...
Inhaltsverzeichnis 1. Zeigen Sie die Speicher-Eng...
Die Wirkung ist wie folgt: analysieren 1. Hier se...
<br />Vorwort: Bevor Sie dieses Tutorial les...
Schritte zum Konfigurieren des Whitelist-Zugriffs...