Replikation von MySQL-Datenbanken

Home Hommage an S.J.Lec Fotografie Netzbetrieb Kabelfrequenzen in Hamburg
Übersicht
Linux - Versionen
den Lampp ins Web
PHP / MySQL?
MySQL-Replikation
Fern-Administration
DFUE - Chronik
Hansenet

Kontakt

Überblick zur Replikation

Seit einigen Versionen bietet die MySQL-Datenbank das angenehme Feature, zwischen zwei Servern eine automatische Replikation zweier Datenbanken ohne nenneswerte Belastung der beteiligten Rechner konsistent vorzunehmen. Damit läßt sich eine Spiegelung wichtiger Datenbanken recht unkompliziert vornehmen und eine hohe Datensicherheit erreichen, in dem beispielsweise über einen zweiten Server die Datenbank ohne Schreibrechte ins Web gestellt werden kann.

Die nachfolgenden Hinweise beziehen sich auf den Betrieb unter Linux mit dem Xampp-Paket von Apacheorg mit MySql Version 5.0, gelten aber vermutlich analog für Windows. Diese Version hängt etwas hinter der aktuellen MySQL-Version zurück, ist aber stabil. Hilfreich ist ein Arbeiten über die grafische MySQL-Oberfläche von phpMyAdmin, hier lassen sich alle notwendigen Einstellungen vornehmen, abgesehen vom editieren der Konfiguration, die außerdem vorgenommen werden muss.

Eine ausführliche Dokumentation findet sich für die MySQL Version 5.1 auf englisch. Die deutsche Dokumentation ist nachgezogen. Es ergeben sich einige Unterschiede zwischen den Versionen 4.1, 5.0 und 5.1, es sollte daher unbedingt auf die entsprechende Dokumentation der benutzten Version zurückgegriffen werden.

Aus der Dokumentation sind einige der künftigen Features absehbar (Stored Procedures, zeilenweise Syncronisation, übertragen kompletter Datenbanken), daher sollte man auf die jeweils zur installierten Version passenden Dokumentation abstellen. Inwieweit die Replikation zwischen zwei Servern mit unterschiedlicher MySQL-Version möglich ist, habe ich nicht untersucht, hier gibt es unter vorstehendem Link Hinweise.

Einrichtung

Auf die Installation der Datenbank wird hier nicht eingegangen. Die betroffene Konfiguration liegt bei der Xampp-Distribution unter /opt/lampp/etc/my.cnf, die Datendateien und Logs liegen unter /opt/lampp/var/mysql. In der Folge wird der Server mit der Quelldatenbank Master der aufnehmende als Slave bezeichnet.

Vorarbeiten

  • Machen Sie mit phpMyAdmin ein Flush auf alle Datenbanken und überprüfen Sie die Konsistenz der Tabellen mit check
  • Machen Sie eine Datensicherung der my.cnf und der Datendateien unterhalb von /opt/lampp/var/mysql/
  • Laden sie auf dem Slave die Datenbank, die in der Folge repliziert werden soll.

Konfiguration

  • Legen Sie mit phpMyAdmin in der Tabelle mysql.usereinen Replikationsuser an. Dieser erhält als einzige Rechte repl_slave_priv und file_priv. Auf dem Slave wird ein identischer User mit gleichem Passwort mit den gleichen Rechten angelegt, zusätzlich ist ein repl_client_priv einzurichten.
  • Stoppen Sie den MySQL-Dienst mit /opt/lampp/lampp stopmysql auf beiden betroffenen Servern als Root.
  • Löschen Sie die eventuell vorhandenen Logdateien /opt/lampp/var/mysql/aaaa-bin.000000# und optional auch /opt/lampp/var/mysql/aaaa.err auf beiden Servern.
  • Überzeugen Sie sich davon, dass das Binay-Logging auf beiden MySql-Servern aktiviert ist.
    Dies erreichen Sie in der /opt/lampp/etc/my.cnf im Abschnitt [mysqld] durch Aktivierung der Zeile log-bin, die standarmäßig auskommentiert ist. die Log-Dateien enthalten alle Änderungen an allen Datenbanken dieser MySQL-Instanz.
    Vergeben Sie eine numerische server-id = ###, diese ist auf beiden Servern unterschiedlich zu setzen.
  • Auf dem Slave fügen Sie den folgenden Abschnitt mit entsprechenden Anpassungen ein
    # replikation
    master-host	= aaaa.antiwome.net // aaaa sollte der Servername sein
    master-user	= repl
    master-password	= xxxxxxxxx
    replicate-do-db = bilder
    
Voila, jetzt kann die MySQL wieder gestartet werden.

Neustart

  • Starten Sie den MySQL-Dienst mit /opt/lampp/lampp startmysql auf beiden betroffenen Servern als Root.
  • Als Ergebnis finden Sie auf dem Master die Dateien /opt/lampp/var/mysql/aaaa-bin.0000001,
    /opt/lampp/var/mysql/aaaa-bin.index und
    /opt/lampp/var/mysql/mysql.err mit dem der Startzeit.
  • Auf dem Slave sollten sich jetzt mehr Informationen finden: /opt/lampp/var/mysql/mysql.err enthält einen Eintrag:
    060207  0:02:15 [Note] Slave SQL thread initialized, starting replication in log
       /'aaaa-bin.000005' at position 4211870, relay log './bbbbb-relay-bin.000012' position: 312
    060207  0:02:18 [Note] Slave I/O thread: connected to master 'repl@aaaa.antiwome.net:3306',
       /replication started in log 'aaaa-bin.000005' at position 4211870
    
    ferner sind die Dateien /opt/lampp/var/mysql/bbbb-bin.000001
    /opt/lampp/var/mysql/bbbb-bin.index
    /opt/lampp/var/mysql/bbbb-relay-bin.0000001
    /opt/lampp/var/mysql/bbbb-relay-bin.index und
    /opt/lampp/var/mysql/relay-log.index angelegt worden.

Sollte es zu Fehlern kommen, sind erfahrungsgemäß die Fehlertexte in /opt/lampp/var/mysql/mysql.err sprechend. Für die Analyse kann es hilfreich sein, sich die /opt/lampp/var/mysql/master.info 3084 einmal an zu schauen.

Mit STOP SLAVE beziehungsweise mit START SLAVE können Sie unter phpMyAdmin im SQL-Fenster das Replizieren unterbrechen oder wieder aufnehmen.

Bei Arbeiten an einem der beteiligten Server sollte die Replikation ausgesetzt werden.


aktualisiert am 27.12.2007 18:51:05 ©W.Meinhart
eXTReMe Tracker