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

Come eseguire aggiornamenti in sequenza per MySQL

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.