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.