Inhaltsverzeichnis

MySQL Replication

MySQL Replication kann zum Load-Balancing und zur Ausfallsicherheit genutzt werden. In folgendem Tutorial ist die Installation einer Master-Slave-Umgebung beschrieben.

Wie es funktioniert

Die MySQL-Replikation funktioniert, in dem der Slave-Server aus dem Binärlog des Master-Servers alle ausgeführten Queries auch ausführt. Das Konzept stößt jedoch bei komplexen Queries mit Transaktionen und Triggern an seine Grenzen und für jeden Einsatzzweck muss geprüft werden, ob die Lösung umsetzbar ist.

Konfiguration

Die Installation wird nach Vorschlag von Schwartz et al. (2008)1) durchgeführt.

Schritt 1: Installieren von MySQL auf allen Servern

Unter Debian und Ubuntu erhält man den MySQL-Server mittels

apt-get install mysql-server

Schritt 2: Nicht-Lokale Serverzugriffe freischalten

Standardmäßig sind nur Zugriffe auf den Server über die interne Netzwerkkarte localhost möglich, weshalb in der my.cnf die externe Netzwerkkarte eingegeben werden muss, bzw. 0.0.0.0 für Zugriffe von allen Netzwerkkarten eingetragen werden muss (my.cnf-Datei wahrscheinlich in /etc/mysql zu finden):

bind-address    = [server-address]

Schritt 3: Einrichten von Replication-Accounts

Nun können wir User-Accounts auf Client und Server erstellen. Schwartz et al. (2008)2) schlagen vor, auf allen Serveren Nutzer mit den Rechten REPLICATION SLAVE und REPLICATION CLIENT anzulegen, jedoch sollte man die Zugriffsrechte auf das tatsächlich benötigte Netzwerk beschränken, da die Replikation unsicher sei.

mysql> GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO repl@[ip] IDENTIFIED BY '[password]'

Die [ip] Adresse kann Wildcards enthalten: %.

Mehr zu den Rechten wie REPLICATION SLAVE bzw, REPLICATION CLIENT sind hier zu finden.

Schritt 4: Master-konfiguration

Auf allen Maschinen muss das binary-logging aktiviert werden und eine eindeutige Server-ID gesetzt werden, dies geschieht alles in der my.cnf:

log_bin    = /var/log/mysql/mysql-bin.log
server_id  = 10

Nach einem Dienstneustart können wir checken, ob alles läuft:

mysql> SHOW MASTER STATUS;

Die Ergebnisse dieser Abfrage benötigen wir in Schritt 6, wenn wir den Slave zum Master verbinden.

Schritt 5: Slave-Konfiguration

Wie beim Master müssen Konfigurationen in der my.cnf erfolgen:

  log_bin            = /var/log/mysql/mysql-bin.log
  server_id          = 20
  relay_log          = /var/log/mysql/mysql-relay-bin.log
  log_slave_updates  = 1
  read_only          = 1

Schritt 6: Connecting the slave to the master

Die Verbindung zum Master geschieht mit folgender Abfrage:

mysql> CHANGE MASTER TO MASTER_HOST='[master-address]',
    -> MASTER_USER='[user]',
    -> MASTER_PASSWORD='[password]',
    -> MASTER_LOG_FILE='[logfile]',
    -> MASTER_LOG_POS=[position];

[master-address], [user] und [password] sind die Replication-Account-Informationen am Master.

Die Informationen über [logfile] und [position] können aus der Abfrage SHOW MASTER STATUS; in Schritt 4.

Schritt 7: Starting the replication

Vor dem Start der Replikation können wir mit folgender Abfrage den Status überprüfen:

mysql> SHOW SLAVE STATUS\G

Alle Einstellungen müssen wie konfiguriert erscheinen und Slave_IO_Running, wie auch Slave_SQL_Running müssen auf No stehen.

Nun können wir die Replikation starten:

mysql> START SLAVE;

und überprüfen, ob alles einwandfrei funktioniert:

mysql> SHOW SLAVE STATUS\G

Wir können die Replizierung auch in der Prozessliste sehen:

mysql> SHOW PROCESSLIST\G

Fehlerbehandlung

Falls es beim Start der Replikation zu einer Fehlermeldung kommt, dass Primary Keys doppelt vergeben sind, kann man folgendes versuchen:

MySQL Server stoppen:

# service mysql stop

In der Datei /etc/mysql/my.cnf folgenden Eintrag im Abschnitt [mysqld] hinzufügen:

slave-skip-errors=1062

MySQL Server neu starten:

# service mysql start

Wenn bei der Anzeige des Slave Status der Wert von „Seconds_Behind_Master“ auf 0 gesunken ist, entfernt man die Zeile wieder aus der Konfiguration und startet den MySQL Server neu

1) , 2) Schwartz, Baron; Zawodny, Jeremy D. (2008): High performance MySQL. 2. Aufl. Beijing ;, Sebastopol: O'Reilly.