Guida alle tecnologie

Configurare lo slave MySQL per la replica sicura

5 min read Database Aggiornato 14 Oct 2025
Configurare lo slave MySQL in replica
Configurare lo slave MySQL in replica

Scopo e termini rapidi

  • Scopo: trasformare server2 in uno slave che replica exampledb da server1.
  • Definizione breve: master è il server sorgente; slave è il server che riceve le modifiche.

Requisiti prima di cominciare

  • Accesso root su server2 (e accesso amministrativo sul master per ottenere SHOW MASTER STATUS).
  • Snapshot SQL esportato dal master (snapshot.sql).
  • File di certificati SSL copiati su /etc/mysql/newcerts/ (se usi SSL).

1. Modifica del file di configurazione dello slave

Apri /etc/mysql/my.cnf sul server2 e assicurati che nella sezione [mysqld] siano presenti le seguenti impostazioni. L’esempio assume server-id=2 per il secondo server.

server2:

vi /etc/mysql/my.cnf
[...]
server-id=2
master-connect-retry=60
replicate-do-db=exampledb
[...]

Importante: il valore di server-id deve essere univoco e diverso da quello del master.

Riavvia MySQL dopo la modifica:

/etc/init.d/mysql restart

2. Creare il database vuoto sullo slave e importare lo snapshot

Crea un database vuoto exampledb su server2:

mysql -u root -p
CREATE DATABASE exampledb;  
quit;

Sopra stiamo solo creando la struttura vuota. Ora fermiamo il demone slave (se presente) e importiamo lo snapshot SQL:

/usr/bin/mysqladmin --user=root --password=yourrootsqlpassword stop-slave  
cd /tmp  
mysql -u root -pyourrootsqlpassword exampledb < snapshot.sql

Nota: sostituisci yourrootsqlpassword con la password reale del root MySQL.

3. Impostare il master e abilitare la replica

Riconnettiti a MySQL e configura i parametri del master. È cruciale usare i valori restituiti da SHOW MASTER STATUS sul master (MASTER_LOG_FILE e MASTER_LOG_POS).

mysql -u root -p

Esegui il comando CHANGE MASTER TO, sostituendo i valori con quelli corretti:

CHANGE MASTER TO MASTER_HOST='192.168.0.100', MASTER_USER='slave_user', MASTER_PASSWORD='slave_password', MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS=106, MASTER_SSL=1, MASTER_SSL_CA = '/etc/mysql/newcerts/ca-cert.pem', MASTER_SSL_CERT = '/etc/mysql/newcerts/client-cert.pem', MASTER_SSL_KEY = '/etc/mysql/newcerts/client-key.pem';

Spiegazione dei parametri principali:

  • MASTER_HOST: IP o hostname del master (es. 192.168.0.100).
  • MASTER_USER / MASTER_PASSWORD: utente con privilegi REPLICATION SLAVE sul master.
  • MASTER_LOG_FILE / MASTER_LOG_POS: informazioni ottenute da SHOW MASTER STATUS sul master.
  • MASTER_SSL: abilita connessione SSL (1 = sì).
  • MASTER_SSL_CA / MASTER_SSL_CERT / MASTER_SSL_KEY: percorsi dei certificati sullo slave.

Poi avvia lo slave:

START SLAVE;

Verifica lo stato:

SHOW SLAVE STATUS \G

È fondamentale che i campi Slave_IO_Running e Slave_SQL_Running siano entrambi Yes. Se usi SSL, verifica inoltre Master_SSL_Allowed, Master_SSL_CA_File, Master_SSL_Cert e Master_SSL_Key.

Esempio di output atteso:

mysql> SHOW SLAVE STATUS \G  
************************* 1. row *************************  
               Slave_IO_State: Waiting for master to send event  
                 Master_Host: 192.168.0.100  
                 Master_User: slave_user  
                 Master_Port: 3306  
               Connect_Retry: 60  
             Master_Log_File: mysql-bin.000001  
         Read_Master_Log_Pos: 106  
              Relay_Log_File: mysqld-relay-bin.000002  
               Relay_Log_Pos: 251  
        Relay_Master_Log_File: mysql-bin.000001  
             Slave_IO_Running: Yes  
           Slave_SQL_Running: Yes  
               Replicate_Do_DB: exampledb  
           Replicate_Ignore_DB:  
            Replicate_Do_Table:  
       Replicate_Ignore_Table:  
      Replicate_Wild_Do_Table:  
  Replicate_Wild_Ignore_Table:  
                   Last_Errno: 0  
                   Last_Error:  
                  Skip_Counter: 0  
          Exec_Master_Log_Pos: 106  
              Relay_Log_Space: 407  
              Until_Condition: None  
               Until_Log_File:  
                Until_Log_Pos: 0  
           Master_SSL_Allowed: Yes  
           Master_SSL_CA_File: /etc/mysql/newcerts/ca-cert.pem  
           Master_SSL_CA_Path:  
              Master_SSL_Cert: /etc/mysql/newcerts/client-cert.pem  
            Master_SSL_Cipher:  
               Master_SSL_Key: /etc/mysql/newcerts/client-key.pem  
        Seconds_Behind_Master: 0  
