L4L.be

...because open source matters

  • Increase font size
  • Default font size
  • Decrease font size
Home Linux Documentatie Server toepassingen MySQL master - slave replicatie

MySQL master - slave replicatie

E-mail Print PDF

In dit document zal ik in het kort behandelen hoe je een master - slave replicatie op kunt zetten. In deze howto ga ik er vanuit dat de MySQL server geinstalleerd is, en ook dat het root account geconfigureerd is. En uiteraard: omdat we een replicatie gaan bouwen, moet dit gebeurd zijn op 2 servers.

Daarnaast gaan we er in dit document vanuit dat je weet hoe je aanlogt op een MySQL server en vertrouwd bent met SQL query's

Voor het gemak noem ik node1 vanaf nu de master en node2 de slave.

Configuratie

Als eerste stap gaan we node1 gaan configureren, aangezien dit de master is.

Login op de MySQL server van node1, en voer daar het volgende commando uit om aan te geven welke server een slave wordt, in ons geval node2.

GRANT REPLICATION SLAVE ON *.* TO 'replication'@'192.168.1.%' 
IDENTIFIED BY 'slavepassword';

Omdat node2 in dit voorbeeld een 192.168.1.0/24 net werk zit en er eventueel nog meer slave machines bij zouden kunnen komen kiezen we er voor dit hele segment toegang te geven onder account replication en wachtwoord slavepassword. Uiteraard kunnen deze 2 laatste variabelen naar eigen wens worden vervangen.

Als je security echt een issue is zou je er ook voor kunnen kiezen om elke slave zijn eigen account te geven en deze ook nog te restricten op ip-adres in plaats van een heel segment aan te geven.

Nu dit is uitgevoerd gaan we de database kopieren naar de andere machine, in dit geval node2. Belangrijkste hierbij is dat er geen wijzigingen meer plaats vinden op de database, de beste methode hiervoor is simpelweg door de MySQL op node1 te stoppen:

/etc/init.d/mysqld stop

Er zijn natuurlijk verschillende manieren om de data over te brengen naar node2, ik zal hier 1 van de methodes beschrijven.

Ga naar de /var/lib directory waar een map mysql staat met de databases die eventueel al aanwezig zijn (deze directory is de locatie waar de meeste distributies de databases opslaan). Tik in deze map het volgende in:

tar -pzcvf /root/mysql.tar.gz mysql/ 

Kopier nu met bijvoorbeeld scp het bestand naar node2 en pak het daar uit in de zelfde /var/lib directory:

scp /root/mysql.tar.gz root@node2:/var/lib 

Op node2 moet de MySQL eveneens gestopt zijn voordat je verder gaat !

Om de mysql.tar.gz uit te pakken voeren we de volgende commando's uit:

cd /var/lib 
/etc/init.d/mysqld stop 
tar -zxvf mysql.tar.gz
rm -f mysql.tar.gz

We gaan nu zorgen dat de binaire logfiles worden weggeschreven voor de acties die worden uitgevoerd. Op deze manier kunnen we de replicatie geheel in orde maken.

Ga nu terug naar node1 en open het bestand /etc/my.cnf. Zoek in dit bestand naar de kop [mysqld] en vul hier het volgende bij in:

log-bin=mysql-bin 
server-id=1

Als deze waarden zijn ingevoerd kan de master server worden gestart met het commando:

/etc/init.d/mysqld start 

Log nu in op deze mysql server met de client en voer het het volgende commando uit:

show master status;

Als het goed is krijg je een output zoals deze:

+------------------+----------+--------------+------------------+

| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |

+------------------+----------+--------------+------------------+

| mysql-bin.000001 |       98 |              |                  |

+------------------+----------+--------------+------------------+
1 row in set (0.00 sec)

Het gaat voornamelijk om de kolomen File en Position. Het getal wat hier staat is nodig voor de configuratie op de slave server. We gaan dan nu ook naar node2 terug. Ook hier gaan we de /etc/my.cnf bewerken onder de kop [mysqld].

server-id=2

Na dat dit is opgeslagen kan de MySQL server op node2 ook worden gestart.

Log nu in op de MySQL server van node2 en voer het volgende commando uit.

CHANGE MASTER TO MASTER_HOST=IP  Node1, 
MASTER_USER='replication', MASTER_PASSWORD='slavepassword', 
MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS=98;

LET OP: De MASTER_LOG_FILE en MASTER_LOG_POS kunnen afhankelijk van de door jou gebouwde setup anders zijn dan in deze tutorial beschreven.

Nu moeten we het slave gedeelte nog starten, dit doen we door het volgende commando uit te voeren:

START SLAVE;

Om nu een simpele controle te doen maak je op node1 een database aan, en controleer hierna op node2 met het commando: show databases; of deze database ook is aangemaakt. Indien dit werkt is je replicatie gelukt.

node1:

create database meeep;


node2:

show databases;


Kijk of meeep als database erbij staat. Om eventueel meer informatie te zien als het niet werkt kan er altijd nog gekeken worden naar:

show slave status; 

Een laatste waarschuwing: maak alleen wijzigingen op de master server aan, alles wat op de slave wordt gedaan wordt namelijk niet naar de master gerepliceerd.

Last Updated on Tuesday, 28 July 2009 21:13