Migrowanie lokalnego programu MySQL do usługi Azure Database for MySQL: plany testów
DOTYCZY: Azure Database for MySQL — pojedynczy serwer usługi Azure Database for MySQL — serwer elastyczny
Wymagania wstępne
Omówienie
WWI utworzył plan testowy zawierający zestaw zadań IT i zadań biznesowych. Pomyślne migracje wymagają wykonania wszystkich testów.
Testy:
Upewnij się, że zmigrowana baza danych ma spójność (te same liczby rekordów i wyniki zapytań) z tabelami lokalnymi.
Upewnij się, że wydajność jest akceptowalna (powinna być zgodna z taką samą wydajnością, jak w przypadku działania lokalnie).
Upewnij się, że wydajność zapytań docelowych spełnia określone wymagania.
Zapewnij akceptowalną łączność sieciową między środowiskiem lokalnym i siecią platformy Azure.
Upewnij się, że wszystkie zidentyfikowane aplikacje i użytkownicy mogą łączyć się z zmigrowanym wystąpieniem danych.
WWI zidentyfikował weekend migracji i przedział czasu, który rozpoczął się o godzinie 10:00 i zakończył się o 2 rano czasu pacyficznego. Jeśli migracja nie została ukończona przed celem 2:00 (docelowy czas przestoju 4-godzinny) ze wszystkimi testami, procedury wycofywania zostały uruchomione. Problemy zostały udokumentowane w przypadku przyszłych prób migracji. Wszystkie okna migracji zostały wypchnięte do przodu i ponownie ułożone na podstawie akceptowalnych harmonogramów biznesowych.
Przykładowe zapytania
Seria zapytań została wykonana na źródle i celu w celu zweryfikowania powodzenia migracji bazy danych. Poniższe zapytania i skrypty pomagają określić, czy akcje migracji przeniosły wszystkie wymagane obiekty bazy danych ze źródła do obiektu docelowego.
Wiersze tabeli
Możesz użyć tego zapytania, aby pobrać wszystkie tabele i szacowaną liczbę wierszy:
SELECT SUM(TABLE_ROWS)
FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_SCHEMA = '{SchemaName}';
Uwaga
Tabela INFORMATION_SCHEMA
zawiera szacowany zestaw wartości w tabelach. Aby uzyskać dokładniejszy widok metryk, takich jak rozmiar tabeli, zwiększ rozmiar próbki strony przy użyciu parametru innodb_stats_transient_sample_pages
serwera. Zwiększenie tej wartości serwera wymusza analizowanie większej liczby stron i dostarczanie bardziej dokładnych wyników.
Wykonaj instrukcję count(*)
SQL dla każdej tabeli, aby uzyskać dokładną liczbę wierszy. Uruchomienie tego polecenia może zająć dużo czasu na dużych tabelach. Poniższy skrypt generuje zestaw instrukcji SQL, które można wykonać, aby uzyskać dokładne liczby:
SELECT CONCAT(
'SELECT "',
table_name,
'" AS table_name, COUNT(*) AS exact_row_count FROM `',
table_schema,
'`.`',
table_name,
'` UNION '
)
FROM INFORMATION_SCHEMA.TABLES
WHERE table_schema = '**my_schema**';
Fragmentacja tabeli
Tabele danych mogą nadal rosnąć coraz częściej dzięki ciągłemu użyciu aplikacji. W niektórych przypadkach dane mogą nie rosnąć, ale stale zmieniają się dzięki usunięciom i aktualizacjom. Jeśli tak, istnieje wiele fragmentacji w plikach bazy danych. Instrukcja MySQL OPTIMIZE TABLE może zmniejszyć potrzeby fizycznego miejsca do magazynowania i zwiększyć wydajność operacji we/wy.
Tabele MySQL można zoptymalizować, uruchamiając następujące polecenie:
optimize table TABLE_NAME
Obiekty bazy danych
Użyj następującego zapytania, aby upewnić się, że wszystkie inne obiekty bazy danych są uwzględniane. Chociaż te zapytania mogą obliczyć liczby wierszy tabeli, mogą nie uwzględniać wersji określonego obiektu bazy danych. Na przykład, mimo że może istnieć procedura składowana, może ona ulec zmianie między rozpoczęciem i końcem migracji. Zaleca się blokowanie tworzenia obiektów bazy danych podczas migracji.
Użytkownicy
SELECT DISTINCT
USER
FROM
mysql.user
WHERE
user <> '' order by user
Indeksy
SELECT DISTINCT
INDEX_NAME
FROM
information_schema.STATISTICS
WHERE
TABLE_SCHEMA = '{SchemaName}'
Ograniczenia
SELECT DISTINCT
CONSTRAINT_NAME
FROM
information_schema.TABLE_CONSTRAINTS
WHERE
CONSTRAINT_SCHEMA = '{SchemaName}'
Widoki
SELECT
TABLE_NAME
FROM
information_schema.VIEWS
WHERE
TABLE_SCHEMA = '{SchemaName}'
Procedury składowane
SELECT
ROUTINE_NAME
FROM
information_schema.ROUTINES
WHERE
ROUTINE_TYPE = 'FUNCTION' and
ROUTINE_SCHEMA = '{SchemaName}'
Funkcje
SELECT
ROUTINE_NAME
FROM
information_schema.ROUTINES
WHERE
ROUTINE_TYPE = 'PROCEDURE' and
ROUTINE_SCHEMA = '{SchemaName}'
Wydarzenia
SELECT
EVENT_NAME
FROM
INFORMATION_SCHEMA.EVENTS
WHERE
EVENT_SCHEMA = '{SchemaName}'
Strategie wycofywania
Powyższe zapytania zawierają listę nazw obiektów i liczby używanych w decyzji wycofywania. Użytkownicy migracji mogą wykonać pierwszy krok weryfikacji obiektu, sprawdzając liczbę obiektów źródłowych i docelowych. Rozbieżność liczby obiektów może nie oznaczać, że konieczne jest wycofanie. Przeprowadzenie dogłębnej oceny może wskazywać, że różnica jest niewielka i możliwa do odzyskania. Rozwiązaniem może być ręczna migracja kilku nieudanych obiektów. Jeśli na przykład wszystkie tabele i wiersze danych zostały zmigrowane, pominięto tylko kilka funkcji, koryguj te obiekty zakończone niepowodzeniem i finalizuj migrację. Jeśli baza danych jest stosunkowo mała, może być możliwe wyczyszczenie wystąpienia usługi Azure Database for MySQL i ponowne uruchomienie migracji. Duże bazy danych mogą potrzebować więcej czasu niż jest dostępne w oknie migracji, aby określić brakujące obiekty. Migracja musi się zatrzymać i wycofać.
Identyfikowanie brakujących obiektów bazy danych musi nastąpić szybko podczas okna migracji. Każda minuta jest liczone. Jedną z opcji może być wyeksportowanie nazw obiektów środowiskowych do pliku i użycie narzędzia do porównywania danych w celu szybkiego identyfikowania brakujących obiektów. Inną opcją może być wyeksportowanie nazw obiektów źródłowej bazy danych i zaimportowanie danych do docelowej tabeli tymczasowej środowiska bazy danych. Porównaj dane przy użyciu skryptowej i przetestowanej instrukcji SQL. Szybkość i dokładność weryfikacji danych mają kluczowe znaczenie dla procesu migracji. Nie należy polegać na ręcznym odczytywaniu i weryfikowaniu długiej listy obiektów bazy danych podczas okna migracji. Możliwość błędu ludzkiego jest zbyt duża. Najlepiej byłoby zarządzać wyjątkiem przy użyciu narzędzi.
Scenariusz ii wojny światowej
Dyrektor ds. systemów informatycznych WWI otrzymał raport potwierdzający, że wszystkie obiekty bazy danych zostały zmigrowane z lokalnej bazy danych do wystąpienia usługi Azure Database for MySQL. Zespół bazy danych uruchomił powyższe zapytania względem bazy danych przed rozpoczęciem migracji i zapisał wszystkie wyniki w arkuszu kalkulacyjnym.
Informacje o schemacie źródłowej bazy danych zostały użyte do zweryfikowania wierności docelowego obiektu migracji.
Lista kontrolna planów testów
Wykonywanie skryptów, testowania i gotowości do wykonania zapytań testowych.
Dowiedz się, jak długo trwa uruchamianie zapytań testowych i uczynić je częścią udokumentowanej osi czasu migracji.
Przygotuj strategię ograniczania ryzyka i wycofywania dla różnych potencjalnych wyników.
Mają dobrze zdefiniowaną oś czasu zdarzeń migracji.