MySQL-Replikation ist eine interessante Funktion, mit der Benutzer mehrere Kopien einer oder mehrerer MySQL-Datenbanken verwalten können. Die Daten werden automatisch von Quell- auf Replika-datenbanken kopiert. Dies kann in zahlreichen Situationen nützlich sein, z. B. beim Arbeiten mit den Daten, ohne die Hauptdatenbank zu gefährden, bei der Datensicherung oder bei der Skalierung des Datenbankzugriffs usw.
In dieser Anleitung werden wir die Schritte zur Einrichtung einer MySQL-Instanz auf einem Server als Quelldatenbank durchgehen und anschließend eine MySQL-Instanz auf einem anderen Server so konfigurieren, dass sie als deren Replika fungiert.
Voraussetzungen
Diese Anleitung zeigt ein sehr einfaches Beispiel für eine MySQL-Replikation. Sie umfasst eine Quell- und eine Replika-datenbank. Die Quell-datenbank ist die primäre Kopie der Datenbank, während die Replika-datenbank die Replika der Quell-datenbank sein wird. Für unsere Demonstration sind zwei Server mit den folgenden IP-Adressen konfiguriert:
- Quellserver: 31.171.240.179
- Replika-Server: 31.171.250.139
Jeder Server ist mit der neuesten Ubuntu 20.04 Server-Konfiguration konfiguriert. Befolgen Sie zunächst die Schritte des Tutorials, die zeigen, wie Sie Ihren Ubuntu-Server einrichten. Beachten Sie, dass die Anzahl der Replika-Datenbanken auch größer sein kann. Diese Anleitung setzt voraus, dass Sie MySQL bereits installiert und konfiguriert haben. Benötigen Sie Hilfe bei der MySQL-Installation? Diese Anleitung zeigt ausführlich die Schritte zur MySQL-Installation und grundlegenden Verwendung.
Kurz gesagt, hier sind die Pakete, die Sie benötigen:
|
1 |
$ sudo apt install mysql-server mysql-client |
Die Firewalls auf beiden Systemen sollten so konfiguriert sein, dass sie Datenverkehr von beiden Systemen auf Port 3306 zulassen. Dies ist der Standardport für MySQL. Mehr über die UFW-Grundlagen mit einer Demonstration erfahren Sie in unserem Blogbeitrag.
Konfiguration der Quelldatenbank
-
Anpassen der MySQL-Konfiguration
MySQL verwendet my.cnf als primäre Konfigurationsdatei. Wir werden my.cnf aktualisieren, um den Server als Quelle zu bestimmen. Öffnen Sie zunächst die Konfigurationsdatei mit einem Texteditor:
|
1 |
$ sudo nano /etc/mysql/my.cnf |
Fügen Sie dann die folgenden Zeilen unter dem Abschnitt mysqld hinzu:
|
1 2 3 4 |
bind-address = 31.171.240.179 server-id = 1 log_bin = /var/log/mysql/mysql-bin.log binlog_do_db = newdatabase |
Was bedeuten diese Zeilen?
bind-address: Dies ist der Eintrag, der die Zuordnung zwischen einem Dienst und einer IP-Adresse definiert. Standardmäßig kann der Wert127.0.0.1(localhost) sein. Der neue Wert ist die IP-Adresse des Servers.server-id: Bei der MySQL-Replikation muss jeder Server eine eindeutige Server-ID haben. Dies kann eine beliebige Zahl sein. Der Einfachheit halber ist sie auf1.log_bin: Hier werden die tatsächlichen Details der Replikation gespeichert. Die Replika-Datenbank kopiert alles, was im Protokoll registriert ist.binlog_do_db: Dieser Eintrag bestimmt die Datenbank, die auf dem Replika-Server repliziert werden soll. Es kann mehr als eine Datenbank geben. Hier ist die Beispieldatenbanknewdatabase.
Speichern Sie nach den Änderungen die Konfigurationsdatei. MySQL muss neu gestartet werden, um die Änderungen an der my.cnf:
|
1 |
$ sudo service mysql restart |
-
Berechtigungen für den Replika-Benutzer erteilen
Der nächste Schritt besteht darin, einen Replika-Benutzer zu erstellen und entsprechende Berechtigungen zu erteilen. Dies muss über die MySQL-Shell erfolgen. Starten Sie zunächst die MySQL-Shell:
|
1 |
$ sudo mysql -u root -p |
Erstellen Sie als Nächstes einen dedizierten Benutzer für die Replika-Datenbank. Ändern Sie den Benutzernamen und das Passwort entsprechend:
|
1 |
$ CREATE USER 'cloudsigma_s'@'31.171.240.179' IDENTIFIED BY 'password_123'; |
Erteilen Sie dem Benutzer nun die entsprechenden Berechtigungen:
|
1 |
$ GRANT REPLICATION SLAVE ON *.* TO 'cloudsigma_s'@'31.171.240.179'; |
Mehr über MySQL-Benutzer und -Berechtigungen erfahren Sie in unserem Blogbeitrag. Laden Sie als Nächstes die Berechtigungstabelle neu, damit die Änderungen wirksam werden:
|
1 |
$ FLUSH PRIVILEGES; |
-
Anpassen der Datenbank
Wir benötigen eine Kopie der Quelldatenbank auf dem Replikat. Es ist möglich, die Struktur manuell aufzubauen. In den meisten Fällen ist das jedoch ziemlich unpraktisch. Daher ist der direkte Export der Datenbank die optimalste Lösung. In diesem Beispiel ist die Quelldatenbank newdatabase. Ändern Sie die aktuelle Datenbank:
|
1 |
$ USE newdatabase; |
Der folgende Befehl sperrt die Datenbank und verhindert neue Änderungen:
|
1 |
$ FLUSH TABLES WITH READ LOCK; |
Überprüfen Sie anschließend den Datenbankstatus:
|
1 |
$ SHOW MASTER STATUS; |
Ab dieser Position beginnt die Replikatdatenbank mit der Replikation von der Quelle. Diese Zahlen werden später nützlich sein, bewahren Sie sie also auf. Wenn Änderungen im selben Fenster vorgenommen werden, entsperrt MySQL die Datenbank automatisch. Daher wird empfohlen, die folgenden Schritte in einem anderen Terminal-Tab oder -Fenster auszuführen. Die Datenbank ist immer noch gesperrt. Exportieren Sie sie in eine portable SQL-Datei:
|
1 |
$ mysqldump -u root -p --opt newdatabase > newdatabase.sql |
Die Aufgabe ist nun erledigt. Entsperren Sie als Nächstes die Datenbank:
|
1 |
$ UNLOCK TABLES; |
Beenden Sie schließlich die Shell:
|
1 |
$ QUIT; |
Replikat-Konfiguration
Es ist nun an der Zeit, die Replikatdatenbank zu konfigurieren.
-
Importieren der Quelldatenbank
Wir benötigen eine Kopie der Quelldatenbank auf dem Replikatserver. Dazu verwenden wir die zuvor exportierte SQL-Datei. Starten Sie die MySQL-Shell:
|
1 |
$ sudo mysql -u root -p |
Erstellen Sie danach eine leere Datenbank mit demselben Datenbanknamen:
|
1 |
$ CREATE DATABASE newdatabase; |
Beenden Sie als Nächstes die Shell:
|
1 |
$ EXIT; |
Importieren Sie nun die SQL-Datei in die Datenbank:
|
1 |
$ sudo mysql -u root -p newdatabase < newdatabase.sql |
-
Anpassen der MySQL-Konfiguration
In der MySQL-Konfigurationsdatei müssen einige Dinge deklariert werden. Öffnen Sie die Konfigurationsdatei in einem Texteditor:
|
1 |
$ sudo nano /etc/mysql/my.cnf |
Die folgenden Einträge gehören in den Bereich mysqld . Andernfalls funktioniert es nicht. Der erste ist die Server-ID. Wie bereits erwähnt, muss diese für alle Server in der Quelle-Replikat-Replikationskonfiguration eindeutig sein. Zur Demonstration ist sie auf 2:
|
1 |
$ server-id = 2 |
Fügen Sie als Nächstes die folgenden Zeilen hinzu:
|
1 2 3 |
$ relay-log = /var/log/mysql/mysql-relay-bin.log $ log_bin = /var/log/mysql/mysql-bin.log $ binlog_do_db = newdatabase |
Hier ist nur relay-log ein neuer Eintrag. Es ist das Protokoll, das der Replikatserver während der Replikation erstellt. Das Protokollformat ist dasselbe wie das des Binärprotokolls. Speichern Sie die Konfigurationsdatei und starten Sie MySQL neu:
|
1 |
$ sudo service mysql restart |
-
Aktivieren der Replikation
Schließlich sind wir bereit, die Replikation aus MySQL heraus zu aktivieren. Starten Sie die MySQL-Shell:
|
1 |
$ sudo mysql -u root -p |
Führen Sie den folgenden Befehl aus. Ändern Sie zuerst die IP-Adresse, den Benutzernamen und die Passwörter entsprechend:
|
1 |
$ CHANGE MASTER TO MASTER_HOST='31.171.240.179',MASTER_USER='cloudsigma_master', MASTER_PASSWORD='password_123', MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS= 107; |
Der Befehl bewirkt Folgendes:
- Der aktuelle Server wird als Replikat des Quellservers markiert.
- Der Replikatserver verfügt über die korrekten Anmeldedaten.
- Der Replikatserver weiß, ab wo er mit der Replikation beginnen soll. Erinnern Sie sich an den Datenbankstatus, den wir auf dem Quellserver überprüft haben? Die Quelldatei und die Protokollposition stammen von dort.
Aktivieren Sie schließlich den Replikatserver:
|
1 |
$ START REPLICA; |
-
Verschiedenes
Müssen Sie die Details des aktuellen Status des Replikats überprüfen? Führen Sie den folgenden Befehl in der MySQL-Shell aus. Das \G am Ende dient dazu, die Texte neu anzuordnen, um sie lesbarer zu machen:
|
1 |
$ SHOW REPLICA STATUS\G |
Wenn ein Verbindungsproblem vorliegt, versuchen Sie, den Replikatserver zu starten, um dieses zu überspringen:
|
1 |
$ SET GLOBAL SQL_REPLICA_SKIP_COUNTER = 1; REPLICA START; |
Fazit
Die MySQL-Replikation hat viele Auswirkungen. Dies ist nur eine kurze Demonstration ihrer Grundform. Sie lässt sich jedoch leicht auf Konfigurationen mit mehreren Source-Replica-Instanzen erweitern. Die gleichen Schritte gelten auch für alle komplexeren Konfigurationen auf höherer Ebene. Es ist immer eine gute Idee, jede Konfiguration im Anschluss zu testen. Versuchen Sie, einige insert, delete oder update Befehle auf der Quell-Datenbank auszuführen. Wenn die Einrichtung funktioniert, sollte die Replica-Datenbank alles ordnungsgemäß übernehmen.
Darüber hinaus können Sie einen Blick auf weitere Ressourcen in unserem Blog werfen, die sich damit befassen, was Sie mit MySQL tun können:
- SQLite vs. MySQL vs. PostgreSQL: Relationale Datenbankmanagementsysteme im Vergleich
- Wie Sie das Root-Passwort von MariaDB oder MySQL zurücksetzen
- So installieren Sie den LEMP-Stack (Linux, Nginx, MySQL PHP) auf Ubuntu 20.04
Viel Spaß beim Computing!







Kommentare
Noch keine Kommentare. Schreiben Sie den ersten.