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