GNU/Linux >> Linux Esercitazione >  >> Linux

Configura la replica della replica sorgente di MySQL

La replica MySQL® consente di replicare un server di database (denominato server di origine in questo articolo) su uno o più server di database (denominati server di replica in questo articolo). Con MySQL, la replica è asincrona. Ciò significa che non è necessario che i server di replica siano collegati in modo permanente per ricevere gli aggiornamenti dal server di origine. Ad esempio, puoi interrompere il thread di replica sul server di replica e riavviarlo in un secondo momento e si sincronizzerà automaticamente con l'origine.

Questo tutorial fornisce una configurazione semplice (un singolo server di origine che replica su un singolo server di replica) che replica tutti i database dall'origine alla replica.

Prerequisiti

Prima di iniziare questo tutorial, completa i seguenti passaggi.

  • Installa il tuo sistema operativo. (I passaggi in questo articolo vengono completati utilizzando un sistema operativo CentOS®)
  • Installa MySQL
  • Installa mysql-devel
  • Installa mysql-server

Nota: La procedura in questo articolo descrive la configurazione della replica su un nuovo set di server senza dati o database. Questo è importante perché i dati esistenti sui server eliminano la replica. Puoi usare questa procedura per altri gusti di Linux®

Raccogli informazioni IP

La configurazione MySQL in questo articolo viene replicata sugli IP privati ​​del tuo server cloud. Prendi nota dell'IP privato di ciascun server.

Fonte:

[user@mysql-source ~]$ /sbin/ifconfig
 eth0      Link encap:Ethernet  HWaddr 40:40:51:B7:A4:2E
           inet addr:67.23.9.185  Bcast:67.23.9.255  Mask:255.255.255.0
           inet6 addr: fe80::4240:51ff:feb7:a42e/64 Scope:Link
           UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
           RX packets:28878 errors:0 dropped:0 overruns:0 frame:0
           TX packets:15147 errors:0 dropped:0 overruns:0 carrier:0
           collisions:0 txqueuelen:1000
           RX bytes:37708534 (35.9 MiB)  TX bytes:1129533 (1.0 MiB)

 eth1      Link encap:Ethernet  HWaddr 40:40:1A:AF:35:F2
           inet addr:10.176.41.72  Bcast:10.176.63.255 Mask:255.255.224.0
           inet6 addr: fe80::4240:1aff:feaf:35f2/64 Scope:Link
           UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
           RX packets:3 errors:0 dropped:0 overruns:0 frame:0
           TX packets:13 errors:0 dropped:0 overruns:0 carrier:0
           collisions:0 txqueuelen:1000
           RX bytes:230 (230.0 b)  TX bytes:762 (762.0 b)

 lo        Link encap:Local Loopback
           inet addr:127.0.0.1  Mask:255.0.0.0
           inet6 addr: ::1/128 Scope:Host
           UP LOOPBACK RUNNING  MTU:16436  Metric:1
           RX packets:0 errors:0 dropped:0 overruns:0 frame:0
           TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
           collisions:0 txqueuelen:0
           RX bytes:0 (0.0 b)  TX bytes:0 (0.0 b)

Vuoi prendere nota dell'IP mostrato per eth1 . L'indirizzo IP è elencato subito dopo inet addr: . In questo esempio, l'IP privato del server di origine è 10.176.41.72. Ripetilo sul server di replica e prendi nota dell'IP privato.

Replica:

 [user@mysql-replica ~]$ /sbin/ifconfig
 eth0      Link encap:Ethernet  HWaddr 40:40:BE:90:EB:1E
           inet addr:67.23.10.69  Bcast:67.23.10.255  Mask:255.255.255.0
           inet6 addr: fe80::4240:beff:fe90:eb1e/64 Scope:Link
           UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
           RX packets:29047 errors:0 dropped:0 overruns:0 frame:0
           TX packets:13527 errors:0 dropped:0 overruns:0 carrier:0
           collisions:0 txqueuelen:1000
           RX bytes:37743828 (35.9 MiB)  TX bytes:1473375 (1.4 MiB)

 eth1      Link encap:Ethernet  HWaddr 40:40:AE:5B:35:3A
           inet addr:10.176.41.207  Bcast:10.176.63.255 Mask:255.255.224.0
           inet6 addr: fe80::4240:aeff:fe5b:353a/64 Scope:Link
           UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
           RX packets:3 errors:0 dropped:0 overruns:0 frame:0
           TX packets:13 errors:0 dropped:0 overruns:0 carrier:0
           collisions:0 txqueuelen:1000
           RX bytes:230 (230.0 b)  TX bytes:762 (762.0 b)

 lo        Link encap:Local Loopback
           inet addr:127.0.0.1  Mask:255.0.0.0
           inet6 addr: ::1/128 Scope:Host
           UP LOOPBACK RUNNING  MTU:16436  Metric:1
           RX packets:0 errors:0 dropped:0 overruns:0 frame:0
           TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
           collisions:0 txqueuelen:0
           RX bytes:0 (0.0 b)  TX bytes:0 (0.0 b)

