MySQL Replikation

Aus Byte-Welt Wiki
Version vom 19. September 2008, 12:34 Uhr von EagleEye (Diskussion | Beiträge) (Die Seite wurde neu angelegt: Für die Replikation müssen midnestens zwei Server vorhanden sein, ein Master und ein Slave. ==Vorbereitung Master== In dem Master muss zunächst die Server I...)
(Unterschied) ← Nächstältere Version | Aktuelle Version (Unterschied) | Nächstjüngere Version → (Unterschied)
Zur Navigation springenZur Suche springen

Für die Replikation müssen midnestens zwei Server vorhanden sein, ein Master und ein Slave.

Vorbereitung Master

In dem Master muss zunächst die Server ID auf 1 gesetzt werden, dies geschied in der my.ini bzw my.cnf, außerdem muss das Binärloggen aktiviert werden

log-bin                                         = mysql-bin
server-id                                       = 1

Für den Slave wird desweiteren noch ein Account benötigt, dieser muss nur über das Recht REPLICATION SLAVE verfügen

Vorbereitung Client

Im Client müssen die Daten des Masters hinterlegt werden, sowie eine Server ID eintragen:

server-id       = <eindeutige Nummer größer 1>
master-host     = <IP des Servers>
master-user     = <user>
master-password = <password>
master-port     = <port>
log-bin         = mysql-bin

Starten der Replikation

Bindet man einen neuen Slave ein sollten auf dem Master alle Tabellen gelockt werden <code=sql>

FLUSH TABLES WITH READ LOCK;

</code=sql> Anschließen einen kompletten Dump der Daten machen und auf dem Slave einspielen, da nur Daten nach der Einbindung übernommen werden. Sind alle Daten übernommen können die Tabellen entsperrt werden und beide Server ihren Betrieb aufnehmen. <code=sql>

TABLES UNLOCK;

</code=sql>

Jetzt sollten alle Änderungen am Master automatisch auf den Slave übernommen werden.


Problembehandlung

Übernimmt der Slave keine Daten kann mit den Befehlen der Status des jeweiligen eingesehen werden. Beim Slave sind auch Fehlermeldungen hinterlegt. <code=sql>

SHOW MASTER STATUS;
SHOW SLAVE STATUS;

</code=sql>

Ist der Slave nicht gestartet kann dieser auch explizit gestartet werden: <code=sql>

START SLAVE;

</code=sql>