Met MySQL-replicatie kunt u eenvoudig de database van de ene server naar de andere kopiëren. MySQL ondersteunt verschillende soorten replicatie, zoals master-slave, master-master en groepsreplicatie. MariaDB ondersteunt ook multi-master replicatie. In dit artikel zullen we Master-Slave-replicatie in MySQL bekijken en leren hoe de MySQL-database in Linux kan worden gerepliceerd. U kunt deze stappen gebruiken om de MySQL-database te repliceren in Ubuntu, Debian, CentOS, Fedora, Red Hat en andere typen Linux.
MySQL-database repliceren
Hier zijn de stappen om de MySQL-database te repliceren. Voor onze setup hebben we een master-database (IP – 54.24.32.12) en een slave-database (IP – 45.12.21.23) nodig. We repliceren de database met de naam exampledb van meester tot slaaf. We zijn ervan uitgegaan dat je MySQL op beide servers hebt geïnstalleerd en dat je voor beide root-rechten hebt. Anders kunt u MySQL installeren met het volgende commando
$ sudo apt-get install mysql-server mysql-client
Bonus Lezen:Top MySQL Workbench-alternatieven
1. Hoofdconfiguratiebestand bewerken
Open terminal op de server van de masterdatabase en voer de volgende opdracht uit
$ sudo vi /etc/mysql/my.cnf
Standaard zijn externe verbindingen uitgeschakeld in MySQL. We moeten externe verbinding van slave naar master toestaan voor replicatie. Daarom verwijderen we de commentaar van de volgende twee regels om externe verbindingen mogelijk te maken, door # aan het begin toe te voegen, zoals hieronder weergegeven
#skip-networking #bind-address=127.0.0.1
Voeg commentaar toe aan de volgende regels in het [mysqld]-blok om er als volgt uit te zien.
[mysqld]
server-id=1
log-bin = /var/log/mysql/mysql-bin.log binlog-do-db=exampledb
Laten we naar elk van de bovenstaande regels kijken. De eerste regel server-id specificeert een uniek ID-nummer voor master. Het moet een positief getal zijn van 1 tot 2^32.
log-bin specificeert de locatie van het logbestand die door MySQL zal worden gevuld met details van replicatie.
binlog-do-db geeft de naam aan van de database die moet worden gerepliceerd.
Start MySQL Server opnieuw om wijzigingen toe te passen
$ sudo service mysql restart
Log in op MySQL als rootgebruiker
$ sudo mysql -u root -p
en voer de volgende opdracht uit
mysql> SHOW MASTER STATUS; +------------------+----------+--------------+------------------+ | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | +------------------+----------+--------------+------------------+ | mysql-bin.000001 | 107 | exampledb | | +------------------+----------+--------------+------------------+
Let op de bovenstaande details, we hebben ze later in stap #3 nodig.
Bonus lezen:SSL/TLS inschakelen in MySQL
2. Replicatiegebruiker maken
Log in op de MySQL-server op de master.
$ sudo mysql -u root -p
U wordt gevraagd om het root-wachtwoord.
Nadat u zich hebt aangemeld bij MySQL, voert u de volgende opdrachten uit om een externe gebruiker slave_user te maken , en verleen het replicatiemachtigingen voor alle databases. Vervang 45.12.21.23 hieronder door het IP-adres van uw slave-server en vervang $password door een geschikt wachtwoord volgens uw vereisten.
mysql> CREATE USER slave_user@45.12.21.23; mysql> GRANT REPLICATION SLAVE ON *.* TO slave_user@45.12.21.23 IDENTIFIED BY '$password'; mysql> FLUSH PRIVILEGES;
Voeg een inkomende firewallregel toe voor poort 3306 en sta 45.12.21.23. Deze externe gebruiker moet verbinding maken met de hoofddatabase om replicatie te laten plaatsvinden.
Bonus lezen:hoe u de verzameling van alle tabellen in MySQL kunt wijzigen
3. Slave-configuratiebestand bewerken
Open terminal op de server van de slave-database en voer de volgende opdracht uit
$ sudo vi /etc/mysql/my.cnf
Voeg de volgende regels toe onder [mysqld] om eruit te zien als
[mysqld] server-id = 2 relay-log = /var/log/mysql/mysql-relay-bin.log log_bin = /var/log/mysql/mysql-bin.log binlog_do_db = exampledb
In de eerste regel wijzen we server-ID van 2 toe aan slave-server. De volgende paar regels specificeren locaties van relaislogbestanden en replicatielogbestanden. De laatste regel specificeert de database die moet worden gerepliceerd.
Start MySQL Server opnieuw en log in op MySQL
$ sudo service mysql restart $ sudo mysql -u root -p
Voer de volgende opdrachten uit om een lege database op slave te maken.
mysql> CREATE DATABASE exampledb; mysql> USE exampledb;
Laad gegevens uit de masterdatabase om de slavedatabase te vullen
mysql> LOAD DATA FROM MASTER;
Sluit MySQL af.
Bonus lezen:Top databaseblogs om te volgen
4. Replicatie initialiseren
Terwijl u bent aangemeld bij MySQL, voert u de volgende opdrachten uit om het replicatieproces te starten. Vervang onderdelen in vet met uw waarden.
mysql> SLAVE STOP; mysql> CHANGE MASTER TO MASTER_HOST='54.24.32.12', MASTER_USER='slave_user', MASTER_PASSWORD='<password>', MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS=107;
MASTER_HOST – IP-adres of hostnaam van de master (54.24.32.12).
MASTER_USER – slave-gebruiker die we in stap #2 hebben gemaakt.
MASTER_PASSWORD - wachtwoord van de slave-gebruiker die we in stap #2 hebben gemaakt.
MASTER_LOG_FILE – bestand dat MySQL teruggaf in stap #1 toen je rende
TOON HOOFDSTATUS
MASTER_LOG_POS – positie die MySQL teruggaf toen je SHOW MASTER STATUS uitvoerde in stap #1
Ten slotte starten we de slave om de replicatie van de MySQL-database te starten.
mysql> START SLAVE;
Hopelijk helpt dit artikel u bij het repliceren van de MySQL-database.