MySQL-replicatie is een interessante functie waarmee gebruikers meerdere kopieën van een of meer MySQL-databases kunnen beheren. De gegevens worden automatisch gekopieerd van bron naar replica databases. Het kan in tal van situaties nuttig zijn, zoals het werken met de gegevens zonder de hoofddatabase in gevaar te brengen, gegevensback-up of het schalen van de databasetoegang, enz.
In deze handleiding zullen we de stappen doorlopen voor het opzetten van een MySQL-instantie op de ene server als brondatabase, en vervolgens het configureren van een MySQL-instantie op een andere server om als replica te functioneren.
Vereisten
Deze handleiding demonstreert een heel eenvoudig voorbeeld van MySQL-replicatie. Het gaat om één bron en één replica database. De bron database is de primaire kopie van de database, terwijl de replica database de replica zal zijn van de bron database. Voor onze demonstratie zijn twee servers geconfigureerd met de volgende IP-adressen:
- Bronserver: 31.171.240.179
- Replicaserver: 31.171.250.139
Elke server is geconfigureerd met de nieuwste Ubuntu 20.04 server configuratie. Volg eerst de stappen van de tutorial die laten zien hoe u uw Ubuntu-server instelt. Merk op dat het aantal replicadatabases groter kan zijn. Deze handleiding gaat ervan uit dat u MySQL al hebt geïnstalleerd en geconfigureerd. Hulp nodig bij de MySQL-installatie? Deze handleiding demonstreert in detail de stappen van MySQL-installatie en basisgebruik.
Kortom, hier zijn de pakketten die u nodig heeft:
|
1 |
$ sudo apt install mysql-server mysql-client |
Firewalls op beide systemen moeten worden geconfigureerd om verkeer van beide systemen toe te staan op poort 3306. Dit is de standaardpoort voor MySQL. U kunt meer leren over UFW-basisprincipes met een demonstratie in onze blogpost.
Configuratie van de brondatabase
-
MySQL-configuratie aanpassen
MySQL gebruikt my.cnf als het primaire configuratiebestand. We zullen my.cnf bijwerken om de server aan te wijzen als de bron. Open eerst het configuratiebestand met een teksteditor:
|
1 |
$ sudo nano /etc/mysql/my.cnf |
Voeg vervolgens de volgende regels toe onder de mysqld sectie:
|
1 2 3 4 |
bind-address = 31.171.240.179 server-id = 1 log_bin = /var/log/mysql/mysql-bin.log binlog_do_db = newdatabase |
Wat betekenen deze regels?
bind-address: Dit is de invoer die de associatie tussen een service en een IP-adres definieert. Standaard kan de waarde127.0.0.1(localhost) zijn. De nieuwe waarde is het IP-adres van de server.server-id: Bij MySQL-replicatie moet elke server een uniek server-ID hebben. Dit kan elk getal zijn. Omwille van de eenvoud is dit ingesteld op1.log_bin: Dit slaat de werkelijke details van de replicatie op. De replicadatabase gaat alles kopiëren wat in het logboek is geregistreerd.binlog_do_db: Deze invoer wijst de database aan die het onderwerp van replicatie zal zijn op de replicaserver. Er kan meer dan één database zijn. Hier is de voorbeelddatabasenewdatabase.
Sla na het aanbrengen van de wijzigingen het configuratiebestand op. MySQL moet opnieuw worden opgestart om de wijzigingen in de my.cnf:
|
1 |
$ sudo service mysql restart |
-
Toestemming verlenen aan de replicagebruiker
De volgende stap is het aanmaken van een replicagebruiker en het verlenen van de juiste privileges. Dit moet worden gedaan vanuit de MySQL-shell. Start eerst de MySQL-shell:
|
1 |
$ sudo mysql -u root -p |
Maak vervolgens een speciale gebruiker aan voor de replicadatabase. Wijzig de gebruikersnaam en het wachtwoord op de juiste manier:
|
1 |
$ CREATE USER 'cloudsigma_s'@'31.171.240.179' IDENTIFIED BY 'password_123'; |
Verleen nu de juiste privileges aan de gebruiker:
|
1 |
$ GRANT REPLICATION SLAVE ON *.* TO 'cloudsigma_s'@'31.171.240.179'; |
U kunt meer leren over de MySQL-gebruiker en -machtigingen in onze blogpost. Laad vervolgens de privilege-tabel opnieuw om de wijzigingen door te voeren:
|
1 |
$ FLUSH PRIVILEGES; |
-
De database aanpassen
We hebben een kopie van de brondatabase op de replica nodig. Het is mogelijk om de structuur handmatig op te bouwen. In de meeste gevallen is dat echter vrij onhandig. Daarom is het rechtstreeks exporteren van de database de meest optimale oplossing. In dit voorbeeld is de brondatabase newdatabase. Wijzig de huidige database:
|
1 |
$ USE newdatabase; |
Het volgende commando zal de database vergrendelen, waardoor nieuwe wijzigingen worden voorkomen:
|
1 |
$ FLUSH TABLES WITH READ LOCK; |
Controleer vervolgens de status van de database:
|
1 |
$ SHOW MASTER STATUS; |
Vanaf deze positie zal de replica-database beginnen met repliceren vanaf de bron. Deze nummers zullen later nuttig zijn, dus noteer ze. Als er wijzigingen worden aangebracht vanuit hetzelfde venster, zal MySQL de database automatisch ontgrendelen. Het wordt daarom aanbevolen om de volgende stappen uit te voeren in een ander terminaltabblad of -venster. De database is nog steeds vergrendeld. Exporteer deze naar een draagbaar SQL-bestand:
|
1 |
$ mysqldump -u root -p --opt newdatabase > newdatabase.sql |
De taak is nu voltooid. Ontgrendel vervolgens de database:
|
1 |
$ UNLOCK TABLES; |
Sluit ten slotte de shell af:
|
1 |
$ QUIT; |
Replica-configuratie
Het is nu tijd om de replica-database te configureren.
-
De brondatabase importeren
We hebben een kopie van de brondatabase op de replica-server nodig. We gebruiken hiervoor het SQL-bestand dat we eerder hebben geëxporteerd. Start de MySQL-shell:
|
1 |
$ sudo mysql -u root -p |
Maak daarna een lege database aan met dezelfde databasenaam:
|
1 |
$ CREATE DATABASE newdatabase; |
Sluit vervolgens de shell af:
|
1 |
$ EXIT; |
Importeer nu het SQL-bestand in de database:
|
1 |
$ sudo mysql -u root -p newdatabase < newdatabase.sql |
-
De MySQL-configuratie aanpassen
Er moeten een paar dingen worden gedeclareerd in het MySQL-configuratiebestand. Open het configuratiebestand in een teksteditor:
|
1 |
$ sudo nano /etc/mysql/my.cnf |
De volgende vermeldingen komen onder de mysqld sectie. Anders werkt het niet. De eerste is de server-ID. Zoals eerder vermeld, moet deze uniek zijn voor alle servers in de bron-replica replicatieconfiguratie. Ter demonstratie is deze ingesteld op 2:
|
1 |
$ server-id = 2 |
Voeg vervolgens de volgende regels toe:
|
1 2 3 |
$ relay-log = /var/log/mysql/mysql-relay-bin.log $ log_bin = /var/log/mysql/mysql-bin.log $ binlog_do_db = newdatabase |
Hier is alleen relay-log een nieuwe vermelding. Dit is het logboek dat de replica-server maakt tijdens de replicatie. De logboekindeling is hetzelfde als die van het binaire logboek. Sla het configuratiebestand op en start MySQL opnieuw op:
|
1 |
$ sudo service mysql restart |
-
De replicatie inschakelen
Ten slotte zijn we klaar om de replicatie in te schakelen vanuit MySQL. Start de MySQL-shell:
|
1 |
$ sudo mysql -u root -p |
Voer het volgende commando uit. Pas eerst het IP-adres, de gebruikersnaam en de wachtwoorden dienovereenkomstig aan:
|
1 |
$ CHANGE MASTER TO MASTER_HOST='31.171.240.179',MASTER_USER='cloudsigma_master', MASTER_PASSWORD='password_123', MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS= 107; |
Het commando doet het volgende:
- De huidige server wordt gemarkeerd als de replica van de bronserver.
- De replica-server heeft de juiste inloggegevens.
- De replica-server weet vanaf waar de replicatie moet starten. Herinnert u zich de databasestatus nog die we op de bronserver hebben gecontroleerd? Het bronlogbestand en de logpositie komen daar vandaan.
Activeer ten slotte de replica-server:
|
1 |
$ START REPLICA; |
-
Diversen
Wilt u de details van de huidige status van de replica controleren? Voer het volgende commando uit in de MySQL-shell. De \G aan het einde is om de teksten opnieuw te rangschikken om ze leesbaarder te maken:
|
1 |
$ SHOW REPLICA STATUS\G |
Als er een verbindingsprobleem is, probeer dan de replica-server te starten om dit over te slaan:
|
1 |
$ SET GLOBAL SQL_REPLICA_SKIP_COUNTER = 1; REPLICA START; |
Conclusie
MySQL-replicatie heeft veel implicaties. Het is slechts een korte demonstratie van de basisvorm. Het kan echter eenvoudig worden uitgebreid naar meerdere bron-replica-configuraties. Dezelfde stappen zijn ook van toepassing op complexere configuraties van een hoger niveau. Het is altijd een goed idee om elke configuratie achteraf te testen. Probeer enkele insert, delete of update-opdrachten uit te voeren op de brondatabase. Als de setup werkt, zou de replica-database alles correct moeten overnemen.
Daarnaast kun je een blik werpen op meer bronnen op onze blog over wat je met MySQL kunt doen:
- SQLite vs MySQL vs. PostgreSQL: Relationele databasebeheersystemen vergeleken
- Hoe het root-wachtwoord van MariaDB of MySQL te herstellen
- Hoe de LEMP-stack (Linux, Nginx, MySQL PHP) op Ubuntu 20.04 te installeren
Veel computerplezier!







Reacties
Nog geen reacties. Wees de eerste.