sql >> Databasteknik >  >> RDS >> Mysql

Hur man utför rullande uppgraderingar för MySQL

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.


  1. Kör inbyggd sql med viloläge

  2. Hur man väljer en delmängd av kolumner från en lagrad procedurs resultatuppsättning (T-SQL)

  3. Hur man får distinkta poster från en tabell i SQL Server - SQL Server / TSQL Tutorial 112

  4. Hur kan jag exportera schemat för en databas i PostgreSQL?