Det finns olika anledningar till att uppgradera dina databaser. Det kan vara att tillämpa säkerhetskorrigeringar, att använda nya funktioner, lösa kompatibilitetsproblem eller bara för att hålla ditt system uppdaterat. Denna uppgradering kan vara en större eller mindre uppgradering, och beroende på tekniken finns det olika tillvägagångssätt för att utföra det här jobbet, men om du behöver dina system köra hela tiden utan stilleståndstid, kan en rullande uppgradering vara det bästa alternativet .
I den här bloggen kommer vi att se några överväganden att ta hänsyn till innan uppgradering och hur man utför en rullande uppgradering på MySQL.
Mindre vs större uppgraderingar
I allmänhet är mindre uppgraderingar säkra på det sättet att du enkelt kan nedgradera eller återställa dem och bör vara kompatibla med de tidigare paketen och funktionerna.
Större versionsuppgraderingar innebär vissa risker som borttagning av databaspaket, konfiguration och kopplingskompatibilitet, föråldrade funktioner och mer.
Så även när testning är viktigt för båda scenarierna, vid större uppgraderingar, är det ett måste om du vill undvika allvarliga problem för ditt företag.
Innan du uppgraderar
Låt oss nu se några överväganden innan vi uppgraderar för att undvika framtida problem.
Säkerhetskopiering
Säkerhetskopiering är alltid viktigt, och ännu mer om du vill uppgradera din databas. Om något går fel, och andra alternativ för katastrofåterställning misslyckas, behöver du en säkerhetskopia för att återställa din databas. Så innan du startar uppgiften, ta en fullständig säkerhetskopia (fysisk eller/och logisk) av din nuvarande databas och förvara den på ett säkert sätt tills du är säker på att allt fungerar som det ska i ett par dagar/veckor.
Granska utfasade funktioner
Om du använder en funktion som är föråldrad i den nya versionen kan din applikation misslyckas och du måste återställa för att återställa dina system, vilket kommer att generera stilleståndstid (beror på tillvägagångssätt) och en tidsförlust. Om du kontrollerar den föråldrade funktionen och jämför dem med de du använder undviker du detta misslyckade uppgraderingsförsök.
Testar
Detta är viktigt inte bara för uppgraderingar utan även för alla ändringar i din databas eller applikation. Att ha en testmiljö som replikerar produktionsmiljön kan spara tid och undvika oväntade problem under uppgraderingar eller databasändringar.
Återställ
I alla uppgraderingar är det viktigt att ha en återställning redo att användas om det behövs för att få din databas igång ASAP. Annars kan det påverka din RTO (Recovery Time Objective) om du behöver återskapa klustret från en säkerhetskopia eller ett annat alternativ för återställningsplan.
Tänk på att nedgraderingar ibland inte är möjliga, så du bör ha en sekundär plan ifall du behöver återställa dina ändringar.
Leveranskontroller
Beroende på leverantör och version kan du använda kommandot mysqlcheck för att utföra den preliminära kontrollen av din nuvarande installation och bekräfta att du är redo att börja.
$ 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
Detta är en första kontroll att utföra innan uppgradering, och den kommer att kontrollera att det inte finns:
- Tabeller som använder föråldrade datatyper eller funktioner
- föräldralösa frm-filer
- Triggers med saknad eller tom definierare eller ett ogiltigt skapande sammanhang
Det finns några fler saker du behöver kontrollera men för att undvika ett omfattande blogginlägg kan du hänvisa till den officiella MySQL-dokumentationen för detta.
Manuella rullande uppgraderingar för MySQL
Det finns olika metoder för att utföra en rullande uppgradering. Det kan vara på plats, med hjälp av replikering, eller till och med en blandning av dem. I vilket fall som helst, om du vill undvika driftstopp bör du inte göra ändringar i din applikation under uppgraderingen. För detta kan du lägga till en lastbalanserare framför dina databaser. Din applikation kommer att ansluta till din Load Balancer, och den kommer att omdirigera trafiken till de tillgängliga noderna.
Låt oss säga att du har en MySQL-replikering med 1 master- och 2 slavnoder och 1 HAProxy-nod framför dem:
Ett förenklat sätt att utföra en manuell rullande uppgradering i den här miljön kan vara:
- Inaktivera en slavnod från din HAProxy
- Se till att du inte har trafik på den här slavnoden
- Uppgradera slavnoden manuellt
- Kontrollera replikeringsstatusen för att se till att den är uppdaterad
- Inaktivera huvudnoden i din HAProxy
- Se till att du inte har trafik på din huvudnod
- Marknadsför den uppgraderade slavnoden
- Aktivera det i din HAProxy
- Bekräfta att den nya mastern tar emot trafik
- Konfigurera om din andra slav för att replikera från den nya mastern
- Inaktivera den andra slaven från din HAProxy
- Se till att du inte har trafik på den här slavnoden
- Uppgradera slavnoden manuellt
- Kontrollera replikeringsstatusen för att se till att den är uppdaterad
- Aktivera det i din HAProxy
- Bekräfta att slavnoden tar emot trafik (om det behövs)
- Konfigurera om din gamla master för att replikera från den nya master
- Uppgradera den gamla huvudnoden manuellt
- Kontrollera replikeringsstatusen för att se till att den är uppdaterad
- Aktivera det i din HAProxy
- Bekräfta att den gamla mastern (nu slav) tar emot trafik (om det behövs)
Som du kan se, även på ett förenklat sätt, kräver denna uppgift många steg, och det innebär fler möjligheter att något går fel.
ClusterControl Rolling Uppgraderingar för MySQL
Det bästa sättet att minska risken för fel är att automatisera alla (eller nästan alla) dessa steg. Med ClusterControl kan du utföra en mindre rullande uppgradering av ditt MySQL-kluster med bara några få klick.
För att göra detta, gå till ClusterControl -> Välj Cluster -> Hantera -> Uppgraderingar, där du ser alternativet Uppgradera.
Uppgraderingar är online och utförs på en nod i taget. Noden kommer att stoppas, programvaran kommer att uppdateras och sedan kommer noden att startas igen. Om en nod inte kan uppgraderas avbryts processen.
Om du väljer alternativet Uppgradera kommer du att se en bekräftelse om versionen som kommer att uppgraderas:
Och du behöver bara trycka på Uppgradera för att bekräfta jobbet. Efter detta kan du övervaka uppgraderingsprocessen i ClusterControl Activity Section:
Samtidigt kommer ClusterControl att konfigurera om dina lastbalanserare för att skicka trafiken till de tillgängliga noderna.
ClusterControl stöder endast mindre uppgraderingar, eftersom, som vi nämnde tidigare, en större uppgradering är en riskfylld uppgift som kräver testning och forskning för att säkerställa att din applikation kommer att fungera bra på den nya huvudversionen.
Slutsats
Uppgradering är en viktig uppgift i alla företag och det kan vara riskabelt om du inte vidtar vissa försiktighetsåtgärder och följer alla uppgraderingssteg korrekt.
I den här bloggen nämnde vi några överväganden att ta hänsyn till innan du uppgraderar din databas, och vi visade skillnaden mellan att göra den här uppgiften manuellt och att använda ClusterControl, vilket hjälper dig att minimera risken för misslyckanden.