Ci sono diversi motivi per aggiornare i database. Potrebbe essere per applicare correzioni di sicurezza, utilizzare nuove funzionalità, risolvere problemi di compatibilità o semplicemente per mantenere aggiornato il sistema. Questo aggiornamento può essere un aggiornamento importante o minore e, a seconda della tecnologia, esistono diversi approcci per eseguire questo lavoro, ma se hai bisogno che i tuoi sistemi funzionino sempre senza tempi di inattività, eseguire un aggiornamento continuo potrebbe essere l'opzione migliore .
In questo blog, vedremo alcune considerazioni da tenere in considerazione prima dell'aggiornamento e come eseguire un aggiornamento in sequenza su MySQL.
Miglioramenti minori e maggiori
In generale, gli aggiornamenti minori sono sicuri in quanto puoi facilmente eseguire il downgrade o il rollback e dovrebbero essere compatibili con i pacchetti e le funzionalità precedenti.
L'aggiornamento della versione principale comporta alcuni rischi come la rimozione del pacchetto di database, la configurazione e la compatibilità dei connettori, le funzionalità deprecate e altro ancora.
Quindi, anche quando il test è importante per entrambi gli scenari, in caso di aggiornamenti importanti, è d'obbligo se vuoi evitare seri problemi alla tua azienda.
Prima dell'aggiornamento
Ora, vediamo alcune considerazioni prima dell'aggiornamento, per evitare problemi futuri.
Backup
I backup sono sempre importanti, e ancora di più se vuoi aggiornare il tuo database. Se qualcosa va storto e altre opzioni di ripristino di emergenza falliscono, sarà necessario un backup per ripristinare il database. Quindi, prima di iniziare l'attività, esegui un backup completo (fisico o/e logico) del database corrente e tienilo al sicuro fino a quando non ti assicurerai che tutto funzioni correttamente per un paio di giorni/settimane.
Esamina le funzionalità deprecate
Se stai utilizzando una funzionalità che è deprecata nella nuova versione, la tua applicazione potrebbe non riuscire e dovrai eseguire il rollback per ripristinare i tuoi sistemi, che genereranno tempi di inattività (dipende dall'approccio) e un perdita di tempo. Il controllo della funzionalità deprecata e il confronto con quelle che stai utilizzando eviterà questo tentativo di aggiornamento fallito.
Test
Questo è importante non solo per gli aggiornamenti ma anche per qualsiasi modifica al database o all'applicazione. Avere un ambiente di test che replichi l'ambiente di produzione potrebbe farti risparmiare tempo ed evitare problemi imprevisti durante qualsiasi aggiornamento o modifica del database.
Ripristino
In ogni aggiornamento, è importante avere un rollback pronto per essere utilizzato se necessario per avere il database attivo e funzionante al più presto. In caso contrario, potrebbe influire sull'RTO (Recovery Time Objective) nel caso in cui sia necessario ricreare il cluster da un backup o da un'altra opzione del piano di ripristino.
Tieni presente che a volte non è possibile effettuare il downgrade, quindi dovresti disporre di un piano secondario nel caso in cui sia necessario ripristinare le modifiche.
Controlli fornitore
A seconda del fornitore e della versione, puoi utilizzare il comando mysqlcheck per eseguire il controllo preliminare sulla tua installazione corrente e confermare che sei pronto per iniziare.
$ mysqlcheck -u root -p --all-databases --check-upgrade
Enter password:
mysql.columns_priv OK
mysql.db OK
mysql.engine_cost OK
mysql.event OK
mysql.func OK
mysql.general_log OK
mysql.gtid_executed OK
mysql.help_category OK
mysql.help_keyword OK
mysql.help_relation OK
mysql.help_topic OK
mysql.innodb_index_stats OK
mysql.innodb_table_stats OK
mysql.ndb_binlog_index OK
mysql.plugin OK
mysql.proc OK
mysql.procs_priv OK
mysql.proxies_priv OK
mysql.server_cost OK
mysql.servers OK
mysql.slave_master_info OK
mysql.slave_relay_log_info OK
mysql.slave_worker_info OK
mysql.slow_log OK
mysql.tables_priv OK
mysql.time_zone OK
mysql.time_zone_leap_second OK
mysql.time_zone_name OK
mysql.time_zone_transition OK
mysql.time_zone_transition_type OK
mysql.user OK
sys.sys_config OK
Questo è un primo controllo da eseguire prima dell'aggiornamento e verificherà che non ci siano:
- Tabelle che utilizzano tipi di dati o funzioni obsoleti
- File frm orfani
- Trigger con un definitore mancante o vuoto o un contesto di creazione non valido
Ci sono alcune altre cose che devi controllare, ma per evitare un lungo post sul blog, puoi fare riferimento alla documentazione ufficiale di MySQL per questo.
Aggiornamenti manuali in sequenza per MySQL
Ci sono diversi approcci per eseguire un aggiornamento in sequenza. Potrebbe essere sul posto, usando la replica o anche un mix di loro. In ogni caso, se vuoi evitare tempi di fermo, non dovresti apportare modifiche alla tua applicazione durante l'aggiornamento. Per questo, puoi aggiungere un Load Balancer davanti ai tuoi database. La tua applicazione si connetterà al tuo Load Balancer e reindirizzerà il traffico ai nodi disponibili.
Supponiamo che tu abbia una replica MySQL con 1 nodo master e 2 nodi slave e 1 nodo HAProxy davanti a loro:
Un modo semplificato per eseguire un aggiornamento in sequenza manuale su questo ambiente potrebbe essere:
- Disabilita un nodo slave dal tuo HAProxy
- Assicurati di non avere traffico su questo nodo slave
- Aggiorna manualmente il nodo slave
- Controlla lo stato della replica per assicurarti che sia aggiornato
- Disabilita il nodo master nel tuo HAProxy
- Assicurati di non avere traffico sul tuo nodo principale
- Promuove il nodo slave aggiornato
- Abilitalo nel tuo HAProxy
- Conferma che il nuovo master sta ricevendo traffico
- Riconfigura il tuo secondo slave per replicarlo dal nuovo master
- Disabilita il secondo slave dal tuo HAProxy
- Assicurati di non avere traffico su questo nodo slave
- Aggiorna manualmente il nodo slave
- Controlla lo stato della replica per assicurarti che sia aggiornato
- Abilitalo nel tuo HAProxy
- Conferma che il nodo slave sta ricevendo traffico (se necessario)
- Riconfigura il tuo vecchio master per replicarlo dal nuovo master
- Aggiorna manualmente il vecchio nodo master
- Controlla lo stato della replica per assicurarti che sia aggiornato
- Abilitalo nel tuo HAProxy
- Conferma che il vecchio master (ora slave) sta ricevendo traffico (se necessario)
Come puoi vedere, anche in modo semplificato, questo compito richiede molti passaggi e significa più possibilità che qualcosa vada storto.
Aggiornamenti in sequenza ClusterControl per MySQL
Il modo migliore per ridurre la possibilità di errore è automatizzare tutti (o quasi) questi passaggi. Usando ClusterControl puoi eseguire un piccolo aggiornamento in sequenza del tuo cluster MySQL con pochi clic.
Per fare ciò, vai su ClusterControl -> Seleziona Cluster -> Gestisci -> Aggiornamenti, dove vedi l'opzione Aggiorna.
Gli aggiornamenti sono online e vengono eseguiti su un nodo alla volta. Il nodo verrà arrestato, il software verrà aggiornato e quindi il nodo verrà riavviato. Se un nodo non viene aggiornato, il processo viene interrotto.
Se scegli l'opzione Upgrade, vedrai una conferma sulla versione che verrà aggiornata:
E devi solo premere Aggiorna per confermare questo lavoro. Successivamente, puoi monitorare il processo di aggiornamento nella Sezione Attività ClusterControl:
Allo stesso tempo, ClusterControl riconfigura i tuoi Load Balancer per inviare il traffico ai nodi disponibili.
ClusterControl supporta solo aggiornamenti minori, perché, come accennato in precedenza, un aggiornamento importante è un'attività rischiosa che richiede test e ricerca per assicurarsi che l'applicazione funzioni correttamente con la nuova versione principale.
Conclusione
L'aggiornamento è un compito importante in tutte le aziende e potrebbe essere rischioso se non si prendono determinate precauzioni e non si seguono correttamente tutti i passaggi dell'aggiornamento.
In questo blog abbiamo menzionato alcune considerazioni da tenere in considerazione prima di aggiornare il database e abbiamo mostrato la differenza tra l'esecuzione manuale di questa attività e l'utilizzo di ClusterControl, che aiuta a ridurre al minimo la possibilità di errore.