Master_SSL_Verify_Server_Cert: No  
                Last_IO_Errno: 0  
                Last_IO_Error:  
               Last_SQL_Errno: 0  
               Last_SQL_Error:  
1 row in set (0.00 sec)  
  
mysql>

Esci dalla shell MySQL quando hai finito:

quit;

Ora ogni modifica a exampledb sul master verrà replicata sullo slave. Esegui un test per confermare la sincronizzazione.

Controlli rapidi e criteri di accettazione

  • Slave_IO_Running = Yes
  • Slave_SQL_Running = Yes
  • Read_Master_Log_Pos e Exec_Master_Log_Pos avanzano dopo operazioni sul master
  • MasterSSL* popolati se MASTER_SSL=1
  • Seconds_Behind_Master vicino a 0 in condizioni normali

Checklist operativa (playbook rapido)

  • Verificare la versione MySQL compatibile tra master e slave.
  • Creare snapshot coerente sul master (lock tables o mysqldump con –master-data).
  • Trasferire snapshot e certificati al server2 in modo sicuro.
  • Aggiornare /etc/mysql/my.cnf con server-id unico.
  • Riavviare MySQL e creare il DB vuoto.
  • Importare snapshot e applicare CHANGE MASTER TO con i valori corretti.
  • START SLAVE; e validare con SHOW SLAVE STATUS \G.

Troubleshooting: errori comuni e soluzioni

  • Slave_IO_Running = No: controlla network, MASTER_HOST, porta 3306, e credenziali MASTER_USER.
  • Slave_SQL_Running = No: verifica errori SQL nel campo Last_SQL_Error e correggi righe/indici incompatibili.
  • Differenze binlog position: assicurati che lo snapshot importato corrisponda alla posizione MASTER_LOG_FILE/MASTER_LOG_POS usata.
  • Errore SSL: verifica i permessi dei file /etc/mysql/newcerts/* e che i certificati corrispondano al master.
  • Logged errors: controlla /var/log/syslog e il log error di MySQL per messaggi più dettagliati.

Esempi di comandi utili per debug:

SHOW MASTER STATUS;
SHOW SLAVE STATUS \G
tail -n 200 /var/log/syslog
mysqladmin processlist -u root -p

Quando la replica non è adatta (controesempi)

  • Dati altamente sensibili: non usare replica non criptata (sempre SSL o tunnel privato).
  • Replica sincrona richiesta: la replica standard è asincrona e può perdere dati in caso di crash del master.
  • Repliche con struttura di tabelle diversa: evitare replicate-do-db se schemi divergono.

Alternative e strategie avanzate

  • Replica master-master (bidirezionale) per alta disponibilità — usare con attenzione per conflitti.
  • Replicazione basata su GTID per gestione più semplice dei failover nelle versioni MySQL moderne.
  • Utilizzare strumenti di orchestrazione (MHA, Orchestrator) per automatizzare failover.

Sicurezza e best practice

  • Limitare i privilegi dell’utente di replica: GRANT REPLICATION SLAVE only.
  • Proteggere i file dei certificati (permessi 600) e usare permessi OS restrittivi.
  • Monitorare regolarmente Seconds_Behind_Master e i log di errore.

Test cases / Acceptance tests suggeriti

  • Creare una tabella di prova sul master, inserire 100 righe e verificare che compaiano sullo slave.
  • Eliminare una riga sul master e verificare la rimozione sullo slave.
  • Riavviare il master e confermare che la replica si riconnetta entro il periodo di master-connect-retry.

1-line glossary

  • Binlog: log binario delle modifiche sul master usato per la replica.
  • Relay log: file sullo slave che memorizza eventi letti dal master.
  • MASTER_LOG_POS: posizione nel binlog del master.

Note finali

Importante: conserva sempre una copia sicura dello snapshot e delle chiavi. Testa la replica in ambiente di staging prima di passarla in produzione.

Link utili

Autore
Redazione

Materiali simili

Menu contestuale: Piani di alimentazione in Windows
Windows

Menu contestuale: Piani di alimentazione in Windows

Perdita di pacchetti in Fallout 76: come risolvere
Giochi

Perdita di pacchetti in Fallout 76: come risolvere

Ripristinare dati persi su Android — guida rapida
Android

Ripristinare dati persi su Android — guida rapida

Scaricare Reels privati Instagram — guida pratica
Instagram

Scaricare Reels privati Instagram — guida pratica

Risolvere WatchGuard VPN su Windows 10/11
VPN

Risolvere WatchGuard VPN su Windows 10/11

Aprire file M3U8 su Windows, Mac e Mobile
Multimedia

Aprire file M3U8 su Windows, Mac e Mobile