L'indirizzo IP per il nostro server di replica in questo esempio è 10.176.41.207. Quando hai entrambi gli IP privati ​​annotati da qualche parte, sei a posto per iniziare la configurazione.

Configura il server

Fonte

  • Modifica il /etc/my.cnf file sul server di origine per abilitare la registrazione binaria e impostare il nome del server.

      [user@mysql-source ~]$ sudo vi /etc/my.cnf
    
  • Aggiungi queste righe sotto mysqld sezione.

      log-bin=/var/lib/mysqllogs/RackspaceServerID-theServerShortName-binary-log
      expire_logs_days=7
      server-name=<server_number>
    
  • Imposta l'utente di replica.

      mysql> GRANT REPLICATION SLAVE ON *.* to 'replicant'@'slaveIP' IDENTIFIED BY 'somepassword';
    

La fonte my.cnf la configurazione è completa.

Preparazione della replica

  • Verifica che i fusi orari corrispondano tra origine e replica.

  • Imposta i seguenti elementi:

      relay-log=/var/lib/mysqllogs/RackspaceServerID-theServerShortName-relay-log
      relay-log-space-limit = 16G
      read-only=1
      server-name=<server_number>
    

Copia iniziale dei dati da replicare

Scegli una delle seguenti opzioni per copiare i dati nella replica.

  • mysqldump
  • Copia i file flat

mysqldump

Considera questa opzione se la directory dei dati è di dimensioni ragionevoli e se puoi bloccare le tabelle per tutta la durata della procedura.

 mysqldump -A --flush-privileges --master-data=1 | gzip -1 > ~rack/master.sql.gz

Trasferisci il file di dump nella replica e importalo.

Copia i file flat

Per questo metodo, arresta MySQL su entrambi i server e sposta la directory dei dati fuori mano sulla replica. Se MySQL non viene arrestato su entrambi i server, è necessario eseguire un backup:

 # mv /var/lib/mysql{,.prereplication}

Utilizzare uno dei metodi sopra elencati per trasformare la directory dei dati nella replica in una copia dall'origine. Ad esempio:

 # rsync -azv --progress --delete /var/lib/mysql/ slave:/var/lib/mysql/

Al termine della copia dei dati, riavvia MySQL su entrambi i server. Verifica che innodb-log-file-size in /etc/my.cnf è impostato lo stesso per la replica e l'origine, oppure MySQL non verrà avviato sulla replica.

Se replica è una versione più recente di MySQL, esegui mysql_upgrade sulla replica prima di emettere lo start slave comando.

Allega replica all'origine

È necessario il nome del file di registro binario e la posizione dall'origine che corrisponde al backup. Se stai usando mysqldump , questo sarà incluso in master.sql.gz file stesso.

 # zgrep -m 1 -P 'CHANGE MASTER' master.sql.gz
 CHANGE MASTER TO MASTER_LOG_FILE = '<binary log filename>', MASTER_LOG_POS = <binary log position>;

Per una copia a livello di file come una copia a freddo ottenuta chiudendo MySQL e usando rsync , il nome e la posizione del file di registro binario saranno il primo file di registro creato dopo il riavvio di MySQL.

Puoi ottenerlo seguendo questi passaggi:

 # service mysqld stop
 # tail -n 1 /var/lib/mysqllogs/db1-1234-bin-log.index
 /var/lib/mysqllogs/db1-1234-bin-log.000001
 # rsync ...
 # service mysqld start

In questo caso, inizia con il nome del file db1-bin-log.000001 + 1 = db1-1234-bin-log.000002 all'inizio di questo file. Otterrai questo risultato:

 MASTER_LOG_FILE = 'db1-1234-bin-log.000002', MASTER_LOG_POS = 4

Ora esegui CHANGE MASTER sulla replica per impostare le credenziali per la connessione all'origine, nonché il file di log binario e la posizione da cui avviare la replica.

 mysql> change master to master_host='master-ip',master_user='userSetAbove', master_password='passwordSetAbove',master_log_file='logfile-from-above-command', master_log_pos=4;
 mysql> start slave;

Credenziali radice MySQL

Assicurati che la nuova replica abbia le stesse credenziali in /root/.my.cnf file come server di origine. Anche il database MySQL e la tabella delle autorizzazioni utente vengono sincronizzati con la replica.

Olanda

Poiché hai importato il database MySQL dall'origine, ora tutte le password sono le stesse. Proprio come hai aggiornato /root/.my.cnf su dbReplica in modo che corrisponda a dbSource, potrebbe essere necessario aggiornare /etc/holland/backupsets/default.conf file per utilizzare le stesse credenziali dell'origine per rackspace_backup .

Test

