A volte potrebbe essere necessario replicare automaticamente i dati da un server DB MySQL a uno o più server DB MySQL. Fondamentalmente, gli amministratori di database eseguono attività relative al database come la replica, il clustering e il failover automatico. La gestione dei server di database MySQL e l'esecuzione di attività di replica sono responsabilità degli esperti di database. In questo articolo impareremo come configurare la replica del database MySQL master-slave in Ubuntu 20.04. In questo articolo utilizzeremo MySQL 8 per la replica.
Prerequisiti
- Due server Ubuntu
- Account utente con privilegi di root
- Connessione Internet per scaricare pacchetti
In questo esempio vengono utilizzati i seguenti server.
- Maestro – 192.168.178.135
- Schiavo – 192.168.178.137
Installa il server MySQL 8 su entrambi i nodi
L'installazione di MySQL è un processo semplice e diretto. Nel sistema Ubuntu, MySQL può essere installato utilizzando il repository di pacchetti APT. Prima dell'installazione, aggiorna l'indice del pacchetto Ubuntu usando il comando seguente.
$apt update
Installa il pacchetto del server MySQL utilizzando il comando seguente.
$apt install mysql-server -y
La nuova installazione del server MySQL lo lascia non protetto. Esegui lo script “mysql_secure_installation ” per modificare alcune delle opzioni predefinite meno sicure come accessi root remoti, database di test, utenti di esempio, ecc.
$ mysql_secure_installation
Avvia e abilita il servizio MySQL
$ systemctl start mysql
$ systemctl enable mysql
Configura il server DB principale
Ora dobbiamo apportare alcune modifiche al server master per la replica. Modifica il mysqld.conf file nella directory /etc/mysql/mysql.conf.d e aggiungi le seguenti righe. Ricorda di aggiungere le variabili di configurazione sotto [mysqld] sezione.
$ vi /etc/mysql/mysql.conf.d/mysqld.conf
[mysqld] pid-file = /var/run/mysqld/mysqld.pid socket = /var/run/mysqld/mysqld.sock datadir = /var/lib/mysql log-error = /var/log/mysql/error.log server-id = 1 log-bin = /var/log/mysql/mysql-bin.log tmpdir = /tmp binlog_format = ROW max_binlog_size = 800M sync_binlog = 1 expire-logs-days = 5 slow_query_log=1 slow_query_log_file=/var/lib/mysql/mysqld-slow.log
Dove:
- server-id – ID univoco del server MySQL. Questo ID non può essere riutilizzato in nessun nodo del cluster.
- log-bin – Questo è il file in cui sono archiviate tutte le informazioni sulla replica.
- max_binlog_size – Dimensioni del file binlog.
Inoltre, commenta l'indirizzo di rilegatura come:
#bind-address =127.0.0.1
Riavvia il servizio MySQL
$systemctl restart mysql
Crea un nuovo utente per il servizio di replica sul nodo master
Ora è necessario creare un utente del database in un nodo master che verrà utilizzato dagli slave durante la connessione. Accedi al database utilizzando l'utente root e crea l'utente.
$ mysql -u root -p
$ mysql> CREATE USER [email protected] IDENTIFIED BY '[email protected]';
Nota:la specifica dell'indirizzo IP durante la creazione dell'utente accetterà le connessioni MySQL solo dall'host specificato. Le connessioni da altri host verranno rifiutate. In questo esempio, ho utilizzato l'indirizzo IP del mio server slave MySQL. Potrebbe essere necessario modificare questo indirizzo IP nel tuo ambiente di conseguenza.
L'utente ha bisogno dei privilegi REPLICATION SLAVE per poter replicare i dati MySQL. Utilizzare la query seguente per concedere i privilegi.
mysql> GRANT REPLICATION SLAVE on *.* to [email protected] ;
Verifica i privilegi concessi utilizzando la query seguente.
mysql> SHOW GRANTS FOR [email protected];
Configura nodo DB slave
Abbiamo già installato il server MySQL nel passaggio precedente. Ora cambieremo alcuni file di configurazione per abilitare il processo di replica. Modifica il mysqld.conf file in /etc/mysql/mysql.conf.d directory e aggiungi i seguenti contenuti.
$vi /etc/mysql/mysql.conf.d/mysqld.conf
Contenuto del file di configurazione:
[mysqld] log_bin = /var/log/mysql/mysql-bin.log server-id = 2 read_only = 1 tmpdir = /tmp binlog_format = ROW max_binlog_size = 800M sync_binlog = 1 expire-logs-days = 5 slow_query_log = 2
Dove,
- ID server – ID server MySQL univoco.
- sola_lettura – Il nodo slave è impostato in modalità di sola lettura
- log_bin – Abilita la registrazione binaria nel nodo slave
- slow_query_log – Abilita il registro delle query lente
Inoltre, commenta la riga dell'indirizzo di rilegatura.
# bind-address = 127.0.0.1
Ora riavvia il servizio MySQL
$ systemctl restart mysql
Collega il server slave al server master
Prima di configurare il server slave, vai al server master e controlla lo stato.
$ mysql -u root -p
mysql> SHOW MASTER STATUS\G
Prendi nota dei seguenti flag che useremo nel server slave.
- File:mysql-bin.000002
- Posizione:156
Configurare ora i parametri nel server slave che verranno utilizzati per connettere il server master. Segui i passaggi seguenti.
- Accedi al server MySQL utilizzando le credenziali di root
$ mysql -u root -p
- Interrompi i thread slave
mysql> STOP SLAVE;
- Configura il server slave per replicare il server master
mysql> CHANGE MASTER TO MASTER_HOST='192.168.178.137', MASTER_USER='replication_user', MASTER_PASSWORD='[email protected]', MASTER_LOG_FILE='mysql-bin.000003', MASTER_LOG_POS=1050;
Dove,
- 192.168.178.137 – Indirizzo IP del server principale
- utente_replica – Utente MySQL del server master
- password – Password utente di replica
- mysql-bin.000002 – File di registro del server principale
- 156 – Posizione del registro del server principale
Ora attiva il server slave.
mysql> START SLAVE;
Verifica lo stato dello slave utilizzando la query seguente
mysql> SHOW SLAVE STATUS\G
Nota lo stato del seguente flag.
- Slave_IO_Running:connessione
- Slave_IO_Running:connessione
Verifica la replica master-slave
Master e slave sono configurati per la replica. Possiamo verificare se la replica master-slave funziona o meno. Nel server master, accedi alla shell MySQL e crea un database di prova.
$ mysql -u root -p
mysql> CREATE DATABASE example_db;
Verifica il database creato.
mysql> SHOW DATABASES;
Ora accedi al server slave
$ mysql -u root -p
Eseguire la query seguente per elencare i database.
mysql> SHOW DATABASES;
Puoi vedere che il database creato nel server master viene replicato sul server slave.
Conclusione
In questo articolo, abbiamo imparato come configurare il nodo MySQL master e slave su Ubuntu 20.04. Puoi seguire questo articolo per configurare la replica MySQL master-slave anche su Ubunutu 18.04.