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

Sådan udføres rullende opgraderinger til MySQL

Der er forskellige grunde til at opgradere dine databaser. Det kan være at anvende sikkerhedsrettelser, bruge nye funktioner, løse kompatibilitetsproblemer eller bare holde dit system opdateret. Denne opgradering kan være en større opgradering eller en mindre, og afhængigt af teknologien er der forskellige tilgange til at udføre dette job, men hvis du har brug for, at dine systemer kører hele tiden uden nedetid, kan det være den bedste løsning at udføre en rullende opgradering .

I denne blog vil vi se nogle overvejelser, der skal tages i betragtning før opgradering, og hvordan man udfører en rullende opgradering på MySQL.

Mindre vs større opgraderinger

Generelt er mindre opgraderinger sikre på den måde, at du nemt kan nedgradere eller rulle det tilbage og bør være kompatible med de tidligere pakker og funktioner.

Større versionsopgradering indebærer nogle risici som f.eks. fjernelse af databasepakke, konfiguration og kompatibilitet med forbindelser, forældede funktioner og mere.

Så selv når test er vigtigt for begge scenarier, i tilfælde af større opgraderinger, er det et must, hvis du vil undgå alvorlige problemer for din virksomhed.

Før opgradering

Lad os nu se nogle overvejelser, før vi opgraderer, for at undgå fremtidige problemer.

Sikkerhedskopier

Sikkerhedskopier er altid vigtige, og endnu mere, hvis du vil opgradere din database. Hvis noget går galt, og andre muligheder for gendannelse af katastrofer mislykkes, skal du have en sikkerhedskopi for at gendanne din database. Så før du starter opgaven, skal du tage en fuld sikkerhedskopi (fysisk eller/og logisk) af din nuværende database og opbevare den sikkert, indtil du er sikker på, at alt fungerer korrekt i et par dage/uger.

Gennemgå forældede funktioner

Hvis du bruger en funktion, der er forældet i den nye version, kan din applikation fejle, og du bliver nødt til at rulle tilbage for at gendanne dine systemer, hvilket vil generere nedetid (afhænger af tilgangen) og en tab af tid. Hvis du tjekker den forældede funktion og sammenligner dem med dem, du bruger, undgår du dette mislykkede opgraderingsforsøg.

Test

Dette er vigtigt ikke kun for opgraderinger, men også for enhver ændring i din database eller applikation. At have et testmiljø, der replikerer produktionsmiljøet, kan spare din tid og undgå uventede problemer under enhver opgradering eller databaseændring.

Tilbage

I enhver opgradering er det vigtigt at have en rollback klar til at blive brugt, hvis det er nødvendigt for at få din database op at køre ASAP. Ellers kan det påvirke din RTO (Recovery Time Objective), hvis du har brug for at genskabe klyngen fra en sikkerhedskopi eller en anden mulighed for gendannelsesplan.

Husk på, at nedgraderinger nogle gange ikke er mulige, så du bør have en sekundær plan, hvis du har brug for at rulle dine ændringer tilbage.

Leverandørchecks

Afhængigt af leverandøren og versionen kan du bruge kommandoen mysqlcheck til at udføre den foreløbige kontrol af din nuværende installation og bekræfte, at du er klar til at gå.

$ 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

Dette er en første kontrol, der skal udføres før opgradering, og den vil kontrollere, at der ikke er:

  • Tabeller, der bruger forældede datatyper eller funktioner
  • Forældreløse frm-filer
  • Triggere med manglende eller tom definerer eller en ugyldig oprettelseskontekst

Der er et par flere ting, du skal tjekke, men for at undgå et omfattende blogindlæg kan du henvise til den officielle MySQL-dokumentation for dette.

Manuelle rullende opgraderinger til MySQL

Der er forskellige tilgange til at udføre en rullende opgradering. Det kunne være på plads ved hjælp af replikering eller endda en blanding af dem. Under alle omstændigheder, hvis du vil undgå nedetid, bør du ikke udføre ændringer i din applikation under opgraderingen. Til dette kan du tilføje en Load Balancer foran dine databaser. Din applikation vil oprette forbindelse til din Load Balancer, og den vil omdirigere trafikken til de tilgængelige noder.

Lad os sige, at du har en MySQL-replikering med 1 master- og 2 slaveknudepunkter og 1 HAProxy-knude foran dem:

En forenklet måde at udføre en manuel rullende opgradering på dette miljø kunne være:

  • Deaktiver én slaveknude fra din HAProxy
  • Sørg for, at du ikke har trafik på denne slaveknude
  • Opgrader slavenoden manuelt
  • Tjek replikeringsstatussen for at sikre, at den er opdateret
  • Deaktiver masternoden i din HAProxy
  • Sørg for, at du ikke har trafik på din masterknude
  • Promover den opgraderede slaveknude
  • Aktiver det i din HAProxy
  • Bekræft, at den nye master modtager trafik
  • Genkonfigurer din anden slave til at replikere fra den nye master
  • Deaktiver den anden slave fra din HAProxy
  • Sørg for, at du ikke har trafik på denne slaveknude
  • Opgrader slavenoden manuelt
  • Tjek replikeringsstatussen for at sikre, at den er opdateret
  • Aktiver det i din HAProxy
  • Bekræft, at slavenoden modtager trafik (hvis nødvendigt)
  • Genkonfigurer din gamle master til at replikere fra den nye master
  • Opgrader den gamle masterknude manuelt
  • Tjek replikeringsstatussen for at sikre, at den er opdateret
  • Aktiver det i din HAProxy
  • Bekræft, at den gamle master (nu slave) modtager trafik (hvis nødvendigt)

Som du kan se, selv på en forenklet måde, kræver denne opgave mange trin, og det betyder flere muligheder for, at noget går galt.

ClusterControl rullende opgraderinger til MySQL

Den bedste måde at reducere muligheden for fejl på er ved at automatisere alle (eller næsten alle) disse trin. Ved at bruge ClusterControl kan du udføre en mindre rullende opgradering af din MySQL-klynge med blot et par klik.

For at gøre dette skal du gå til ClusterControl -> Vælg Cluster -> Administrer -> Opgraderinger, hvor du kan se Opgraderingsindstillingen.

Opgraderinger er online og udføres på én node ad gangen. Noden vil blive stoppet, softwaren vil blive opdateret, og derefter vil noden blive startet igen. Hvis en node ikke opgraderer, afbrydes processen.

Hvis du vælger Opgrader, vil du se en bekræftelse på den version, der vil blive opgraderet:

Og du skal bare trykke på Opgrader for at bekræfte dette job. Herefter kan du overvåge opgraderingsprocessen i ClusterControl Activity Section:

Samtidig omkonfigurerer ClusterControl dine Load Balancers til at sende trafikken til de tilgængelige noder.

ClusterControl understøtter kun mindre opgraderinger, fordi, som vi nævnte før, en større opgradering er en risikabel opgave, der kræver testning og forskning for at sikre, at din applikation vil fungere fint på den nye større version.

Konklusion

Opgradering er en vigtig opgave i alle virksomheder, og det kan være risikabelt, hvis du ikke tager visse forholdsregler og følger alle opgraderingstrinene korrekt.

I denne blog nævnte vi nogle overvejelser, du skal tage i betragtning, før du opgraderer din database, og vi viste forskellen mellem at udføre denne opgave manuelt og bruge ClusterControl, som hjælper dig med at minimere muligheden for fejl.


  1. Aktiver logning af langsomme forespørgsler (langsom forespørgselslog) i MySQL-databasen

  2. Kom godt i gang med GearHost til MySQL-databaseudvikling

  3. Microsoft Access Table Tips – Tricks og retningslinjer Del 5

  4. Sådan ændres gendannelsesmodellen for en SQL Server-database ved hjælp af T-SQL