Come configurare la replica di MySQL con tempi di inattività minimi


12

Fondamentalmente abbiamo un grande database MySQL e stiamo cercando di eseguire la replica su uno slave (configurazione master slave). Ragazzi, avete una guida dettagliata su come eseguire questa operazione con tempi di inattività MINIMI nel database? Il backup del database e il trasferimento del backup sul server slave (anche attraverso una rete privata) richiedono circa 40 minuti circa. Abbastanza tempo di inattività.

Risposte:


15

Presumo che tu usi InnoDB come motore di archiviazione. In tal caso, è necessario attivare la registrazione bin . Se non è attivo ora, è necessario riavviare MySQL dopo aver modificato my.cnf. È l'unico tempo di inattività, dopo il quale è possibile eseguire il dump del database con la posizione binlog senza bloccare il database:

mysqldump --skip-lock-tables --single-transaction --flush-logs --hex-blob --master-data=2 -A

Sulla base di questo backup, ripristinare i dati sullo slave. Dopodiché, puoi seguire qualsiasi tutorial di replica di MySQL e lasciare che gli slave recuperino / eseguano insieme al master.


cosa succederebbe se alcune tabelle non usassero innodb? E il backup di cui sopra sarebbe ancora valido se uso --database per scaricare un sottoinsieme dei database invece di -A?
Mathieu,

se alcune tabelle non usano innodb il backup potrebbe essere incoerente. vedi qui: stackoverflow.com/a/7461466/104398 ; il backup non conterrà quei database saltati. se si imposta la replica in base a tale backup e non si filtra ciò che viene replicato, la replica si interromperà non appena verranno eseguite operazioni sui database omessi.
pQd

Ok, ho convertito le mie restanti tabelle myisam in innodb e mi sono assicurato che solo i database desiderati fossero replicati / sottoposti a backup.
Mathieu,

3

per avviare una replica è necessaria una copia coerente del database sullo slave

i tuoi tavoli sono supportati da myisam o innodb? per scoprire il problema

show table status

e guarda la colonna "Motore"

se tutte le tabelle sono innodb di quelle che è possibile eseguire zero tempi di inattività utilizzando mysqldump - single-transazione e importandola nello slave

se le tabelle sono myisam ci saranno tempi di inattività in quanto è necessario bloccare le tabelle per la scrittura mentre vengono copiate. mysqlhotcopy è lo strumento che ti aiuta in questo.

in alternativa, se si utilizza LVM (gestore volume logico), è possibile arrestare il database, eseguire un'istantanea LVM in pochi secondi e riavviare il db. Quindi è possibile effettuare una copia coerente dall'istantanea.


1

Per configurare lo slave è necessario acquisire un'istantanea dei dati e registrare la posizione del registro binario. Il backup del database non dovrebbe causare tempi di inattività, anche se ridurrà le prestazioni, ma stai già eseguendo il backup del database, giusto? Potresti trovare il backup necessario per bloccare alcune tabelle e questo potrebbe causare blocchi sulla tua applicazione, devi davvero vedere come è implementato per questo.

Puoi eseguire l'istantanea del disco? Ciò ridurrebbe notevolmente i tempi di inattività se è possibile eseguire un hotbackup.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.