Hoe maak je MySQL Master-Slave replicatie?

Hoe maak je MySQL Master-Slave replicatie?

Voordat we naar de 'hoe te doen' sectie gaan, laten we kort de vereisten bespreken.

  • We hebben minimaal 2 fysieke of virtuele machines nodig. In dit artikel zullen we twee Debian 10 virtuele machines gebruiken. We raden ten zeerste aan om dezelfde distributies te gebruiken. Beide virtuele machines moeten dezelfde MySQL-versie geïnstalleerd hebben.
  • Firewall configuratie voor ufw.
  • Voor de communicatie tussen de master- en slave-machines is een NTP-server vereist die op beide geïnstalleerd en gesynchroniseerd werkt.

Aangezien we kort de vereisten hebben besproken, kunnen we naar het configuratiegedeelte gaan.

1. NTP Configuratie

Onze eerste stap is om dezelfde NTP-configuratie op beide machines te maken. Als je het nog niet hebt geïnstalleerd, kun je de NTP-server installeren met de onderstaande opdracht.

apt -y install ntp

Nu gaan we de NTP-servers die we hebben geïnstalleerd zodanig configureren dat ze met elkaar gesynchroniseerd zijn. In dit artikel zullen we de NTP-servers in Azië gebruiken.

*nano /etc/ntp.conf*
server 0.asia.pool.ntp.org iburst
server 1.asia.pool.ntp.org iburst
server 2.asia.pool.ntp.org iburst
server 3.asia.pool.ntp.org iburst

Na het bewerken van het configuratiebestand, slaan we het op en herstarten we de NTP-service.

*/etc/init.d/ntp restart*

2. Machines Moeten Elkaar Herkennen

Alle servers die we gebruiken moeten elkaar herkennen en zonder problemen kunnen communiceren. Als het beschikbaar is, kun je lokale DNS gebruiken. In ons voorbeeld configureren we het hosts-bestand omdat we geen DNS hebben.

*nano /etc/hosts*
master_server_ip master_server_hostname
slave_server_ip slave_server_hostname

Vergeet niet dat alle configuraties die we zullen maken volledig op alle servers moeten worden uitgevoerd VERGEET NIET.

3. Firewall Configuratie

Als je het aan het begin van het artikel niet hebt geïnstalleerd, moet je eerst ufw installeren met de onderstaande opdracht.

apt -y install ufw

Als je verbinding maakt via SSH, moet je na de installatie eerst toestemming geven voor de SSH-poort. Anders kun je je SSH-verbinding verliezen wanneer je de ufw-service start.

ufw allow 22
ufw allow from slave_server_ip to any port 3306
systemctl enable ufw
systemctl start ufw
ufw enable

We hebben eerst toestemming gegeven voor 22, dat is de SSH-poort, en de regel die we hebben geschreven is de permissie voor 3306, de poort die door MySQL wordt gebruikt. Vergeet niet het slave_server_ip-gedeelte te vervangen door het IP-adres van je slave-machine.

Als alles tot hier goed is, kunnen we nu beginnen met de configuratie van onze masterserver.

4. Master Server Configuratie