Verifica le tue impostazioni creando un database fittizio sull'origine e verificando che venga visualizzato nella replica. Una volta verificato, puoi eliminare il database fittizio e confermare che la replica lo elimini automaticamente.

Se vedi un errore come Last_IO_Error: error connecting to master , testare manualmente l'utente di replica. Dalla replica, prova due cose:

nc masterIP 3306

Se vedi un errore qui, la tua concessione è sbagliata, probabilmente perché ti trovi in ​​un segmento di rete diverso da quello che pensavi. L'errore sarà simile a Host dbSlave is not allowed to connect to this MySQL server .

mysql -ureplicant -hmasterDb -p

Se ricevi un errore, la tua concessione è sbagliata.

Se uno di questi non riesce a connettersi, potrebbe essere necessario regolare il firewall o verificare di fare supposizioni corrette su come è configurata la rete per questo cliente.

Filtraggio

Si consiglia di non utilizzare il filtro di replica. Se vuoi escludere alcune tabelle dalla replica, l'unico metodo consigliato è con uno dei seguenti my.cnf opzioni configurate sulla replica:

 replicate-wild-do-table=dbase1.%
 replicate-wild-do-table=dbase3.%

 replicate-wild-ignore-table=dbase2.%
 replicate-wild-ignore-table=dbase4.someTable

I modelli possono contenere i caratteri jolly % e \_ , che hanno lo stesso significato di LIKE operatore di corrispondenza dei modelli. Se devi utilizzare un carattere literal_, esegui l'escape come segue:

 replicate-wild-ignore-table=%.%\_tmp

In MySQL 5.5, le opzioni di filtro a livello di database fanno distinzione tra maiuscole e minuscole sulle piattaforme che supportano la distinzione tra maiuscole e minuscole nei nomi di file. Le opzioni di filtro a livello di tabella non fanno distinzione tra maiuscole e minuscole su qualsiasi piattaforma, indipendentemente dal valore di lower_case_table_names variabile di sistema.

Eventi

Se mio.cnf è stato abilitato sull'origine, è possibile disabilitarlo sulla replica. Se è necessario abilitare l'utilità di pianificazione eventi sulla replica, verificare che gli eventi esistenti siano stati creati con CREATE EVENT ... DISABLE ON SLAVE con qualcosa del tipo:select db, name from mysql.event where status not in (‘disabled’,‘slavename_disabled’);

Monitoraggio

Monitorare sempre la replica. In Emerging, generalmente utilizziamo SiteScope Content Match con check_replication.php , che in genere risiede in snamee httpd in esecuzione sulla replica.

È necessario emettere GRANT per questo sull'origine, che viene replicata nella replica:

 GRANT REPLICATION CLIENT ON *.* TO 'rep_monitor'@'slavePrimaryIP' IDENTIFIED BY 'somePassword';

Supponendo che tu sia dietro un firewall, 'slavePrimaryIP' dovrebbe essere l'indirizzo IP interno del server di replica [192.168.100.x]. In check_replication.php script, imposta host=‘192.168.100.x , l'IP interno del server su cui è in esecuzione lo script. Di solito è lo stesso di slavePrimaryIP .

Contatta il tuo account manager e richiedi la configurazione del monitor SiteScope. L'URL dovrebbe essere l'IP pubblico del server di monitoraggio, ad esempiohttps://68.23.45.32/check_replication.php

Nota: Lo script può avere elementi aggiuntivi nell'dsn list array e controllare più repliche con una singola sonda SiteScope. La documentazione PHP afferma che la virgola dopo l'ultimo elemento dell'array è opzionale e può essere omessa. Tuttavia, con il probe SiteScope che controlla più repliche, potrebbe essere meno chiaro quale replica ha avuto un problema quando l'avviso viene cancellato rapidamente. A questo proposito, può avere senso avere un check_replication.php e la sonda SiteScope corrispondente in esecuzione su ogni replica.

Ora siediti e lascia che il tuo server di replica si replichi dall'origine. Assicurarsi di non eseguire scritture sul server di replica perché ciò interrompe la replica! Tutte le scritture eseguite sull'origine vengono inviate automaticamente alla replica tramite il registro binario e la replica. Per ulteriori informazioni sulla replica di MySQL, vedere https://dev.mysql.com/doc/refman/5.0/en/replication.html.


Linux
  1. Come impostare la replica master-master di MySQL

  2. Come configurare MySQL Multi-Master Replication su Oracle Linux

  3. Come configurare la replica MySQL su CentOS

  4. Configura la replica della replica sorgente di MySQL

  5. Come configurare un database slave MySQL

Come configurare la replica MySQL Master-Slave su CentOS 7

Come configurare la replica master-slave MySQL (MariaDB) su Debian 10

Configura la replica multimaster OpenLDAP su Linux

Replica MySQL 8 Master-Slave su Ubuntu 20.04

Come installare e configurare MySQL su Ubuntu 18.04

Come impostare la replica MySQL Master-Slave su RHEL 7?