sql >> Database >  >> RDS >> Mysql

Hoe MySQL-database naar een andere server te repliceren?

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.

  1. Load balancing met ProxySQL voor Percona XtraDB Cluster

  2. Hoe een kolomnaam in SQL te hernoemen?

  3. Databasefailover voor WordPress-websites

  4. Overeenkomstfunctie in Postgres met pg_trgm