Skip to main content

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