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

Come configurare la replica della replica sorgente in MySQL

Il MySQL è un sistema di gestione di database relazionali che è uno dei progetti open source più popolari. Sebbene noto per la sua stabilità, MySQL è ancora più affidabile se è configurata la replica della replica sorgente. Nella replica, un server MySQL è generalmente designato come origine . Un'origine invia le modifiche al database e gli aggiornamenti dei dati a una o più replica server di database. La procedura di replica dei dati di MySQL è flessibile e non è necessario che i server di replica siano collegati permanentemente all'origine. Questa guida spiega come configurare la replica dei dati della replica sorgente in MySQL.

Come funziona la replica dei dati MySQL

Il processo di replica archivia i dati prima nel database di origine, quindi li copia in qualsiasi replica. Dopo aver elaborato l'istruzione, il server del database di origine tiene traccia della modifica in un registro binario. Il registro funge da registrazione sequenziale di tutte le modifiche alla struttura e al contenuto del database. SELECT le dichiarazioni non vengono registrate perché non modificano il contenuto del database.

Gli aggiornamenti avvengono in modo asincrono, quindi le repliche non devono essere continuamente connesse. Ciò contrasta con le architetture sincrone dei sistemi ad alta affidabilità. Se è richiesta la sincronizzazione in tempo reale, MySQL consiglia di utilizzare il cluster NDB .

Ogni replica estrae i dati dall'origine richiedendo il contenuto del log binario dell'origine. La replica applica quindi le istruzioni in ordine, riproducendo efficacemente gli eventi che si sono verificati sulla fonte. Ogni replica è indipendente e tiene traccia della sua posizione corrente con il log binario di origine. Inoltre, ogni replica può sincronizzarsi con l'origine in base alla propria pianificazione. I dati possono essere letti da qualsiasi server, comprese le repliche.

MySQL consente un elevato grado di granularità. È possibile replicare su determinati database o persino tabelle specifiche all'interno di un database. Il formato di replica predefinito è Replica basata su istruzioni (SBR), in cui viene replicata l'intera istruzione SQL. Tuttavia, Replica basata su righe (RBR) è anche disponibile. Questo formato replica le righe che sono state modificate. È anche possibile configurare configurazioni molti-a-molti più complicate. Consulta la documentazione di MySQL per ulteriori informazioni sulle diverse opzioni di replica.

Nota MySQL in precedenza si riferiva alla replica della replica sorgente come "replica master-slave". L'organizzazione MySQL ha recentemente cambiato la terminologia, spiegando il loro ragionamento nell'aggiornamento della terminologia. Il vecchio termine "master" è stato cambiato in "source", mentre uno "slave" viene ora chiamato "replica". I vecchi termini potrebbero ancora apparire in alcuni comandi e display di output mentre MySQL aggiorna la sua base di codice. Questa guida utilizza i termini preferiti di MySQL in tutte le istruzioni.

Vantaggi della replica dei dati MySQL

L'abilitazione della replica della replica del codice sorgente offre molti vantaggi significativi rispetto a un sistema non ridondante. L'elenco seguente fornisce una panoramica di alcuni vantaggi:

  • È facile creare una copia di backup live in qualsiasi momento. Poiché il processo di replica è asincrono, la replica può essere eseguita in base a qualsiasi pianificazione. Le repliche non devono essere mantenute sincronizzate con l'origine per funzionare in modo affidabile.

  • L'aggiunta di una replica può aumentare il tempo di attività e l'affidabilità dell'intero sistema. Il controllo primario può passare alla replica se è necessaria la manutenzione o se il database di origine non è disponibile.

  • Ogni replica fornisce un'altra istanza leggibile del database. Ciò consente ai programmi di data mining o analisi di eseguire query sulla replica senza caricare ulteriormente il database di origine originale.

  • Questa architettura aumenta la scalabilità e le prestazioni. Il database legge e SELECT le istruzioni possono essere bilanciate tra i server, riducendo la latenza.

  • Terze parti possono ottenere l'accesso in sola lettura a un database tramite una replica e non richiedono più l'accesso all'origine. Un database di replica può essere creato su richiesta quando è necessario e distrutto quando non è più necessario. Questa tecnica migliora la sicurezza e garantisce l'impossibilità di manomettere i dati originali.

Prima di iniziare

  1. Se non l'hai già fatto, crea un account Linode e un'istanza di calcolo. Consulta le nostre guide Introduzione a Linode e Creazione di un'istanza di calcolo.

  2. Segui la nostra guida alla configurazione e alla protezione di un'istanza di calcolo per aggiornare il tuo sistema. Potresti anche voler impostare il fuso orario, configurare il tuo nome host, creare un account utente limitato e rafforzare l'accesso SSH.

  3. È necessario disporre di almeno due Linode separati per configurare la replica della replica sorgente di MySQL. Un Linode ospita il database di origine, mentre un altro nodo è necessario per il server di replica.

