Replication van MySQL in vogelvlucht



Replicatie (replication) van een database is het distributeren van je database naar andere machines, waarbij tevens wijzigingen op de master database gedistributeerd gaat worden naar zijn slave(s). Zodat je op alle slaves precies dezelfde database hebt.

Dit is weer handig voor het geval dat er een systemcrash gebeurt op je master-database. Let wel op dat je updates alleen op de master -database uitvoert en niet op een slave(s). Alleen wijzigingen die je doorvoert op de master-database worden naar de slave(s) gedistributeerd en niet andersom (slave -> master).

Om replicatie te beginnen moet je beschikken over :

- minimaal 2 systemen met hierop een MySQL versie 3.23.33 of hoger;
- enige ervaring met een editor en MySQL.

Let op niet alle MySQL versie werken goed met elkaar, zie documentatie van MySQL.

We beginnen met het tot stand brengen van de replicatie, bedenk hierbij dat je echt een replica maakt van de master-database.

[ 1 ] Gewis je er van dat je een MySQL bezit met versie 3.23.33 of hoger.
voorbeeld:

eistec:~ # mysql -u root -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 4 to server version: 3.23.52-log
Type 'help;' or '\h' for help. Type '\c' to clear the buffer.
mysql>


Het rode gedrukte geeft aan welke versie van MySQL je bezit, hier hebben we dus te maken met versie 3.23.52-log.

[ 2 ] Maak in MySQL een speciale replicatie gebruiker aan met de FILE (in versies die oudwer zijn dan versie 4.0.2) of met
REPLICATION SLAVE privilege voor nieuwe versies van MySQL. Deze gebruiker moet de rechten hebben om een
CONNECT te maken (van alle slaves). Als je de gebruiker alleen voor replicatie wil gaan gebruiken, wat door MySQL
aanbevolen wordt is het niet nodig om extra bevoegdheden aan deze gebruiker toe te voegen.

Voorbeeld: We creeeren een gebruiker met de naam repl die je master-database van elke slave kan benaderen.
mysql> GRANT FILE ON *.* TO repl@"%" IDENTIFIED BY '<wachtwoord>';

Vul bij <wachtwoord> een wachtwoord in die je voor de gebruiker repl@ wil gebruiken, let op, je moet de < en > ook weglaten.



[ 3 ]
Stop nu de MySQL server waar je master-database op staat.

Voorbeeld: mysqladmin -u root -p<wachtwoord> shutdown of

# /etc/init.d/mysql stop


[ 4 ]
Maak een snapshot van je master-database ,dmv:
# tar -cvf /tmp/mysql-snapshot.tar /pad/verwijzing/naar/data-directory
waarbij /pad/verwijzing/naar/data-directory je directory is waar de databases staan, bij SuSe, Debian is dit
/var/lib/mysql bij de standaard instelling.

[ 5 ] Wijzig nu de configuratie bestand my.cnf op de master-db zodat de volgende gegevens in dit bestand staan en wel onder
het kopje [mysqld]:
[mysqld]
log-bin
server-id=1

LET OP: dat alle machines die slave zijn van de master een andere server-id hebben.

[ 6 ] Herstart de MySQL server op de master-database machine, en stop de MySQL servers op je slave(s).

[ 7 ] Voeg nu de volgende regels toe aan de configuratiebestand 'my.cnf' op de slave(s):
master-host = <hostnaam van de master> kan ook IP-adres zijn.
master-user = <replicatie gebruikersnaam> bij ons is dit repl
master-password=<replicatie gebruikerswachtwoord> de door u gekozen wachtwoord.
master-port = <TCP/IP poortnummer van de masterdb> controleer je 'my.cnf' voor poortnummer , deze is te wijzigen.
server-id = <een unique nummer tussen de 2 en 2^32-1>

Ook hier moet je de < en > niet meenemen.

[ 8 ] Kopieer de gemaakte snapshot van de masterdatatbase in de data-directory van je slave(s) en extrakt deze. Verwijder de
.tar bestand uit deze directory.  Let op dat de gebruiker die de MySQL server opstart de rechten heeft om de databases van
de master te lezen en beschrijven kan, zoals dit ook door de master-database gebeurd.

[ 9 ] Herstart MySQL servers op je slave(s).

Als het bovenstaande goed is uitgevoerd en er geen duplicate server-id's zijn gebruikt, dan moeten de slave(s) nu connecten met de master database en gaan ze de updates op hun database uitvoeren als er na de snapshot op de masterdatabase wijzigingen zijn gebeurd. Als een slave bezig is met replication, dan vind je een bestand aan in je datadirectory van de slave namens 'master.info' hierin staat de informatie over de master-database naam, welke gebruiker voor replicatie gebruikt word. Verander nooit dit bestand, of verwijder het niet, hierdoor kan je replicatie verstoord raken.


Voor verdere informatie over replication verwijs ik je naar de site van MySQL .


Auteur : S. R. Eissens
Versie : 1.0.1
Datum : 21-Augustus-2003

www.Tuxzine.net