Master-Master-Replikation
Dieser Artikel zeigt, wie man mit 2 (oder mehr) MySQL-Servern eine echte Master-Master-Replikation aufsetzt, um die Server HA-tauglich zu machen.
Es gibt 2 Server:
- mysql1 192.168.1.10
- mysql2 192.168.1.11
Als Heartbeat-IP kann man irgendeine IP verwenden, da MySQL automatisch auf allen konfigurierten IP-Adressen lauscht.
-
/etc/my.cnf auf mysql1 anpassen
[mysqld]
...
server-id=1
log-bin
...
-
auf mysql1 den Useraccount für die Replikation anlegen
mysql> grant replication slave on *.* to 'replication'@192.168.1.11 identified by 'slave';
-
MySQL-Server auf mysql1 neu starten
-
Nun auf mysql2 die Datei /etc/my.cnf anpassen
[mysqld]
...
server-id=2
master-host = 192.168.128.1
master-user = replication
master-password = slave
master-port = 3306
...
-
auf mysql2 den MysSQL-Server neu starten und in der MySQL-Konsole den Slave-Status ausgeben
mysql> show slave status\G;
*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: 192.168.1.10
Master_User: replica
Master_Port: 3306
...
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
...
1 row in set (0.00 sec)
-
Auf dem mysql1 kontrolliert man den Master-Status
mysql> show master status;
+------------------------+----------+--------------+------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------------+----------+--------------+------------------+
|MysqlMYSQL01-bin.000016 | 132 | | foobar |
+------------------------+----------+--------------+------------------+
1 row in set (0.00 sec)
-
nun haben wir bereits ein funktionierenden Master-Slave-Setup, in den weiteren Schritten konfigurieren wir uns ein echtes Master-Master-Setup
-
auf mysql2 /etc/my.cnf anpassen
[mysqld]
...
server-id=2
log-bin
binlog-ignore-db=mysql
master-host = 192.168.1.10
master-user = replication
master-password = slave
master-port = 3306
-
den Replikationsaccount auf mysql2 anlegen
mysql> grant replication slave on *.* to 'replication'@192.168.1.10 identified by 'slave';
-
MySQL-Server auf mysql2 neu starten
-
/etc/my.cnf auf mysql1 anpassen
[mysqld]
...
master-host = 192.168.128.2
master-user = replication
master-password = slave
master-port = 3306
...
-
jetzt auch auf mysql1 den MySQL-Server neu starten
-
mit den altbekannten Kommandos „show slave status“ und „show master status“ den aktuellen Stand der Replikation kontrollieren. Auf beiden Systemen sollten folgende Zeilen erscheinen:
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
-
im Falle eines Fehlers kann man in /var/log/mysqld.log nachlesen, was den Server grade stört
No Comments