Nota I passaggi in questa guida sono scritti per un utente non root. I comandi che richiedono privilegi elevati sono preceduti da sudo . Se non hai familiarità con sudo comando, vedere la guida per utenti e gruppi Linux.

Configura replica replica sorgente in MySQL

Per configurare la replica della replica sorgente, MySQL deve essere installato su due server separati in grado di comunicare tra loro. Queste istruzioni sono orientate alla distribuzione Ubuntu ma sono generalmente applicabili a tutte le distribuzioni Linux. Il processo consiste nei seguenti passaggi:

  1. Installa MySQL.
  2. Configura il database di origine MySQL.
  3. Configura un nuovo utente MySQL per la replica.
  4. Prepara i dati MySQL per la replica.
  5. Configura il database di replica MySQL.
  6. Importa i dati MySQL replicati e attiva la replica.

Installa MySQL

Se MySQL non è già disponibile su entrambi i Linode, installalo seguendo i seguenti passaggi:

  1. Aggiorna i Linode.

     sudo apt-get update && sudo apt-get upgrade
    
  2. Installa il server MySQL e le applicazioni client sia sul server di origine che su quello di replica.

     sudo apt-get install mysql-server mysql-client -y
    
  3. Configura le opzioni di sicurezza, inclusa la password di root, usando mysql_secure_installation comando.

     sudo mysql_secure_installation
    
  4. Se stai utilizzando un firewall come ufw , assicurati che consenta il passaggio del traffico MySQL. Aggiungi la seguente regola per aprire la porta 3306 sul firewall.

     ufw allow mysql
    

Configura il database sorgente MySQL

Per abilitare la replica di MySQL, modifica alcune variabili nel file di configurazione MySQL principale. Apporta le seguenti modifiche alla configurazione del database di origine.

  1. Individua il file di configurazione MySQL principale sul server del database di origine. Questo file si trova solitamente in /etc/mysql/mysql.conf.d/mysqld.cnf . Tuttavia, nelle installazioni precedenti, potrebbe trovarsi in /etc/my.cnf o /etc/mysql/my.cnf . Potrebbe anche essere referenziato da uno dei file tramite un includedir direttiva.

  2. Apri il file di configurazione di MySQL e cambia il bind-address all'indirizzo IP del server di origine.

    File:/ etc/mysql/mysql.conf.d/mysqld.cnf
    1
    2
    
    bind-address  = <source_ip_address>
        
  3. Decommenta o aggiungi le righe per server-id e log-bin . Imposta il server-id a 1 e log-bin a /var/log/mysql/mysql-bin.log .

    Nota Assicurati di skip_networking la variabile non è dichiarata da nessuna parte. Commentalo se appare all'interno di questo file. Per replicare un singolo database, aggiungi la riga binlog_do_db = <database_name> al file.
    File:/ etc/mysql/mysql.conf.d/mysqld.cnf
    1
    2
    3
    
    server-id  = 1
    log_bin  = /var/log/mysql/mysql-bin.log
        
  4. Riavvia il servizio MySQL.

     sudo systemctl restart mysql
    
  5. Verifica lo stato di MySQL e assicurati che sia active .

     sudo systemctl status mysql
    
    mysql.service - MySQL Community Server
    Loaded: loaded (/lib/systemd/system/mysql.service; enabled; vendor preset: enabled)
    Active: active (running) since Sun 2021-05-30 13:06:47 UTC; 1 day 1h ago

Configura un nuovo utente MySQL per la replica

È necessario creare un nuovo utente sul server di origine per rappresentare la replica. I nuovi utenti vengono creati all'interno della shell MySQL.

  1. Entra nella shell MySQL.

     sudo mysql -u root -p
    
  2. Aggiungi un utente per l'account di replica utilizzando MySQL CREATE USER sintassi. Il nome utente deve essere costituito dal nome dell'account di replica, un @ simbolo e l'indirizzo IP del server di replica. Scegli una password più sicura per l'account al posto di REPLICA_PASSWORD .

     CREATE USER 'replica_account_name'@'replica_ip_address‘ IDENTIFIED WITH sha256_password BY 'REPLICA_PASSWORD';
    
    Nota Per consentire alla replica di connettersi da qualsiasi indirizzo, specifica l'utente come 'replica_account_name'@'%' . Il % il simbolo rappresenta qualsiasi indirizzo o dominio. Ciò fornisce ulteriore flessibilità a scapito di una certa sicurezza.
  3. Concedi i diritti di replica all'utente della replica remota.

     GRANT REPLICATION SLAVE ON *.* TO 'replica_account_name'@'replica_ip_address';
    

