Datenbank · 3 min read · Sep 27, 2025
MySQL Master Master Replikation
MySQL Master Master Replikation Tutorial
Dieses Tutorial beschreibt, wie man die MySQL Master-Master-Replikation einrichtet. Wir müssen MySQL-Server replizieren, um hohe Verfügbarkeit (HA) zu erreichen. In meinem Fall benötige ich zwei Master, die miteinander synchronisiert sind, sodass, wenn einer von ihnen ausfällt, der andere übernehmen kann und keine Daten verloren gehen. Ebenso, wenn der erste wieder hochfährt, wird er weiterhin als Slave für den aktiven Master verwendet.
Hier ist ein grundlegendes Schritt-für-Schritt-Tutorial, das die MySQL-Master- und Slave-Replikation abdeckt und auch die MySQL-Master- und Master-Replikation beschreibt.
Begriffe: Wir nennen System 1 Master1 und Slave2 und System 2 Master2 und Slave1.
Schritt 1:
Installieren Sie MySQL auf Master 1 und Slave 1. Konfigurieren Sie die Netzwerkdienste auf beiden Systemen, wie
Master 1/Slave 2 IP: 192.168.16.4
Master 2/Slave 1 IP: 192.168.16.5
Schritt 2:
Ändern Sie auf Master 1 die my.cnf:
[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
old_passwords=1
log-bin
binlog-do-db=
binlog-ignore-db=mysql # Geben Sie die Datenbank an, die für die Replikation ignoriert werden soll
binlog-ignore-db=test
server-id=1
[mysql.server]
user=mysql
basedir=/var/lib
[mysqld_safe]
err-log=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
Schritt 3:
Erstellen Sie auf Master 1 ein Replikations-Slave-Konto in MySQL.
mysql> grant replication slave on . to ‘replication’@192.168.16.5 \
identified by ‘slave’;
und starten Sie den MySQL Master1 neu.
Schritt 4:
Jetzt bearbeiten Sie die my.cnf auf Slave1 oder Master2:
[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
old_passwords=1
server-id=2
master-host = 192.168.16.4
master-user = replication
master-password = slave
master-port = 3306
[mysql.server]
user=mysql
basedir=/var/lib
[mysqld_safe]
err-log=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
Schritt 5:
Starten Sie MySQL Slave 1 neu und geben Sie ein:
mysql> start slave;
mysql> show slave status\G;
* 1. Zeile *
Slave_IO_State: Wartet darauf, dass der Master ein Ereignis sendet
Master_Host: 192.168.16.4
Master_User: replica
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: MASTERMYSQL01-bin.000009
Read_Master_Log_Pos: 4
Relay_Log_File: MASTERMYSQL02-relay-bin.000015
Relay_Log_Pos: 3630
Relay_Master_Log_File: MASTERMYSQL01-bin.000009
Slave_IO_Running: Ja
Slave_SQL_Running: Ja
Replicate_Do_DB:
Replicate_Ignore_DB:
Replicate_Do_Table:
Replicate_Ignore_Table:
Replicate_Wild_Do_Table:
Replicate_Wild_Ignore_Table:
Last_Errno: 0
Last_Error:
Skip_Counter: 0
Exec_Master_Log_Pos: 4
Relay_Log_Space: 3630
Until_Condition: Keine
Until_Log_File:
Until_Log_Pos: 0
Master_SSL_Allowed: Nein
Master_SSL_CA_File:
Master_SSL_CA_Path:
Master_SSL_Cert:
Master_SSL_Cipher:
Master_SSL_Key:
Seconds_Behind_Master: 1519187
1 Zeile im Set (0.00 sec)
Die oben hervorgehobenen Zeilen müssen die zugehörigen Protokolldateien anzeigen und Slave_IO_Running sowie Slave_SQL_Running müssen auf JA stehen.
Schritt 6:
Auf Master 1:
mysql> show master status;
+————————+———-+————–+——————+
| Datei | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+————————+———-+————–+——————+
|MysqlMYSQL01-bin.000008 | 410 | adam | |
+————————+———-+————–+——————+
1 Zeile im Set (0.00 sec)
Das obige Szenario ist für Master-Slave, jetzt werden wir ein Slave-Master-Szenario für dieselben Systeme erstellen, und es wird als Master-Master funktionieren.
Schritt 7:
Auf Master2/Slave 1, bearbeiten Sie die my.cnf und fügen Sie die Master-Einträge hinzu:
[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
old_passwords=1
server-id=2
master-host = 192.168.16.4
master-user = replication
master-password = slave
master-port = 3306
log-bin # Informationen zum Master werden hinzugefügt
binlog-do-db=adam
[mysql.server]
user=mysql
basedir=/var/lib
[mysqld_safe]
err-log=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
Schritt 8:
** Erstellen Sie ein Replikations-Slave-Konto auf Master2 für Master1:
mysql> grant replication slave on *.* to 'replication'@192.168.16.4 identified by 'slave2';Schritt 9:
** Bearbeiten Sie die my.cnf auf Master1 für Informationen zu seinem Master.
[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
old_passwords=1
log-bin
binlog-do-db=adam
binlog-ignore-db=mysql
binlog-ignore-db=test
server-id=1
master-host = 192.168.16.5
master-user = replication
master-password = slave2
master-port = 3306
[mysql.server]user=mysqlbasedir=/var/lib
Schritt 10:
Starten Sie sowohl MySQL Master1 als auch Master2 neu.
Auf MySQL Master1:
mysql> start slave;Auf MySQL Master2:
mysql > show master status;Auf MySQL Master 1:
mysql> show slave status\G;* 1. Zeile *
Slave_IO_State: Wartet darauf, dass der Master ein Ereignis sendet
Master_Host: 192.168.16.5
Master_User: replica
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: Mysql1MYSQL02-bin.000008
Read_Master_Log_Pos: 410
Relay_Log_File: Mysql1MYSQL01-relay-bin.000008
Relay_Log_Pos: 445
Relay_Master_Log_File: Mysql1MYSQL02-bin.000008
Slave_IO_Running: Ja
Slave_SQL_Running: Ja
Replicate_Do_DB:
Replicate_Ignore_DB:
Replicate_Do_Table:
Replicate_Ignore_Table:
Replicate_Wild_Do_Table:
Replicate_Wild_Ignore_Table:
Last_Errno: 0
Last_Error:
Skip_Counter: 0
Exec_Master_Log_Pos: 410
Relay_Log_Space: 445
Until_Condition: Keine
Until_Log_File:
Until_Log_Pos: 0
Master_SSL_Allowed: Nein
Master_SSL_CA_File:
Master_SSL_CA_Path:
Master_SSL_Cert:
Master_SSL_Cipher:
Master_SSL_Key:
Seconds_Behind_Master: 103799
1 Zeile im Set (0.00 sec)
FEHLER:
Keine Abfrage angegeben
Überprüfen Sie die hervorgehobenen Zeilen, stellen Sie sicher, dass sie ausgeführt werden. Jetzt können Sie Tabellen in der Datenbank erstellen und Sie werden Änderungen im Slave sehen. Viel Spaß!!
Erhalte neue Beiträge in deinem Posteingang.
Kein Spam. Jederzeit abmelden.