Freitag, 4. Mai 2012

MySQL Zweiseitige - Replikation umsetzten

Wir gehen davon aus, wir hätten zwei identische Suse Linux Server, auf denen MySql läuft.
Es sind masterserver.firma.de und slaveserver.firma.de
Eigentlich sind aber beide master und slave gleichzeitig. Die Datenbank Inhalte beider Server sind jederzeit (JEDERZEIT) absolut identisch. Sobald auf einem der Server ein neuer Datenbank Eintrag gemacht wird, wird er sofort repliziert auf den jeweils anderen.
Wir gehen davon aus, dass auf beiden Servern in der /etc/my.cnf folgende Einträge drinstehen

masterserver.firma.de

log-bin
server-id = 1
master-host = 192.168.0.2
master-user = repl
master-password = GeHe!mReplik@ntP@sswort
log-slave-updates

slaveserver.firma.de

log-bin
server-id = 2
master-host = 192.168.0.1
master-user = repl
master-password = GeHe!mReplik@ntP@sswort
log-slave-updates

Wir gehen davon aus, dass auf beiden Servern ein mysql-User namens „repl“ angelegt ist, der das FILE Recht hat.
Die beiden Server sind übrigens mit per Crossoverkabel verbunden auf dem zweiten Netzwerkinterface und haben private IP-Adressen. Diese Verbindung dient nur zur Replikation der Datenbanken.

Folgende Anleitung hilft, die Replikation aufzusetzen bzw. eine defekte Replikation binnen 10 Minuten zu reparieren - also quasi noch vor der Mittagspause!

1. Auf beiden Servern mysql beenden

/etc/init.d/mysql Stop


2. Auf slaveserver.firma.de den Ordner /var/lib/mysql umbenennen mit

mv /var/lib/mysql /var/lib/mysql.original

3. binäres Loggen auf BEIDEN deaktivieren mit

vi /etc/my.cnf

in der my.cnf auf beiden Servern folgende Eintraege auskommentieren (# davorstellen)

log-bin (Zeile 47)
log-slave-updates (Zeile 56)

4. Auf Server masterserver.firma.de im Ordner /var/lib/mysql alles löschen, das mit „www-*“ beginnt (das sind die „alten“ bin-log-Dateien, die wir loswerden müssen) (ps. das "www-*" bezieht sich auf MEINE Server. Bei dir heissen sie so, wie der Server heisst, also "masterserver-*")
Ferner loeschen wir die Dateien „master.info“ sowie „relay-log.info“

cd /var/lib/mysql
rm www-*
rm master.info
rm relay-log.info

5. Jetzt auf masterserver.firma.de vom Ordner /var/lib/mysql ein „tgz“ Paket erstellen
cd /
tar czvf mysql.tgz /var/lib/mysql

6. Die Datei mysql.tgz kopieren von masterserver.firma.de nach slaveserver.firma.de mit

scp mysql.tgz root@slaveserver.firma.de:/

7. Auf slaveserver.firma.de das kopierte File extrahieren

cd /
tar xzvf mysql.tgz

Nun sind die Verzeichnisse /var/lib/mysql auf beiden Servern exakt gleich.

8. Auf beiden Servern den mysql Dienst starten und wieder stoppen

/etc/init.d/mysql start
/etc/init.d/mysql Stop


9. Auf beiden Servern binäres Loggen wieder aktivieren

vi /etc/my.cnf

Das Kommentarzeichen # wieder entfernen von den Einträgen

bin-log (Zeile 47)
log-slave-updates (Zeile 56)

10. Auf beiden Servern mysql Dienst wieder starten

/etc/init.d/mysql start


Nun sind beide MySql Datenbanken gleich und die Replikation müsste funktionieren.

mysql Logdatei kontrollieren

tail -100 /var/lib/mysql/mysqld.log

Keine Kommentare: