Replikation (Synchronisierung)
Mit einer Replikation (Replication, Echtzeitsynchronisierung) wird eine
MySQL?-Datenbank auf zwei oder mehreren System synchron gehalten. Dies muss nicht nur Backupzwecken dienen, kann aber auch z.B. bei stark frequentierten Systemen der Lastverteilung dienen, da alle Systeme immer auf dem gleichen Stand sind und es egal ist, wo man nun neue Daten einpflegt oder sie abruft.
Einrichtung der Replikation
Achtung! Derzeit noch unvollständig!
In /etc/my.cnf auf dem Master-System müssen folgende Einträge zusätzlich vorhanden und gesetzt sein (Beispiele):
[mysqld] <- Diesen Menüpunkt suchen
server-id = 1 <- Eindeutige ID für jeden Server vergeben
master-host = amanda <- Hostname des Masters (z.B. der erste Server)
master-user = replication-username <- Ein beliebiger Username für die Replikation
master-password = replication-passwort <- Ein beliebiges Passwort für die Replikation
replicate-do-db = meinedb <- Soll nicht alles synchronisiert werden, dann hier die gewünschte DB angeben (sinnvoll)
log-bin
Kurzanleitung (Beispiel) aus dem Internet:
Posted by snix on July 28 2003 3:21am
Here is what I had to do to set up replication with LOAD DATA FROM MASTER:
1. Edit the my.cnf file on the slave and on the master server:
master my.cnf:
[mysqld]
server-id = 1
log-bin
slave my.cnf:
[mysqld]
server-id = 2
master-host = master-host.net
master-user = repl
master-password = repl_pass
replicate-do-db = database1
replicate-do-db = database2
log-warnings
2. Restart both the slave and the master.
3. On the master do:
GRANT SUPER,REPLICATION CLIENT,REPLICATION SLAVE,RELOAD ON *.* TO repl@"%" IDENTIFIED BY 'repl_pass';
4. On the slave do:
LOAD DATA FROM MASTER;
The slave should now download the databases specified with replicate-do-db in the slaves my.cnf, and be replicating new data.
Aus einer Mail von mir:
Hallo Heiko,
ich bin gerade auf ein potentielles Problem in der Datenbanksynchronisation gestossen.
mysql> update amanda.tabelle ...
wird laut Doku nicht mit dem anderen System synchronisiert. Dagegen klappt folgendes schon:
mysql> use amanda;
mysql> update tabelle ...
Ohne vorheriges use muss man einen anderen Parameter benutzen. Ich selbst mache eigentlich immer das use vorher, weiss nicht, wie Du das machst.
Anbei noch die Doku für replicate-do-db:
Weist den Slave-Thread an, die Replikation auf die angegebene Datenbank zu beschränken. Um mehr als eine Datenbank anzugeben, benutzen Sie die Anweisung mehrfach, einmal für jede Datenbank. Beachten Sie, dass das nicht funktioniert, wenn Sie Datenbank-übergreifende Anfragen wie UPDATE eine_datenbank.eine_tabelle SET foo='bar' ausführen, während Sie eine andere oder keine Datenbank ausgewählt haben. Wenn Sie Datenbank-übergreifende Aktualisierungen brauchen, stellen Sie sicher, dass Sie Version 3.23.28 oder höher verwenden und benutzen Sie replicate-wild-do-table=datenbank.%. Beispiel: replicate-do-db=eine_datenbank.
Gruss,
Rolf
Links: