Die MySQL-Replikation ist ein Prozess, mit dem Sie Daten automatisch von einem Datenbankserver auf einen oder mehrere Server kopieren können.
MySQL unterstützt eine Reihe von Replikationstopologien, wobei die Master/Slave-Topologie eine der bekanntesten Topologien ist, in der ein Datenbankserver als Master fungiert, während ein oder mehrere Server als Slaves fungieren. Standardmäßig ist die Replikation asynchron, wobei der Master Ereignisse sendet, die Datenbankänderungen an sein Binärlog beschreiben, und Slaves die Ereignisse anfordern, wenn sie bereit sind.
In diesem Tutorial erklären wir, wie Sie eine MySQL-Master/Slave-Replikation mit einem Master- und einem Slave-Server unter CentOS 7 einrichten. Die gleichen Schritte gelten für MariaDB.
Diese Art der Replikationstopologie eignet sich am besten für die Bereitstellung von Lesereplikaten für die Leseskalierung, Live-Datenbanksicherungen für die Notfallwiederherstellung und für Analysejobs.
Voraussetzungen #
In diesem Beispiel gehen wir davon aus, dass Sie zwei Server mit CentOS 7 haben, die über ein privates Netzwerk miteinander kommunizieren können. Wenn Ihr Hosting-Provider keine privaten IP-Adressen bereitstellt, können Sie die öffentlichen IP-Adressen verwenden und Ihre Firewall so konfigurieren, dass Datenverkehr auf Port 3306 nur von vertrauenswürdigen Quellen zugelassen wird.
Die Server in diesem Beispiel haben die folgenden IPs:
Master IP: 192.168.121.59
Slave IP: 192.168.121.14
Installieren Sie MySQL #
Die standardmäßigen CentOS 7-Repositorys enthalten keine MySQL-Pakete, daher werden wir MySQL aus ihrem offiziellen Yum-Repository installieren. Um Probleme zu vermeiden, werden wir auf beiden Servern dieselbe MySQL-Version 5.7 installieren.
Installieren Sie MySQL sowohl auf dem Master- als auch auf dem Slave-Server:
sudo yum localinstall https://dev.mysql.com/get/mysql57-community-release-el7-11.noarch.rpm
sudo yum install mysql-community-server
Sobald die Installation abgeschlossen ist, starten Sie den MySQL-Dienst und aktivieren Sie ihn für den automatischen Start beim Booten mit:
sudo systemctl enable mysqld
sudo systemctl start mysqld
Wenn der MySQL-Server zum ersten Mal gestartet wird, wird ein temporäres Passwort für den MySQL-Root-Benutzer generiert. Um das Passwort zu finden, verwenden Sie den folgenden grep-Befehl:
sudo grep 'temporary password' /var/log/mysqld.log
Führen Sie die mysql_secure_installation
aus Befehl, um Ihr neues Root-Passwort festzulegen und die Sicherheit der MySQL-Instanz zu verbessern:
mysql_secure_installation
Geben Sie das temporäre Root-Passwort ein und antworten Sie mit Y
(ja) auf alle Fragen.
Konfigurieren Sie den Master-Server #
Zuerst konfigurieren wir den Master-MySQL-Server und nehmen die folgenden Änderungen vor:
- Stellen Sie den MySQL-Server so ein, dass er auf der privaten IP lauscht.
- Legen Sie eine eindeutige Server-ID fest.
- Aktivieren Sie die binäre Protokollierung.
Öffnen Sie dazu die MySQL-Konfigurationsdatei und fügen Sie die folgenden Zeilen in [mysqld]
ein Abschnitt:
sudo nano /etc/my.cnf
master:/etc/my.cnfbind-address = 192.168.121.59
server-id = 1
log_bin = mysql-bin
Wenn Sie fertig sind, starten Sie den MySQL-Dienst neu, damit die Änderungen wirksam werden
sudo systemctl restart mysqld
Im nächsten Schritt erstellen Sie einen neuen Replikationsbenutzer. Melden Sie sich als Root-Benutzer beim MySQL-Server an:
mysql -uroot -p
Führen Sie in der MySQL-Eingabeaufforderung die folgenden SQL-Abfragen aus, die das replica
erstellen Benutzer und gewähren Sie den REPLICATION SLAVE
Privileg für den Benutzer:
CREATE USER 'replica'@'192.168.121.14' IDENTIFIED BY 'strong_password';
GRANT REPLICATION SLAVE ON *.* TO 'replica'@'192.168.121.14';
Stellen Sie sicher, dass Sie die IP mit Ihrer Slave-IP-Adresse ändern. Sie können den Benutzer nach Belieben benennen. Während Sie sich noch in der MySQL-Eingabeaufforderung befinden, führen Sie den folgenden Befehl aus, der den binären Dateinamen und die Position ausgibt.
SHOW MASTER STATUS\G
*************************** 1. row ***************************
File: mysql-bin.000001
Position: 1427
Binlog_Do_DB:
Binlog_Ignore_DB:
Executed_Gtid_Set:
1 row in set (0.00 sec)
Notieren Sie sich den Dateinamen ‘mysql-bin.000001’ und Position ‘1427‘ . Sie benötigen diese Werte bei der Konfiguration des Slave-Servers. Diese Werte werden auf Ihrem Server wahrscheinlich anders sein.
Konfiguriere den Slave-Server #
Wie beim obigen Master-Server nehmen wir die folgenden Änderungen am Slave-Server vor:
- Stellen Sie den MySQL-Server so ein, dass er auf der privaten IP lauscht
- Legen Sie eine eindeutige Server-ID fest
- Aktivieren Sie die binäre Protokollierung
Öffnen Sie die MySQL-Konfigurationsdatei und bearbeiten Sie die folgenden Zeilen:
sudo nano /etc/my.cnf
slave:/etc/my.cnfbind-address = 192.168.121.14
server-id = 2
log_bin = mysql-bin
Starten Sie den MySQL-Dienst neu:
sudo systemctl restart mysqld
Der nächste Schritt besteht darin, die Parameter zu konfigurieren, die der Slave-Server verwendet, um sich mit dem Master-Server zu verbinden. Melden Sie sich bei der MySQL-Shell an:
mysql -uroot -p
Stoppen Sie zuerst die Slave-Threads:
STOP SLAVE;
Führen Sie die folgende Abfrage aus, die den Slave so einrichtet, dass er den Master repliziert:
CHANGE MASTER TO
MASTER_HOST='192.168.121.59',
MASTER_USER='replica',
MASTER_PASSWORD='strong_password',
MASTER_LOG_FILE='mysql-bin.000001',
MASTER_LOG_POS=1427;
Stellen Sie sicher, dass Sie die richtige IP-Adresse, den richtigen Benutzernamen und das richtige Passwort verwenden. Der Name und die Position der Protokolldatei müssen mit den Werten übereinstimmen, die Sie vom Masterserver erhalten haben.
Wenn Sie fertig sind, starten Sie die Slave-Threads.
START SLAVE;
Testen Sie die Konfiguration #
An diesem Punkt sollten Sie über eine funktionierende Master/Slave-Replikationskonfiguration verfügen.
Um zu überprüfen, ob alles wie erwartet funktioniert, erstellen wir eine neue Datenbank auf dem Masterserver:
mysql -uroot -p
CREATE DATABASE replicatest;
Melden Sie sich bei der Slave-MySQL-Shell an:
mysql -uroot -p
Führen Sie den folgenden Befehl aus, um alle Datenbanken aufzulisten:
SHOW DATABASES;
Sie werden feststellen, dass die Datenbank, die Sie auf dem Master-Server erstellt haben, auf dem Slave repliziert wird:
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| replicatest |
| sys |
+--------------------+
5 rows in set (0.00 sec)