MySQL Replicatie instellen (Master-Slave)

MySQL Replicatie

Met MySQL replicatie kunt u gegevens automatisch kopiëren van één MySQL-server (de master) naar één of meerdere slave-servers. Deze vorm van database-replicatie wordt veel gebruikt voor load balancing, back-ups, failover-oplossingen en het verhogen van de beschikbaarheid van databases.

MySQL-replicatie werkt asynchroon. Dit betekent dat de slave-server niet voortdurend verbonden hoeft te zijn met de master om wijzigingen te ontvangen. Hierdoor is replicatie ook mogelijk via langzame of niet-permanente netwerkverbindingen.

Afhankelijk van de configuratie kunt u:

  • Alle databases repliceren.
  • Specifieke databases repliceren.
  • Alleen geselecteerde tabellen repliceren.

Stap 1: Master-server configureren

Open het MySQL-configuratiebestand:

vi /usr/local/my.cnf

Voeg de onderstaande configuratie toe of pas deze aan. Vervang de IP-adressen, gebruikersnamen en wachtwoorden door uw eigen gegevens.

[mysqld]
log-bin
server-id = 1
replicate-same-server-id = 0
auto-increment-increment = 2
auto-increment-offset = 1

master-host = 192.168.100.69
master-user = slave1_user
master-password = slave1_password
master-connect-retry = 60

replicate-do-db = pdns
binlog-do-db = pdns
binlog-ignore-db = mysql

Replicatiegebruiker aanmaken

Maak een gebruiker aan die door de slave-server gebruikt wordt voor replicatie.

GRANT REPLICATION SLAVE ON *.* TO 'slave2_user'@'%' IDENTIFIED BY 'password';
FLUSH PRIVILEGES;

Database exporteren

Maak vervolgens een back-up van de database die gerepliceerd moet worden.

mysqldump -u root -p pdns > export.sql

MySQL opnieuw opstarten

Sluit de MySQL-console af en herstart de MySQL-server zodat de configuratie actief wordt.

/usr/local/etc/rc.d/mysql-server restart

Stap 2: Slave-server configureren

Open het configuratiebestand:

vi /etc/my.cnf

Voeg de volgende configuratie toe:

[mysqld]
server-id = 2

Database aanmaken

Maak dezelfde database aan op de slave-server.

CREATE DATABASE pdns;

GRANT REPLICATION SLAVE ON *.* TO 'slave1_user'@'%' IDENTIFIED BY 'slave1_password';

FLUSH PRIVILEGES;

Database importeren

Importeer vervolgens de eerder gemaakte database-export.

mysql -u root -p pdns < export.sql

MySQL opnieuw opstarten

Herstart de MySQL-server zodat alle instellingen actief worden.

/usr/local/etc/rc.d/mysql-server restart

Stap 3: Replicatie op de master voorbereiden

Log opnieuw in op de master-server.

mysql -u root -p

Voer vervolgens de onderstaande opdrachten uit.

FLUSH TABLES WITH READ LOCK;

USE pdns;

SHOW MASTER STATUS;

Noteer de waarden van:

  • File
  • Position

Deze gegevens zijn nodig bij de configuratie van de slave-server.


Stap 4: Slave verbinden met de master

Ga naar de slave-server en configureer de verbinding met de master.

Vervang hierbij:

  • MASTER_HOST
  • MASTER_USER
  • MASTER_PASSWORD
  • MASTER_LOG_FILE
  • MASTER_LOG_POS

door de juiste waarden.

CHANGE MASTER TO
MASTER_HOST='81.4.79.81',
MASTER_USER='slave1_user',
MASTER_PASSWORD='password',
MASTER_LOG_FILE='ns1-bin.000001',
MASTER_LOG_POS=98;

START SLAVE;

Wanneer de configuratie correct is uitgevoerd, zal de slave-server automatisch wijzigingen van de master-server synchroniseren.


Handige MySQL Replicatie-commando’s

Controleer de status van de replicatie met de volgende opdrachten.

SHOW MASTER STATUS;
SHOW SLAVE STATUS;
SHOW PROCESSLIST;

Met name SHOW SLAVE STATUS is belangrijk. Controleer of zowel:

  • Slave_IO_Running: Yes
  • Slave_SQL_Running: Yes

op Yes staan. Alleen dan functioneert de MySQL-replicatie correct.


Conclusie

Met MySQL Master-Slave replicatie creëert u een betrouwbare omgeving waarin databases automatisch worden gesynchroniseerd. Dit verhoogt de beschikbaarheid van uw applicaties en maakt het eenvoudiger om back-ups, failover-oplossingen en leesverkeer over meerdere servers te verdelen.

Gerelateerde onderwerpen

  • MySQL Replicatie
  • MySQL Master-Slave
  • Database Replicatie
  • MySQL Replication
  • MySQL High Availability
  • MySQL Backup

Add a Comment

Je e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *