sql >> Database >  >> RDS >> Mysql

Rolling-upgrades uitvoeren voor MySQL

Er zijn verschillende redenen om uw databases te upgraden. Het kan zijn om beveiligingsoplossingen toe te passen, nieuwe functies te gebruiken, compatibiliteitsproblemen op te lossen of gewoon om uw systeem up-to-date te houden. Deze upgrade kan een grote of een kleine upgrade zijn, en afhankelijk van de technologie zijn er verschillende benaderingen om dit werk te doen, maar als u uw systemen constant wilt laten draaien zonder downtime, kan het uitvoeren van een doorlopende upgrade de beste optie zijn .

In deze blog zullen we enkele overwegingen zien waarmee we rekening moeten houden voordat we een upgrade uitvoeren en hoe we een doorlopende upgrade op MySQL kunnen uitvoeren.

Kleine versus grote upgrades

Over het algemeen zijn kleine upgrades veilig in de zin dat je ze gemakkelijk kunt downgraden of terugdraaien en moeten ze compatibel zijn met de vorige pakketten en functies.

Een grote versie-upgrade brengt enkele risico's met zich mee, zoals het verwijderen van databasepakketten, compatibiliteit van configuratie en connectoren, verouderde functies en meer.

Dus zelfs wanneer testen belangrijk is voor beide scenario's, is het in het geval van grote upgrades een must als u ernstige problemen voor uw bedrijf wilt voorkomen.

Vóór het upgraden

Laten we nu enkele overwegingen bekijken voordat u een upgrade uitvoert, om toekomstige problemen te voorkomen.

Back-ups

Back-ups zijn altijd belangrijk, en nog belangrijker als je je database wilt upgraden. Als er iets misgaat en andere herstelopties bij calamiteiten mislukken, hebt u een back-up nodig om uw database te herstellen. Maak dus, voordat u met de taak begint, een volledige back-up (fysiek en/of logisch) van uw huidige database en bewaar deze totdat u zeker weet dat alles een paar dagen/weken goed werkt.

Beoordeel verouderde functies

Als u een functie gebruikt die in de nieuwe versie is verouderd, kan uw toepassing mislukken en moet u een rollback uitvoeren om uw systemen te herstellen, wat downtime veroorzaakt (afhankelijk van de aanpak) en een tijdverlies. Door de verouderde functie te controleren en deze te vergelijken met degene die u gebruikt, wordt deze mislukte upgradepoging voorkomen.

Testen

Dit is niet alleen belangrijk voor upgrades, maar ook voor elke wijziging in uw database of applicatie. Het hebben van een testomgeving die de productieomgeving repliceert, kan u tijd besparen en onverwachte problemen tijdens een upgrade of databasewijziging voorkomen.

Terugdraaien

Bij elke upgrade is het belangrijk om een ​​rollback klaar te hebben die indien nodig kan worden gebruikt om uw database zo snel mogelijk te laten werken. Anders kan dit van invloed zijn op uw RTO (Recovery Time Objective) voor het geval u het cluster opnieuw moet maken vanuit een back-up of een andere herstelplanoptie.

Houd er rekening mee dat downgrades soms niet mogelijk zijn, dus u zou een secundair plan moeten hebben voor het geval u uw wijzigingen ongedaan moet maken.

Leverancierscheques

Afhankelijk van de leverancier en versie, kunt u de opdracht mysqlcheck gebruiken om de voorlopige controle van uw huidige installatie uit te voeren en te bevestigen dat u klaar bent om te gaan.

$ 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

Dit is een eerste controle die moet worden uitgevoerd voordat de upgrade wordt uitgevoerd, en het zal controleren of er geen:

  • Tabellen met verouderde gegevenstypen of functies
  • Verweesde frm-bestanden
  • Triggers met ontbrekende of lege definitie of een ongeldige aanmaakcontext

Er zijn nog een paar dingen die je moet controleren, maar om een ​​uitgebreide blogpost te vermijden, kun je hiervoor de officiële MySQL-documentatie raadplegen.

Handmatige doorlopende upgrades voor MySQL

Er zijn verschillende manieren om een ​​doorlopende upgrade uit te voeren. Het kan op zijn plaats zijn, met behulp van replicatie, of zelfs een combinatie daarvan. Als u downtime wilt voorkomen, moet u in ieder geval geen wijzigingen aanbrengen in uw applicatie tijdens de upgrade. Hiervoor kun je een Load Balancer voor je databases toevoegen. Uw toepassing maakt verbinding met uw Load Balancer en leidt het verkeer om naar de beschikbare knooppunten.

Stel dat u een MySQL-replicatie hebt met 1 master- en 2 slave-knooppunten en 1 HAProxy-knooppunt ervoor:

Een vereenvoudigde manier om een ​​handmatige rolling upgrade uit te voeren op deze omgeving kan zijn:

  • Schakel één slave-knooppunt uit van uw HAProxy
  • Zorg ervoor dat u geen verkeer heeft op dit slave-knooppunt
  • Upgrade de slave-node handmatig
  • Controleer de replicatiestatus om er zeker van te zijn dat deze up-to-date is
  • Schakel het hoofdknooppunt in uw HAProxy uit
  • Zorg ervoor dat u geen verkeer op uw hoofdknooppunt heeft
  • De geüpgradede slave-node promoten
  • Schakel het in in uw HAProxy
  • Bevestig dat de nieuwe master verkeer ontvangt
  • Configureer uw tweede slave opnieuw om te repliceren vanaf de nieuwe master
  • Schakel de tweede slaaf van je HAProxy uit
  • Zorg ervoor dat u geen verkeer heeft op dit slave-knooppunt
  • Upgrade de slave-node handmatig
  • Controleer de replicatiestatus om er zeker van te zijn dat deze up-to-date is
  • Schakel het in in uw HAProxy
  • Bevestig dat het slave-knooppunt verkeer ontvangt (indien nodig)
  • Configureer je oude master opnieuw om te repliceren vanaf de nieuwe master
  • Upgrade het oude hoofdknooppunt handmatig
  • Controleer de replicatiestatus om er zeker van te zijn dat deze up-to-date is
  • Schakel het in in uw HAProxy
  • Bevestig dat de oude master (nu slave) verkeer ontvangt (indien nodig)

Zoals je kunt zien, vereist deze taak, zelfs op een vereenvoudigde manier, veel stappen, en het betekent meer mogelijkheden dat er iets misgaat.

ClusterControl Rolling Upgrades voor MySQL

De beste manier om de kans op fouten te verkleinen, is door al deze (of bijna alle) stappen te automatiseren. Met ClusterControl kunt u met slechts een paar klikken een kleine voortschrijdende upgrade van uw MySQL-cluster uitvoeren.

Ga hiervoor naar ClusterControl -> Selecteer Cluster -> Beheren -> Upgrades, waar u de optie Upgrade ziet.

Upgrades zijn online en worden op één knooppunt tegelijk uitgevoerd. Het knooppunt wordt gestopt, de software wordt bijgewerkt en het knooppunt wordt opnieuw gestart. Als een node niet kan upgraden, wordt het proces afgebroken.

Als u de optie Upgrade kiest, ziet u een bevestiging over de versie die wordt geüpgraded:

En je hoeft alleen maar op Upgraden te drukken om deze taak te bevestigen. Hierna kunt u het upgradeproces volgen in de sectie ClusterControl Activity:

Tegelijkertijd zal ClusterControl uw Load Balancers opnieuw configureren om het verkeer te verzenden naar de beschikbare knooppunten.

ClusterControl ondersteunt alleen kleine upgrades, omdat, zoals we eerder vermeldden, een grote upgrade een riskante taak is die moet worden getest en onderzocht om er zeker van te zijn dat uw toepassing goed werkt op de nieuwe hoofdversie.

ClusterControl ondersteunt alleen kleine upgrades.

P>

Conclusie

Upgraden is een belangrijke taak in alle bedrijven en het kan riskant zijn als je bepaalde voorzorgsmaatregelen niet neemt en alle upgradestappen correct volgt.

In deze blog hebben we enkele overwegingen genoemd waarmee u rekening moet houden voordat u uw database opwaardeert, en we hebben het verschil laten zien tussen deze taak handmatig uitvoeren en het gebruik van ClusterControl, waarmee u de kans op fouten minimaliseert.


  1. Is de volgorde van kolommen in een WHERE-clausule van belang?

  2. Hoe gebruik je een externe sleutel in sqlite?

  3. MySQL-verschil tussen twee rijen van een SELECT-instructie

  4. MySQL Sommige buitenlandse sleutels verwijderen