sql >> Databasteknik >  >> RDS >> Mysql

Hur man replikerar MySQL-databas till en annan server

MySQL-replikering låter dig enkelt kopiera databas från en server till en annan. MySQL stöder olika typer av replikering som master-slave, master-master och gruppreplikering. MariaDB stöder också multi-master replikering. I den här artikeln kommer vi att titta på Master-Slave-replikering i MySQL och lära oss hur man replikerar MySQL-databas i Linux. Du kan använda dessa steg för att replikera MySQL-databas i Ubuntu, Debian, CentOS, Fedora, Red hat och andra typer av Linux.


Hur man replikerar MySQL-databas

Här är stegen för att replikera MySQL-databas. För vår installation kommer vi att behöva en huvuddatabas (IP – 54.24.32.12) och en slavdatabas (IP – 45.12.21.23). Vi kommer att replikera databasen med namnet exampledb från herre till slav. Vi har antagit att du har MySQL installerat på båda dessa servrar, och att du har root-privilegier för dem båda. Annars kan du installera MySQL med följande kommando

$ sudo apt-get install mysql-server mysql-client

Bonus Läs:Top MySQL Workbench Alternativen


1. Redigera huvudkonfigurationsfil

Öppna terminalen på masterdatabasens server och kör följande kommando

$ sudo vi /etc/mysql/my.cnf

Som standard är fjärranslutningar inaktiverade i MySQL. Vi måste tillåta fjärranslutning från slav till master för replikering. Så vi avkommenterar följande två rader för att tillåta fjärranslutningar, genom att lägga till # i början, som visas nedan

#skip-networking
#bind-address=127.0.0.1

Lägg till eller avkommentera följande rader i blocket [mysqld] för att se ut som följande.

[mysqld]
server-id=1
log-bin = /var/log/mysql/mysql-bin.log
binlog-do-db=exampledb

Låt oss titta på var och en av raden ovan. Första radens server-id anger ett unikt ID-nummer för master. Det måste vara ett positivt tal från 1 till 2^32.

logga anger loggfilens plats som kommer att fyllas i av MySQL med detaljer om replikering.

binlog-do-db indikerar namnet på databasen som behöver replikeras.

Starta om MySQL Server för att tillämpa ändringar

$ sudo service mysql restart

Logga in på MySQL som root-användare

$ sudo mysql -u root -p

och kör följande kommando

mysql> SHOW MASTER STATUS;
+------------------+----------+--------------+------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000001 |      107 |   exampledb  |                  |
+------------------+----------+--------------+------------------+

Observera ovanstående detaljer, vi kommer att behöva dem senare i steg #3.

Bonus Läs:Hur man aktiverar SSL/TLS i MySQL


2. Skapa replikeringsanvändare

Logga in på MySQL-servern på master.

$ sudo mysql -u root -p

Du kommer att bli ombedd att ange root-lösenord.

Efter att ha loggat in på MySQL, kör följande kommandon för att skapa en fjärranvändare slave_user , och ge det replikeringsbehörigheter för alla databaser. Vänligen ersätt 45.12.21.23 nedan med din slavservers IP och ersätt $password med ett passande lösenord enligt dina krav.

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;

Lägg till en regel för inkommande brandvägg för port 3306 och tillåt 45.12.21.23. Den här fjärranvändaren måste ansluta till huvuddatabasen för att replikering ska ske.

Bonus Läs:Hur man ändrar samling av alla tabeller i MySQL


3. Redigera slavkonfigurationsfil

Öppna terminalen på slavdatabasens server och kör följande kommando

$ sudo vi /etc/mysql/my.cnf

Lägg till följande rader under [mysqld] för att se ut

[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

På den första raden tilldelar vi server-ID 2 till slavservern. Nästa par rader anger platser för relälogg- och replikeringsloggfiler. Sista raden anger databasen som ska replikeras.

Starta om MySQL Server och logga in på MySQL

$ sudo service mysql restart
$ sudo mysql -u root -p

Kör följande kommandon för att skapa en tom databas på slav.

mysql> CREATE DATABASE exampledb; 
mysql> USE exampledb;

Ladda data från huvuddatabasen för att fylla i slavdatabasen

mysql> LOAD DATA FROM MASTER;

Avsluta MySQL.

Bonusläsning:Bästa databasbloggar att följa


4. Initiera replikering

Medan du är inloggad på MySQL, kör följande kommandon för att initiera replikeringsprocessen. Byt ut delar i fetstil med dina värderingar.

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-adress eller värdnamn för mastern (54.24.32.12).
MASTER_USER – slavanvändare vi skapade i steg #2.
MASTER_PASSWORD – lösenord för slavanvändare som vi skapade i steg #2.
MASTER_LOG_FILE – filen MySQL gav tillbaka i steg #1 när du körde
VISA MASTER STATUS
MASTER_LOG_POS – position MySQL gav tillbaka när du körde SHOW MASTER STATUS i steg #1

Slutligen startar vi slaven för att börja replikera MySQL-databasen.

mysql> START SLAVE;

Förhoppningsvis hjälper den här artikeln dig att replikera MySQL-databas.

  1. Cloud Backup-alternativ för PostgreSQL

  2. Datum- och tidsenheter i MySQL (fullständig lista)

  3. Hur man lägger till identitetskolumn till tabell med TSQL och GUI i SQL Server - SQL Server / T-SQL självstudie del 40

  4. Importera/exportera databas med SQL Server Server Management Studio