Istnieją różne powody aktualizacji baz danych. Może to być zastosowanie poprawek bezpieczeństwa, korzystanie z nowych funkcji, rozwiązywanie problemów ze zgodnością lub po prostu aktualizowanie systemu. Ta aktualizacja może być poważną lub drobną aktualizacją, a w zależności od technologii istnieją różne podejścia do wykonania tego zadania, ale jeśli potrzebujesz, aby Twoje systemy działały przez cały czas bez przestojów, wykonanie aktualizacji stopniowej może być najlepszą opcją .
W tym blogu zobaczymy kilka kwestii, które należy wziąć pod uwagę przed aktualizacją i jak przeprowadzić aktualizację stopniową w MySQL.
Mniejsze a większe aktualizacje
Ogólnie rzecz biorąc, drobne aktualizacje są bezpieczne w taki sposób, że można je łatwo obniżyć lub cofnąć i powinny być kompatybilne z poprzednimi pakietami i funkcjami.
Aktualizacja głównej wersji wiąże się z pewnym ryzykiem, takim jak usunięcie pakietu bazy danych, zgodność konfiguracji i złączy, przestarzałe funkcje i wiele innych.
Tak więc, nawet jeśli testowanie jest ważne dla obu scenariuszy, w przypadku dużych uaktualnień jest to konieczne, jeśli chcesz uniknąć poważnych problemów dla Twojej firmy.
Przed aktualizacją
Teraz przyjrzyjmy się kilku rozważaniom przed aktualizacją, aby uniknąć przyszłych problemów.
Kopie zapasowe
Kopie zapasowe są zawsze ważne, a nawet bardziej, jeśli chcesz uaktualnić swoją bazę danych. Jeśli coś pójdzie nie tak i inne opcje odzyskiwania po awarii zawiodą, będziesz potrzebować kopii zapasowej, aby przywrócić bazę danych. Tak więc przed rozpoczęciem zadania wykonaj pełną kopię zapasową (fizyczną lub/i logiczną) bieżącej bazy danych i przechowuj ją w bezpiecznym miejscu, aż upewnisz się, że wszystko działa poprawnie przez kilka dni/tygodni.
Przejrzyj wycofane funkcje
Jeśli używasz funkcji, która jest przestarzała w nowej wersji, Twoja aplikacja może się nie powieść i będziesz musiał wycofać, aby odzyskać swoje systemy, co spowoduje przestój (w zależności od podejścia) i maruda. Sprawdzenie przestarzałej funkcji i porównanie jej z używanymi funkcjami pozwoli uniknąć nieudanej próby uaktualnienia.
Testowanie
Jest to ważne nie tylko w przypadku aktualizacji, ale także wszelkich zmian w bazie danych lub aplikacji. Posiadanie środowiska testowego, które replikuje środowisko produkcyjne, może zaoszczędzić Twój czas i uniknąć nieoczekiwanych problemów podczas aktualizacji lub zmiany bazy danych.
Wycofanie
W przypadku każdej aktualizacji ważne jest, aby przywrócić gotowość do użycia w razie potrzeby, aby baza danych działała jak najszybciej. W przeciwnym razie może to wpłynąć na RTO (Cel czasu odzyskiwania) w przypadku konieczności odtworzenia klastra z kopii zapasowej lub innej opcji planu odzyskiwania.
Pamiętaj, że czasami obniżenie wersji nie jest możliwe, więc powinieneś mieć plan dodatkowy na wypadek konieczności wycofania zmian.
Kontrole dostawców
W zależności od dostawcy i wersji, możesz użyć polecenia mysqlcheck, aby przeprowadzić wstępne sprawdzenie bieżącej instalacji i potwierdzić gotowość do pracy.
$ 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
To jest pierwsza kontrola, którą należy wykonać przed aktualizacją i sprawdzi, czy nie ma:
- Tabele używające przestarzałych typów danych lub funkcji
- Osierocone pliki frm
- Wyzwalacze z brakującym lub pustym definiującym lub nieprawidłowym kontekstem tworzenia
Jest jeszcze kilka rzeczy, które musisz sprawdzić, ale aby uniknąć obszernego wpisu na blogu, możesz zapoznać się z oficjalną dokumentacją MySQL.
Ręczne aktualizacje kroczące dla MySQL
Istnieją różne podejścia do wykonywania aktualizacji kroczącej. Może być na miejscu, korzystając z replikacji, a nawet ich kombinacji. W każdym razie, jeśli chcesz uniknąć przestojów, nie powinieneś wprowadzać zmian w swojej aplikacji podczas aktualizacji. W tym celu możesz dodać Load Balancer przed swoimi bazami danych. Twoja aplikacja połączy się z Load Balancer i przekieruje ruch do dostępnych węzłów.
Załóżmy, że masz replikację MySQL z 1 węzłem głównym i 2 podrzędnymi oraz 1 węzłem HAProxy przed nimi:
Uproszczonym sposobem wykonania ręcznej aktualizacji kroczącej w tym środowisku może być:
- Wyłącz jeden węzeł podrzędny z HAProxy
- Upewnij się, że nie masz ruchu w tym węźle podrzędnym
- Uaktualnij węzeł podrzędny ręcznie
- Sprawdź stan replikacji, aby upewnić się, że jest aktualny
- Wyłącz węzeł główny w swoim HAProxy
- Upewnij się, że nie masz ruchu w węźle głównym
- Promuj zaktualizowany węzeł podrzędny
- Włącz to w swoim HAProxy
- Potwierdź, że nowy master odbiera ruch
- Zmień konfigurację drugiego urządzenia podrzędnego, aby replikować z nowego urządzenia głównego
- Wyłącz drugiego niewolnika z HAProxy
- Upewnij się, że nie masz ruchu w tym węźle podrzędnym
- Uaktualnij węzeł podrzędny ręcznie
- Sprawdź stan replikacji, aby upewnić się, że jest aktualny
- Włącz to w swoim HAProxy
- Potwierdź, że węzeł podrzędny odbiera ruch (w razie potrzeby)
- Zmień konfigurację starego wzorca, aby replikować z nowego wzorca
- Uaktualnij ręcznie stary węzeł główny
- Sprawdź stan replikacji, aby upewnić się, że jest aktualny
- Włącz to w swoim HAProxy
- Potwierdź, że stary master (teraz slave) odbiera ruch (w razie potrzeby)
Jak widać, nawet w uproszczony sposób, to zadanie wymaga wielu kroków i oznacza więcej możliwości, że coś pójdzie nie tak.
Stałe aktualizacje ClusterControl dla MySQL
Najlepszym sposobem zmniejszenia możliwości niepowodzenia jest automatyzacja wszystkich (lub prawie wszystkich) tych kroków. Korzystając z ClusterControl, możesz wykonać niewielką kroczącą aktualizację swojego klastra MySQL za pomocą zaledwie kilku kliknięć.
W tym celu przejdź do ClusterControl -> Wybierz Cluster -> Manage -> Upgrades, gdzie zobaczysz opcję Upgrade.
Aktualizacje są dostępne w trybie online i są wykonywane na jednym węźle naraz. Węzeł zostanie zatrzymany, oprogramowanie zostanie zaktualizowane, a następnie węzeł zostanie ponownie uruchomiony. Jeśli węzeł nie zostanie zaktualizowany, proces zostanie przerwany.
Jeśli wybierzesz opcję Aktualizuj, zobaczysz potwierdzenie wersji, która zostanie uaktualniona:
Aby potwierdzić to zadanie, wystarczy nacisnąć przycisk Uaktualnij. Następnie możesz monitorować proces aktualizacji w sekcji ClusterControl Activity:
W tym samym czasie ClusterControl ponownie skonfiguruje systemy równoważenia obciążenia, aby wysyłać ruch do dostępnych węzłów.
ClusterControl obsługuje tylko drobne uaktualnienia, ponieważ, jak wspomnieliśmy wcześniej, poważna aktualizacja jest ryzykownym zadaniem, które wymaga testów i badań, aby upewnić się, że Twoja aplikacja będzie działać poprawnie w nowej głównej wersji.
Wnioski
Aktualizacja jest ważnym zadaniem we wszystkich firmach i może być ryzykowna, jeśli nie podejmiesz pewnych środków ostrożności i nie wykonasz poprawnie wszystkich kroków aktualizacji.
W tym blogu wspomnieliśmy o pewnych kwestiach, które należy wziąć pod uwagę przed aktualizacją bazy danych, i pokazaliśmy różnicę między wykonaniem tego zadania ręcznie a użyciem ClusterControl, co pomaga zminimalizować możliwość niepowodzenia.