# 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.

- <div>/etc/my.cnf auf **mysql1** anpassen</div>

```code
[mysqld]
...
server-id=1
log-bin
...
```

- <div>auf **mysql1** den Useraccount für die Replikation anlegen</div>

```code
mysql> grant replication slave on *.* to 'replication'@192.168.1.11 identified by 'slave';
```

- <div>MySQL-Server auf **mysql1** neu starten</div>
- <div>Nun auf **mysql2** die Datei /etc/my.cnf anpassen</div>

```code
[mysqld]
...
server-id=2
master-host = 192.168.128.1
master-user = replication
master-password = slave
master-port = 3306
...
```

- <div>auf **mysql2** den MysSQL-Server neu starten und in der MySQL-Konsole den Slave-Status ausgeben</div>

```code
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)
```

- <div>Auf dem **mysql1** kontrolliert man den Master-Status</div>

```code
mysql> show master status;

+------------------------+----------+--------------+------------------+
| File                   | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------------+----------+--------------+------------------+
|MysqlMYSQL01-bin.000016 |      132 |              | foobar           |
+------------------------+----------+--------------+------------------+
1 row in set (0.00 sec)
```

- <div>nun haben wir bereits ein funktionierenden Master-Slave-Setup, in den weiteren Schritten konfigurieren wir uns ein echtes Master-Master-Setup</div>
- <div>auf **mysql2** /etc/my.cnf anpassen</div>

```code
[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
```

- <div>den Replikationsaccount auf **mysql2** anlegen</div>

```code
mysql> grant replication slave on *.* to 'replication'@192.168.1.10 identified by 'slave';
```

- <div>MySQL-Server auf **mysql2** neu starten</div>
- <div>/etc/my.cnf auf **mysql1** anpassen</div>

```code
[mysqld]
...
master-host = 192.168.128.2
master-user = replication
master-password = slave
master-port = 3306
...
```

- <div>jetzt auch auf **mysql1** den MySQL-Server neu starten</div>
- <div>mit den altbekannten Kommandos „show slave status“ und „show master status“ den aktuellen Stand der Replikation kontrollieren. Auf beiden Systemen sollten folgende Zeilen erscheinen:</div>

```code
Slave_IO_Running:	Yes
Slave_SQL_Running:	Yes
```

- <div>im Falle eines Fehlers kann man in /var/log/mysqld.log nachlesen, was den Server grade stört</div>