Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Jak przeprowadzać uaktualnienia kroczące dla MySQL

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.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Łańcuch zamówienia SQL jako liczba

  2. Porównanie MySQL z wartością null

  3. Jak działa funkcja OCTET_LENGTH() w MySQL

  4. Android JDBC nie działa:ClassNotFoundException na sterowniku

  5. SQL — Aktualizuj wiele rekordów w jednym zapytaniu