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.