La replicazione MySQL è una funzionalità interessante che consente agli utenti di gestire più copie di uno o più database MySQL. I dati vengono copiati automaticamente da sorgente a replica database. Può essere utile in numerose situazioni, come lavorare con i dati senza compromettere il database principale, il backup dei dati o la scalabilità dell'accesso al database, ecc.
In questa guida, esamineremo i passaggi per configurare un'istanza MySQL su un server come database sorgente, quindi configurare un'istanza MySQL su un altro server per funzionare come sua replica.
Prerequisiti
Questa guida mostrerà un esempio molto semplice di replicazione MySQL. Coinvolge una sorgente e una replica database. Il sorgente database è la copia primaria del database mentre il replica database sarà la replica del sorgente database. Per la nostra dimostrazione, due server sono configurati con i seguenti indirizzi IP:
- Server sorgente: 31.171.240.179
- Server replica: 31.171.250.139
Ogni server è configurato con l'ultima Ubuntu 20.04 server configurazione. Per prima cosa, segui i passaggi del tutorial che mostrano come configurare il tuo server Ubuntu. Nota che il numero di database di replica può essere superiore. Questa guida presuppone che tu abbia già installato e configurato MySQL. Hai bisogno di aiuto con l'installazione di MySQL? Questa guida mostra in dettaglio i passaggi di installazione e utilizzo di base di MySQL.
In breve, ecco i pacchetti di cui hai bisogno:
|
1 |
$ sudo apt install mysql-server mysql-client |
I firewall su entrambi i sistemi devono essere configurati per consentire il traffico da entrambi i sistemi sulla porta 3306. È la porta predefinita per MySQL. Puoi saperne di più sulle basi di UFW con una dimostrazione dal nostro post sul blog.
Configurazione del database sorgente
-
Modifica della configurazione di MySQL
MySQL utilizza my.cnf come file di configurazione principale. Aggiorneremo my.cnf per designare il server come sorgente. Per prima cosa, apri il file di configurazione con un editor di testo:
|
1 |
$ sudo nano /etc/mysql/my.cnf |
Quindi, aggiungi le seguenti righe sotto la sezione mysqld:
|
1 2 3 4 |
bind-address = 31.171.240.179 server-id = 1 log_bin = /var/log/mysql/mysql-bin.log binlog_do_db = newdatabase |
Cosa significano queste righe?
bind-address: questa è la voce che definisce l'associazione tra un servizio e un indirizzo IP. Per impostazione predefinita, il valore potrebbe essere127.0.0.1(localhost). Il nuovo valore sarà l'indirizzo IP del server.server-id: nella replicazione MySQL, ogni server deve avere un ID server univoco. Può essere qualsiasi numero. Per semplicità, è impostato su1.log_bin: memorizza i dettagli reali della replicazione. Il database di replica copierà tutto ciò che è registrato nel log.binlog_do_db: questa voce designa il database che sarà oggetto di replicazione sul server di replica. Può esserci più di un database. Qui, il database di esempio ènewdatabase.
Dopo aver apportato le modifiche, salva il file di configurazione. MySQL richiede il riavvio per caricare le modifiche in my.cnf:
|
1 |
$ sudo service mysql restart |
-
Concessione dei permessi all'utente di replica
Il passaggio successivo consiste nel creare un utente di replica e concedere i privilegi appropriati. Deve essere fatto dalla shell di MySQL. Per prima cosa, avvia la shell di MySQL:
|
1 |
$ sudo mysql -u root -p |
Quindi, crea un utente dedicato per il database di replica. Modifica il nome utente e la password in modo appropriato:
|
1 |
$ CREATE USER 'cloudsigma_s'@'31.171.240.179' IDENTIFIED BY 'password_123'; |
Ora, concedi i privilegi appropriati all'utente:
|
1 |
$ GRANT REPLICATION SLAVE ON *.* TO 'cloudsigma_s'@'31.171.240.179'; |
Puoi saperne di più su utenti e permessi di MySQL dal nostro post sul blog. Successivamente, ricarica la tabella dei privilegi per rendere effettive le modifiche:
|
1 |
$ FLUSH PRIVILEGES; |
-
Modifica del database
Abbiamo bisogno di una copia del database di origine sulla replica. È possibile creare manualmente la struttura. Tuttavia, nella maggior parte dei casi, ciò è piuttosto scomodo. Ecco perché esportare direttamente il database è la soluzione ottimale. In questo esempio, il database di origine è newdatabase. Cambia il database corrente:
|
1 |
$ USE newdatabase; |
Il seguente comando bloccherà il database, impedendo qualsiasi nuova modifica:
|
1 |
$ FLUSH TABLES WITH READ LOCK; |
Quindi, controlla lo stato del database:
|
1 |
$ SHOW MASTER STATUS; |
Da questa posizione, il database replica inizierà a replicare dall'origine. Questi numeri saranno utili in seguito, quindi conservane una traccia. Se vengono apportate modifiche dalla stessa finestra, MySQL sbloccherà automaticamente il database. Pertanto, si consiglia di eseguire i passaggi seguenti in un'altra scheda o finestra del terminale. Il database è ancora bloccato. Esportalo in un file SQL portatile:
|
1 |
$ mysqldump -u root -p --opt newdatabase > newdatabase.sql |
L'attività è ora completata. Successivamente, sblocca il database:
|
1 |
$ UNLOCK TABLES; |
Infine, esci dalla shell:
|
1 |
$ QUIT; |
Configurazione della replica
È giunto il momento di configurare il database replica.
-
Importazione del database di origine
Abbiamo bisogno di una copia del database di origine sul server replica. Utilizzeremo il file SQL esportato in precedenza per farlo. Avvia la shell di MySQL:
|
1 |
$ sudo mysql -u root -p |
Dopodiché, crea un database vuoto utilizzando lo stesso nome di database:
|
1 |
$ CREATE DATABASE newdatabase; |
Successivamente, esci dalla shell:
|
1 |
$ EXIT; |
Ora, importa il file SQL nel database:
|
1 |
$ sudo mysql -u root -p newdatabase < newdatabase.sql |
-
Modifica della configurazione di MySQL
Ci sono alcune cose da dichiarare nel file di configurazione di MySQL. Apri il file di configurazione in un editor di testo:
|
1 |
$ sudo nano /etc/mysql/my.cnf |
Le seguenti voci andranno sotto la sezione mysqld. Altrimenti, non funzionerà. La prima è l'ID del server. Come accennato in precedenza, deve essere univoco per tutti i server nella configurazione di replica origine-replica. A scopo dimostrativo, è impostato su 2:
|
1 |
$ server-id = 2 |
Successivamente, aggiungi le seguenti righe:
|
1 2 3 |
$ relay-log = /var/log/mysql/mysql-relay-bin.log $ log_bin = /var/log/mysql/mysql-bin.log $ binlog_do_db = newdatabase |
Qui, solo relay-log è una nuova voce. È il log che il server replica crea durante la replica. Il formato del log è lo stesso del log binario. Salva il file di configurazione e riavvia MySQL:
|
1 |
$ sudo service mysql restart |
-
Abilitazione della replica
Infine, siamo pronti per abilitare la replica dall'interno di MySQL. Avvia la shell di MySQL:
|
1 |
$ sudo mysql -u root -p |
Esegui il seguente comando. Innanzitutto, modifica l'indirizzo IP, il nome utente e le password di conseguenza:
|
1 |
$ CHANGE MASTER TO MASTER_HOST='31.171.240.179',MASTER_USER='cloudsigma_master', MASTER_PASSWORD='password_123', MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS= 107; |
Il comando esegue quanto segue:
- Il server corrente viene contrassegnato come replica del server di origine.
- Il server replica dispone delle credenziali di accesso corrette.
- Il server replica sa da dove iniziare la replica. Ricordi lo stato del database che abbiamo controllato sul server di origine? Il file di log di origine e la posizione del log provengono da lì.
Infine, attiva il server replica:
|
1 |
$ START REPLICA; |
-
Varie
Hai bisogno di controllare i dettagli dello stato attuale della replica? Esegui il seguente comando nella shell di MySQL. Il \G alla fine serve a riorganizzare i testi per renderli più leggibili:
|
1 |
$ SHOW REPLICA STATUS\G |
Se c'è un problema di connessione, prova ad avviare il server replica per saltarlo:
|
1 |
$ SET GLOBAL SQL_REPLICA_SKIP_COUNTER = 1; REPLICA START; |
Conclusione
La replica di MySQL ha molte implicazioni. È solo una breve dimostrazione della sua forma base. Tuttavia, può essere facilmente estesa a configurazioni multiple sorgente-replica. Gli stessi passaggi si applicheranno anche a qualsiasi configurazione complessa di livello superiore. È sempre una buona idea testare qualsiasi configurazione in seguito. Prova a eseguire alcuni insert, delete o update comandi sul database sorgente. Se la configurazione funziona, il database replica dovrebbe acquisire tutto correttamente.
Inoltre, puoi dare un'occhiata ad altre risorse del nostro blog che trattano ciò che puoi fare con MySQL:
- SQLite vs MySQL vs. PostgreSQL: Sistemi di Gestione di Database Relazionali a Confronto
- Come reimpostare la password di root di MariaDB o MySQL
- Come installare lo stack LEMP (Linux, Nginx, MySQL PHP) su Ubuntu 20.04
Buon computing!







Commenti
Ancora nessun commento. Scrivi il primo.