Prepara i dati MySQL per la replica

A questo punto, è necessario svuotare e bloccare il database di origine per organizzare i dati per la replica.

  1. Rimani all'interno della shell MySQL e svuota i privilegi per ricaricare le tabelle di concessione senza riavviare il database.

     FLUSH PRIVILEGES;
    
  2. Blocca il database per bloccare il database in un punto stabile da cui esportare i dati. Mantieni il client MySQL in esecuzione fino a quando non esporti il ​​database. L'immissione di qualsiasi comando di scrittura o l'uscita dalla shell MySQL rilascia il blocco.

     FLUSH TABLES WITH READ LOCK;
    
    Attenzione Questo comando blocca tutti i commit nel database di origine. Esporta i dati prima di consentire all'origine di elaborare altri commit. In caso contrario, il database di replica potrebbe danneggiarsi o risultare incoerente con il database di origine. Completa i due passaggi rimanenti in questa sezione il prima possibile.
  3. Verificare lo stato del database utilizzando il comando seguente. Questo comando visualizza il file di registro corrente insieme alla posizione dell'ultimo record in questo file. Registra queste informazioni perché sono necessarie per avviare la replica sulla replica in un secondo momento.

     SHOW MASTER STATUS;
    
    +------------------+----------+--------------+------------------+-------------------+
    | File             | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
    +------------------+----------+--------------+------------------+-------------------+
    | mysql-bin.000002 |     1301 |              |                  |                   |
    +------------------+----------+--------------+------------------+-------------------+
    1 row in set (0.00 sec)
  4. Usando la shell Linux da una console diversa, esporta il database usando mysqldump attrezzo. Seleziona un nome memorabile per il file di destinazione. Includi il –master-data opzione per aggiungere informazioni sul file di registro e la posizione del record corrente al registro.

     sudo mysqldump -u root -p -–all-databases -–master-data > databasecopy.sql
    
    Nota Per esportare un singolo database, includi il --opt <database_name> opzione anziché -–all-databases .
  5. Nella shell MySQL originale, sblocca il database di origine.

     UNLOCK TABLES;
    
  6. Esci dalla shell MySQL.

     QUIT;
    
  7. Copiare il file di database esportato sul server di database di replica, utilizzando ftp , scp o un altro metodo per trasferire il file.

     scp databasecopy.sql [email protected]<replica_ip_address>
    

Configura il database di replica MySQL

