Mysql
 sql >> Database >  >> RDS >> Mysql

Come replicare il database MySQL su un altro server

MySQL Replication consente di copiare facilmente il database da un server all'altro. MySQL supporta diversi tipi di replica come master-slave, master-master e replica di gruppo. MariaDB supporta anche la replica multi-master. In questo articolo, esamineremo la replica Master-Slave in MySQL e impareremo come replicare il database MySQL in Linux. Puoi utilizzare questi passaggi per replicare il database MySQL in Ubuntu, Debian, CentOS, Fedora, Red Hat e altri tipi di Linux.


Come replicare il database MySQL

Ecco i passaggi per replicare il database MySQL. Per la nostra configurazione, avremo bisogno di un database master (IP – 54.24.32.12) e di un database slave (IP – 45.12.21.23). Replicheremo il database denominato exampledb da padrone a schiavo. Abbiamo presupposto che MySQL sia installato su entrambi questi server e che tu abbia i privilegi di root per entrambi. Altrimenti puoi installare MySQL con il seguente comando

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

Bonus da leggere:le migliori alternative a MySQL Workbench


1. Modifica file di configurazione principale

Apri il terminale sul server del database principale ed esegui il comando seguente

$ sudo vi /etc/mysql/my.cnf

Per impostazione predefinita, le connessioni remote sono disabilitate in MySQL. È necessario consentire la connessione remota dallo slave al master per la replica. Quindi decommentiamo le due righe seguenti per consentire le connessioni remote, aggiungendo # all'inizio, come mostrato di seguito

#skip-networking
#bind-address=127.0.0.1

Aggiungi o decommenta le seguenti righe nel blocco [mysqld] in modo che assomiglino alle seguenti.

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

Diamo un'occhiata a ciascuna delle righe precedenti. La prima riga server-id specifica un numero ID univoco per il master. Deve essere un numero positivo compreso tra 1 e 2^32.

log-bin specifica il percorso del file di registro che verrà popolato da MySQL con i dettagli della replica.

binlog-do-db indica il nome del database che deve essere replicato.

Riavvia MySQL Server per applicare le modifiche

$ sudo service mysql restart

Accedi a MySQL come utente root

$ sudo mysql -u root -p

ed esegui il seguente comando

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

Tieni presente i dettagli di cui sopra, ne avremo bisogno più avanti nel passaggio n. 3.

Bonus Lettura:come abilitare SSL/TLS in MySQL


2. Crea utente di replica

Accedi al server MySQL su master.

$ sudo mysql -u root -p

Ti verrà richiesta la password di root.

Dopo aver effettuato l'accesso a MySQL, esegui i seguenti comandi per creare un utente remoto slave_user e concedigli le autorizzazioni di replica per tutti i database. Sostituisci 45.12.21.23 di seguito con l'IP del tuo server slave e sostituisci $password con una password adatta secondo le tue esigenze.

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;

Aggiungi una regola del firewall in entrata per la porta 3306 e consenti 45.12.21.23. Questo utente remoto deve connettersi al database principale affinché avvenga la replica.

Bonus Leggi:Come modificare le regole di confronto di tutte le tabelle in MySQL


3. Modifica file di configurazione slave

Apri il terminale sul server del database slave ed esegui il comando seguente

$ sudo vi /etc/mysql/my.cnf

Aggiungi le seguenti righe sotto [mysqld] per assomigliare a

[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

Nella prima riga, assegniamo l'ID server di 2 al server slave. Le due righe successive specificano le posizioni del registro di inoltro e dei file di registro di replica. L'ultima riga specifica il database da replicare.

Riavvia MySQL Server e accedi a MySQL

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

Esegui i seguenti comandi per creare un database vuoto sullo slave.

mysql> CREATE DATABASE exampledb; 
mysql> USE exampledb;

Carica i dati dal database master per popolare il database slave

mysql> LOAD DATA FROM MASTER;

Esci da MySQL.

Bonus da leggere:i migliori blog di database da seguire


4. Inizializza replica

Mentre sei connesso a MySQL, esegui i seguenti comandi per avviare il processo di replica. Sostituisci le parti in grassetto con i tuoi valori.

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 – Indirizzo IP o nome host del master (54.24.32.12).
MASTER_USER – utente slave che abbiamo creato nel passaggio n. 2.
MASTER_PASSWORD – password dell'utente slave che abbiamo creato nel passaggio #2.
MASTER_LOG_FILE – file che MySQL ha restituito nel passaggio n. 1 durante l'esecuzione
MOSTRA LO STATO MASTER
MASTER_LOG_POS – posizione restituita da MySQL quando hai eseguito SHOW MASTER STATUS nel passaggio n. 1

Infine, avviamo lo slave per iniziare la replica del database MySQL.

mysql> START SLAVE;

Si spera che questo articolo ti aiuti a replicare il database MySQL.