Was ist MySQL-Master-Master-Replikation?
Die MySQL-Master-Master-Replikation erhöht die Geschwindigkeit und Redundanz für aktive Websites. Bei der Replikation fungieren zwei separate MySQL-Server als Cluster. Datenbank-Clustering ist besonders nützlich für Website-Konfigurationen mit hoher Verfügbarkeit. Verwenden Sie zwei separate Linodes, um die Datenbankreplikation zu konfigurieren, jede mit privaten IPv4-Adressen.
HinweisDieses Handbuch wurde für Nicht-Root-Benutzer geschrieben. Befehlen, die erhöhte Berechtigungen erfordern, wird das Präfix
sudo
vorangestellt . Wenn Sie mitsudo
nicht vertraut sind Befehl finden Sie in unserem Handbuch Benutzer und Gruppen.Diese Anleitung wurde für Debian 9, Ubuntu 18.04 und Ubuntu 20.04 geschrieben.
Wenn Sie sich nicht sicher sind, welche MySQL-Version auf Ihrem System installiert ist, geben Sie bei den folgenden Schritten den folgenden Befehl ein:
mysql --version
Installieren Sie MySQL
-
Verwenden Sie die folgenden Befehle, um MySQL auf jedem der Linodes zu installieren:
sudo apt-get update sudo apt-get upgrade -y sudo apt-get install mysql-server mysql-client
-
Führen Sie den sicheren MySQL-Installationsbefehl aus. Sie werden aufgefordert, ein Root-Passwort zu erstellen. Es wird empfohlen, dass Sie alle Fragen mit Ja beantworten:
mysql_secure_installation
MySQL-Konfiguration bearbeiten
-
Bearbeiten Sie
/etc/mysql/my.cnf
Datei auf jeder der Linodes. Fügen Sie die folgenden Werte hinzu oder ändern Sie sie:Server 1:
- Datei:/ etc/mysql/my.cnf
1 2 3 4 5 6 7 8 9 10 11
[mysqld] server_id = 1 log_bin = /var/log/mysql/mysql-bin.log log_bin_index = /var/log/mysql/mysql-bin.log.index relay_log = /var/log/mysql/mysql-relay-bin relay_log_index = /var/log/mysql/mysql-relay-bin.index expire_logs_days = 10 max_binlog_size = 100M log_replica_updates = 1 auto-increment-increment = 2 auto-increment-offset = 1
Hinweis Wenn Sie MySQL 8.0.25 oder früher verwenden, ersetzen Sie
log_replica_updates
mitlog_slave_updates
(innerhalb von Server 1 und 2). Einzelheiten finden Sie in der MySQL-Dokumentation.Server 2:
- Datei:/ etc/mysql/my.cnf
1 2 3 4 5 6 7 8 9 10 11
[mysqld] server_id = 2 log_bin = /var/log/mysql/mysql-bin.log log_bin_index = /var/log/mysql/mysql-bin.log.index relay_log = /var/log/mysql/mysql-relay-bin relay_log_index = /var/log/mysql/mysql-relay-bin.index expire_logs_days = 10 max_binlog_size = 100M log_replica_updates = 1 auto-increment-increment = 2 auto-increment-offset = 2
Hinweis Wenn Sie MySQL 8.0.25 oder früher verwenden, ersetzen Sie
log_replica_updates
mitlog_slave_updates
(innerhalb von Server 1 und 2). Einzelheiten finden Sie in der MySQL-Dokumentation. -
Bearbeiten Sie die
bind-address
Konfiguration, um die privaten IP-Adressen für jeden der Linodes zu verwenden.- Datei:/ etc/mysql/my.cnf
1
bind-address = x.x.x.x
-
Wenn Sie fertig sind, starten Sie die MySQL-Anwendung neu:
sudo systemctl restart mysql
Replikationsbenutzer erstellen
-
Melden Sie sich auf jedem der Linodes bei MySQL an:
mysql -u root -p
-
Konfigurieren Sie die Replikationsbenutzer auf jedem Linode. Ersetzen Sie
x.x.x.x
mit der privaten IP-Adresse des gegnerischen Linode undpassword
mit einem starken Passwort:MySQL8 und höher
CREATE USER 'replication'@'x.x.x.x' IDENTIFIED BY 'password'; GRANT REPLICATION SLAVE ON *.* TO 'replication'@'x.x.x.x';
Unter MySQL8
GRANT REPLICATION SLAVE ON *.* TO 'replication'@'x.x.x.x' IDENTIFIED BY 'password';
-
Führen Sie den folgenden Befehl aus, um die Konfiguration zu testen. Verwenden Sie die private IP-Adresse des gegnerischen Linode:
mysql -u replication -p -h x.x.x.x -P 3306
Dieser Befehl sollte Sie mit der MySQL-Instanz des Remote-Servers verbinden.
Datenbankreplikation konfigurieren
-
Während Sie bei MySQL auf Server 1 angemeldet sind, fragen Sie den Master-Status ab:
SHOW MASTER STATUS;
Beachten Sie die angezeigten Datei- und Positionswerte:
mysql> SHOW MASTER STATUS; +------------------+----------+--------------+------------------+ | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | +------------------+----------+--------------+------------------+ | mysql-bin.000001 | 277 | | | +------------------+----------+--------------+------------------+ 1 row in set (0.00 sec)
-
Richten Sie auf Server 2 an der MySQL-Eingabeaufforderung die Replikationsfunktion für diese Datenbank ein. Ersetzen Sie
x.x.x.x
mit der privaten IP vom ersten Server. Ersetzen Sie auch den Wert fürsource_log_file
mit dem Dateiwert aus dem vorherigen Schritt und dem Wert fürsource_log_pos
mit dem Positionswert.MySQL 8.0.22 oder höher:
STOP REPLICA; CHANGE REPLICATION SOURCE TO source_host='x.x.x.x', source_port=3306, source_user='replication', source_password='password', source_log_file='mysql-bin.000001', source_log_pos=106; START REPLICA;
MySQL 8.0.22 oder früher:
STOP SLAVE; CHANGE MASTER TO master_host='x.x.x.x', master_port=3306, master_user='replication', master_password='password', master_log_file='mysql-bin.000001', master_log_pos=106; START SLAVE;
-
Fragen Sie auf Server 2 den Masterstatus ab. Beachten Sie erneut die Datei- und Positionswerte.
SHOW MASTER STATUS;
-
Legen Sie den Replikatdatenbankstatus auf Server 1 fest, indem Sie ähnliche Befehle wie in Schritt 2 verwenden. Verwenden Sie bei der Eingabe der Befehle die IP-Adresse von Server 2 und die Datei- und Positionswerte, die Sie gerade im vorherigen Schritt erfasst haben.
-
Testen Sie, indem Sie eine Datenbank erstellen und eine Zeile einfügen:
Server 1:
create database test; create table test.flowers (`id` varchar(10));
Server 2:
show tables in test;
Wenn Sie danach gefragt werden, sollten Sie die Tabellen von Server 1 auf Server 2 repliziert sehen. Herzlichen Glückwunsch, Sie haben jetzt einen MySQL-Master-Master-Cluster!
Weitere Informationen
Weitere Informationen zu diesem Thema finden Sie in den folgenden Ressourcen. Obwohl diese in der Hoffnung bereitgestellt werden, dass sie nützlich sind, beachten Sie bitte, dass wir nicht für die Genauigkeit oder Aktualität extern gehosteter Materialien garantieren können.
- MySQL-Referenzhandbücher