Op Debian 10 bevindt het MySQL-serverconfiguratiebestand zich onder de naam **mysqld.cnf** in de map **/etc/mysql/mysql.conf.d/**. Eerst openen we het op onze masterserver met de **nano**-editor. Als je een andere editor wilt gebruiken, kun je dat ook doen.

nano /etc/mysql/mysql.conf.d/mysqld.cnf

Na het openen van het bestand, bewerken we eerst het verbindingsadres. Als de volgende regel nog niet bestaat, voeg deze dan zelf toe.

bind-address = master_server_ip

Na het aanpassen van de bind-address, zoek je de regel **server-id**. Als deze niet bestaat, voeg deze dan toe zoals hierboven. Je kunt 1 als waarde geven, deze waarde moet uniek zijn voor de servers.

server-id = 1

Na deze stap moeten we de locatie van het MySQL-binary logbestand opgeven. Als deze pad niet wordt opgegeven, zal de binary logging inactief zijn en zal je slave-server de logbestanden niet kunnen lezen om te weten wat het moet repliceren. We geven de pad als volgt op.

log_bin = /var/log/mysql/mysql-bin.log

Als laatste moeten we de database of databases opgeven die gerepliceerd moeten worden.

binlog_do_db = testdb

Nadat je alle wijzigingen hebt aangebracht, sla het op door achtereenvolgens de toetsen CTRL + X, Y en ENTER in te drukken.

Na het afsluiten herstarten we de MySQL-service.

systemctl restart mysql

We hebben het configuratiegedeelte van onze masterserver afgerond, maar voordat we naar onze slave-server gaan, moeten we nog een paar kleine dingen doen. We moeten een gebruiker aanmaken en toegang verlenen zodat de slave-server kan verbinden voor replicatie. We gaan verder door in de MySQL shell te gaan.

mysql -u root -p
CREATE USER 'slave_user'@'slave_server_ip' IDENTIFIED WITH mysql_native_password BY 'password';
Let op dat deze opdracht aangeeft dat de slave-gebruiker de mysql native password authenticatie plugin zal gebruiken. In plaats daarvan is het ook mogelijk om de standaard authenticatiemechanisme van MySQL, namelijk caching_sha2_password, te gebruiken, maar hiervoor moet er een versleutelde verbinding tussen de master- en slave-server tot stand komen. Dit soort configuratie zal ideaal zijn voor productieomgevingen, maar de versleutelde verbindingsconfiguratie is niet beschikbaar in deze tutorial.
GRANT REPLICATION SLAVE ON *.* TO 'slave_user'@'slave_server_ip';
FLUSH PRIVILEGES;

Daarmee hebben we de configuratie van de masterserver afgerond. Hoewel onze configuratie is voltooid, verlaat u de MySQL shell nog niet. In de volgende stap zullen we belangrijke informatie over het binary log bestand van onze database ophalen.

MySQL past replicatie toe door database-evenementen line-by-line te kopiëren vanuit het binary log bestand van de bron en elk evenement op de slave-server toe te passen. Daarom moeten we ook de naam van het binary log bestand van onze masterserver en de coördinaten die een specifieke locatie binnen dit bestand beschrijven opgeven tijdens de configuratie aan de slave-serverzijde.


Om ervoor te zorgen dat geen enkele gebruiker gegevens wijzigt terwijl we de coördinaten ophalen, moeten we de database kort vergrendelen.
FLUSH TABLES WITH READ LOCK;

Voer daarna de onderstaande code uit om de status van de binary logbestanden te bekijken.

SHOW MASTER STATUS;

```

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

| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |

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

| mysql-bin.000001 | 899 | testdb | | |

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

1 row in set (0.00 sec)

```

Je zult een output krijgen die lijkt op het bovenstaande.

Als er op je masterserver nog geen database bestaat, maak dan eerst de ontgrendeling en vervolgens de database aan.

UNLOCK TABLES;
CREATE DATABASE testdb;

Na deze stap zijn we klaar met ons werk op de masterserver. Vergeet de informatie van het binary log bestand die we hierboven hebben verkregen absoluut niet. We zullen het zo meteen gebruiken op onze slave-server.

5. Slave Server Configuratie

In dit gedeelte passen we het configuratiebestand aan op een manier die vergelijkbaar is met wat we op de masterserver hebben gedaan. Omdat dit hierboven is uitgelegd, zullen we de stappen snel doorlopen.

nano /etc/mysql/mysql.conf.d/mysqld.cnf
server-id = 2
log_bin = /var/log/mysql/mysql-bin.log
binlog_do_db = testdb

Voeg tot slot de relay-log directief toe die de pad naar het relay log bestand op de slave-server definieert.

relay-log = /var/log/mysql/mysql-relay-bin.log

Na het aanbrengen van de wijzigingen herstarten we hier ook de MySQL-service.

systemctl restart mysql

We zijn nu klaar om de replicatie te testen. We loggen in op de MySQL shell op onze slave-server.

mysql -u root -p

Nu is het tijd voor het replicatieproces. We geven de informatie in die we moeten invoeren zodat de slave-server op de masterserver wordt herkend.

CHANGE REPLICATION SOURCE TO
SOURCE_HOST='master_server_ip',
SOURCE_USER='slave_user',
SOURCE_PASSWORD='password',
SOURCE_LOG_FILE='mysql-bin.000001',
SOURCE_LOG_POS=899;
START REPLICA;

Als alle stappen correct zijn uitgevoerd, zullen vanaf dit moment alle wijzigingen die in de **testdb** database worden aangebracht, ook naar onze slave-server worden verzonden.

SHOW REPLICA STATUS\G

We kunnen de status van de replicatie op onze slave-server zien met het bovenstaande commando.

```

*************************** 1. row ***************************

Replica_IO_State: Waiting for master to send event

Source_Host: 'slave_server_ip'

Source_User: slave_user

Source_Port: 3306

Connect_Retry: 60

Source_Log_File: mysql-bin.000001

Read_Source_Log_Pos: 1273

Relay_Log_File: mysql-relay-bin.000003

Relay_Log_Pos: 729

Relay_Source_Log_File: mysql-bin.000001

```

Je zult een output krijgen die lijkt op het bovenstaande. We hebben nu een MySQL-replicatie met een Master-Slave-relatie opgezet. Je kunt testen door een tabel aan je database op de masterserver toe te voegen.

Op zoek naar auteurs en journalisten!

Op zoek naar auteurs en journalisten!

Als je een journalist bent die graag diep in onderwerpen duikt die betrekking hebben op bedrijven en sectoren, willen we graag met je samenwerken!

Fatih Çevik

PlusClouds Enthousiast
Sales

Productinformatie

#
Auto Quill
AutoQuill schrijft en plaatst affiliate marketinginhoud voor jou.

Gemakkelijkste Geld Dat Je Ooit Zult Verdienen

Met de AutoQuill-tool die PlusClouds is gaan aanbieden aan zijn affiliate partners, kunnen contentmakers met een enkele klik verkopen. Laat ons u laten zien hoe u uw aandeel in deze revolutie kunt krijgen.