La configurazione seguente deve essere applicata alla configurazione del database di replica. Per installare MySQL sul server di replica, vedere la sezione Installazione MySQL.

  1. Apri il file MySQL principale, che di solito si trova in /etc/mysql/mysql.conf.d/mysqld.cnf e cambia l'bind-address in modo che corrisponda all'indirizzo IP del server di replica.

    File:/ etc/mysql/mysql.conf.d/mysqld.cnf
    1
    2
    
    bind-address  = xx.xx.xx.xx
        
  2. Decommenta o aggiungi le righe per server-id e log-bin . L'server-id deve essere impostato su 2 sulla replica, mentre il log-bin la variabile deve essere impostata su /var/log/mysql/mysql-bin.log . Aggiungi una variabile per relay-log e impostalo su /var/log/mysql/mysql-relay-bin.log .

    Nota Assicurati di skip_networking la variabile non è impostata da nessuna parte all'interno di questo file. Per replicare un singolo database, aggiungi la seguente direttiva al file binlog_do_db = database_name . Per configurare più di una replica, numerare server-id valori in modo sequenziale. Ad esempio, una seconda replica avrebbe un server-id di 3 .
    File:/ etc/mysql/mysql.conf.d/mysqld.cnf
    1
    2
    3
    4
    
    server-id        = 2
    log_bin    = /var/log/mysql/mysql-bin.log
    relay-log        = /var/log/mysql/mysql-relay-bin.log
        
  3. Riavvia il servizio MySQL per incorporare le modifiche.

     sudo systemctl restart mysql
    
  4. Verifica lo stato di MySQL e assicurati che sia active .

     sudo systemctl status mysql
    
    mysql.service - MySQL Community Server
         Loaded: loaded (/lib/systemd/system/mysql.service; enabled; vendor preset:>
         Active: active (running) since Mon 2021-05-31 16:29:48 UTC; 6s ago
  5. (Facoltativo ) MySQL consiglia di utilizzare SSL per connettersi alla sorgente per una maggiore sicurezza. Ulteriori informazioni sulla configurazione di SSL sono disponibili nella documentazione SSL MySQL. LoStrumento di configurazione RSA può essere utilizzato per accelerare questo processo.

Importa i dati MySQL replicati e attiva la replica

Il passaggio successivo consiste nell'importare la copia dei dati del database, impostare l'origine della replica e riavviare il server del database di replica. La replica dovrebbe quindi essere sincronizzata e pronta per l'uso.

  1. Immettere il seguente comando dalla shell Linux per importare il database di origine. Specificare il nome del database utilizzato per esportare i dati in precedenza.

     sudo mysql -u root -p < databasecopy.sql
    
  2. Accedi alla shell MySQL.

     sudo mysql -u root -p
    
  3. Interrompi la replica.

     STOP REPLICA;
    
  4. Inserisci il CHANGE REPLICATION SOURCE comando, insieme ai seguenti dettagli. Sostituisci l'indirizzo IP del server del database di origine al posto di source_ip_address . Per SOURCE_USER e SOURCE_PASSWORD , inserisci il nome utente e la password della replica nella sezione Configura un nuovo utente MySQL per la replica. Per il SOURCE_LOG_FILE e SOURCE_LOG_POS valori, inserisci le informazioni che hai registrato da SHOW MASTER STATUS; comando.

     CHANGE REPLICATION SOURCE TO SOURCE_HOST='source_ip_address',SOURCE_USER='replica_account_name', SOURCE_PASSWORD='REPLICA_PASSWORD', SOURCE_LOG_FILE='log_file_name', SOURCE_LOG_POS=log_position;
    
    Nota Per utilizzare SSL per la connessione, consigliata da MySQL, aggiungi l'attributo SOURCE_SSL=1 al comando. Ulteriori informazioni sull'utilizzo di SSL in un contesto di replica sorgente sono disponibili nella documentazione di MySQL.
  5. Riavvia la replica.

     START REPLICA;
    
  6. Verificare lo stato della replica. La replica dovrebbe essere in attesa di eventi e non dovrebbe esserci alcun Last_IO_Error o Last_Error eventi. Lo Slave_SQL_Running_State voce dovrebbe indicare che la replica ha letto il registro di inoltro.

     SHOW REPLICA STATUS\G
    
    Slave_IO_State: Waiting for master to send event
                      Master_Host: 178.79.153.39
                      Master_User: replica
                      Master_Port: 3306
                    Connect_Retry: 60
                  Master_Log_File: mysql-bin.000006
              Read_Master_Log_Pos: 156
                   Relay_Log_File: mysql-relay-bin.000006
                    Relay_Log_Pos: 371
            Relay_Master_Log_File: mysql-bin.000006
                 Slave_IO_Running: Yes
                Slave_SQL_Running: Yes
    ..
                       Last_Errno: 0
                       Last_Error:
    ..
            Seconds_Behind_Master: 0
    Master_SSL_Verify_Server_Cert: No
                    Last_IO_Errno: 0
                    Last_IO_Error:
                   Last_SQL_Errno: 0
                   Last_SQL_Error:
      Replicate_Ignore_Server_Ids:
                 Master_Server_Id: 1
                      Master_UUID: 5bed9d10-c140-11eb-bc63-f23c92a2a6ac
                 Master_Info_File: mysql.slave_master_info
                        SQL_Delay: 0
              SQL_Remaining_Delay: NULL
          Slave_SQL_Running_State: Slave has read all relay log; waiting for more updates

Test replica replica sorgente MySQL

Se il database di origine era già popolato prima della creazione di un'istanza della replica, sono necessari ulteriori test. In questo caso, verificare che i database e le tabelle esistenti nell'origine siano presenti nella replica dopo l'importazione dei dati. Nel SHOW REPLICA STATUS display, lo Slave_SQL_Running_State la voce dovrebbe leggere Slave has read all relay log .

Per verificare che la replica avvenga correttamente, creare un nuovo database o tabella nell'origine. Dopo alcuni secondi, la nuova voce dovrebbe essere presente sulla replica. Convalida la presenza del database utilizzando SHOW DATABASES; comando. Per confermare la presenza di una tabella, passare al database utilizzando USE databasename; e inserisci SHOW TABLES; . È anche una buona idea eseguire SHOW REPLICA STATUS comandare ed esaminare l'output per eventuali errori. Il Last_Error e Last_IO_Error i campi devono essere vuoti e la replica deve rimanere connessa.

Ulteriori informazioni sulla replica della replica sorgente di MySQL

La migliore fonte di informazioni sulla replica della replica sorgente è la documentazione ufficiale di MySQL. La sezione sulla replica contiene informazioni più dettagliate sull'architettura e sul processo di installazione. Potrebbero essere utili anche i forum MySQL.

Maggiori informazioni

Si consiglia di consultare le seguenti risorse per ulteriori informazioni su questo argomento. Sebbene questi siano forniti nella speranza che possano essere utili, tieni presente che non possiamo garantire l'accuratezza o la tempestività dei materiali ospitati esternamente.

  • Documentazione MySQL