Migrowanie usługi Amazon RDS for MySQL do usługi Azure Database for MySQL przy użyciu replikacji typu data-in

DOTYCZY: Azure Database for MySQL — pojedynczy serwer usługi Azure Database for MySQL — serwer elastyczny

Ważne

Pojedynczy serwer usługi Azure Database for MySQL znajduje się na ścieżce wycofania. Zdecydowanie zalecamy uaktualnienie do serwera elastycznego usługi Azure Database for MySQL. Aby uzyskać więcej informacji na temat migracji do serwera elastycznego usługi Azure Database for MySQL, zobacz Co się dzieje z usługą Azure Database for MySQL — pojedynczy serwer?

Uwaga

Ten artykuł zawiera odwołania do terminu slave (element podrzędny), który nie jest już używany przez firmę Microsoft. Po usunięciu terminu z oprogramowania usuniemy go z tego artykułu.

Do migracji baz danych MySQL do serwera elastycznego usługi Azure Database for MySQL można użyć metod takich jak zrzut i przywracanie, eksportowanie i importowanie aplikacji MySQL, eksportowanie i importowanie aplikacji MySQL lub usługa Azure Database Migration Service. Obciążenia można migrować z minimalnym przestojem przy użyciu kombinacji narzędzi typu open source, takich jak mysqldump lub mydumper i myloader z replikacją typu data-in.

Replikacja typu data-in to technika, która replikuje zmiany danych z serwera źródłowego na serwer docelowy na podstawie metody pozycjonowania pliku dziennika binarnego. W tym scenariuszu wystąpienie programu MySQL działające jako źródło (z którego pochodzą zmiany bazy danych) zapisuje aktualizacje i zmienia się jako zdarzenia w dzienniku binarnym. Informacje w dzienniku binarnym są przechowywane w różnych formatach rejestrowania zgodnie ze zmianami w bazie danych rejestrowanymi. Repliki są skonfigurowane do odczytywania dziennika binarnego ze źródła i wykonywania zdarzeń w dzienniku binarnym w lokalnej bazie danych repliki.

Skonfiguruj replikację typu data-in, aby synchronizować dane ze źródłowego serwera MySQL z docelowym serwerem MySQL. Możesz przeprowadzić selektywne wycinanie aplikacji z podstawowej (lub źródłowej bazy danych) do repliki (lub docelowej bazy danych).

W tym samouczku dowiesz się, jak skonfigurować replikację danych między serwerem źródłowym z usługą Amazon Relational Database Service (RDS) dla programu MySQL i serwerem docelowym z elastycznym serwerem usługi Azure Database for MySQL.

Zagadnienia dotyczące wydajności

Przed rozpoczęciem tego samouczka należy wziąć pod uwagę wpływ na wydajność lokalizacji i pojemność komputera klienckiego, którego użyjesz do wykonania operacji.

Lokalizacja klienta

Wykonaj operacje zrzutu lub przywracania z komputera klienckiego uruchomionego w tej samej lokalizacji co serwer bazy danych:

  • W przypadku wystąpień serwera elastycznego usługi Azure Database for MySQL maszyna kliencka powinna znajdować się w tej samej sieci wirtualnej i strefie dostępności co docelowy serwer bazy danych.
  • W przypadku źródłowych wystąpień bazy danych usługi Amazon RDS wystąpienie klienta powinno istnieć w tej samej prywatnej chmurze Amazon Virtual Private Cloud i strefie dostępności co źródłowy serwer bazy danych. W poprzednim przypadku można przenosić pliki zrzutu między maszynami klienckimi przy użyciu protokołów transferu plików, takich jak FTP lub SFTP, lub przekazać je do usługi Azure Blob Storage. Aby skrócić całkowity czas migracji, kompresuj pliki przed ich przeniesieniem.

Pojemność klienta

Niezależnie od tego, gdzie znajduje się komputer kliencki, wymagane jest odpowiednie przetwarzanie, operacje we/wy i pojemność sieci do wykonywania żądanych operacji. Ogólne zalecenia są następujące:

  • Jeśli zrzut lub przywracanie obejmuje przetwarzanie danych w czasie rzeczywistym, na przykład kompresję lub dekompresję, wybierz klasę wystąpienia z co najmniej jednym rdzeniem procesora CPU na wątek zrzutu lub przywracania.
  • Upewnij się, że dla wystąpienia klienta jest dostępna wystarczająca przepustowość sieci. Użyj typów wystąpień, które obsługują przyspieszoną funkcję sieci. Aby uzyskać więcej informacji, zobacz sekcję "Przyspieszona sieć" w przewodniku dotyczącym sieci maszyn wirtualnych platformy Azure.
  • Upewnij się, że warstwa magazynu maszyny klienckiej zapewnia oczekiwaną pojemność odczytu/zapisu. Zalecamy używanie maszyny wirtualnej platformy Azure z magazynem SSD w warstwie Premium.

Wymagania wstępne

Do ukończenia tego samouczka niezbędne są następujące elementy:

  • Zainstaluj klienta mysqlclient na komputerze klienckim, aby utworzyć zrzut i wykonać operację przywracania na docelowym wystąpieniu serwera elastycznego usługi Azure Database for MySQL.

  • W przypadku większych baz danych zainstaluj moduł mydumper i myloader na potrzeby równoległego dumpingu i przywracania baz danych.

    Uwaga

    Mydumper może działać tylko w dystrybucjach systemu Linux. Aby uzyskać więcej informacji, zobacz How to install mydumper (Jak zainstalować aplikację mydumper).

  • Utwórz wystąpienie elastycznego serwera usługi Azure Database for MySQL z systemem w wersji 5.7 lub 8.0.

    Ważne

    Jeśli twoim celem jest elastyczny serwer usługi Azure Database for MySQL z strefowo nadmiarową wysoką dostępnością, należy pamiętać, że replikacja typu data-in nie jest obsługiwana w przypadku tej konfiguracji. Aby obejść ten problem, podczas tworzenia serwera skonfigurować strefowo nadmiarową wysoką dostępność:

    1. Utwórz serwer z włączoną strefowo nadmiarową wysoką dostępnością.
    2. Wyłącz wysoką dostępność.
    3. Postępuj zgodnie z artykułem, aby skonfigurować replikację typu data-in.
    4. Po przejściu jednorazowym usuń konfigurację replikacji typu data-in.
    5. Włącz wysoką dostępność.

Upewnij się, że skonfigurowano i skonfigurowano kilka parametrów i funkcji zgodnie z opisem:

  • Ze względów zgodności mają źródłowe i docelowe serwery baz danych w tej samej wersji programu MySQL.
  • W każdej tabeli ma klucz podstawowy. Brak kluczy podstawowych w tabelach może spowolnić proces replikacji.
  • Upewnij się, że zestaw znaków źródłowej i docelowej bazy danych są takie same.
  • wait_timeout Ustaw parametr na rozsądny czas. Czas zależy od ilości danych lub obciążenia, które chcesz zaimportować lub zmigrować.
  • Sprawdź, czy wszystkie tabele używają bazy danych InnoDB. Serwer elastyczny usługi Azure Database for MySQL obsługuje tylko aparat magazynu InnoDB.
  • W przypadku tabel z wieloma indeksami pomocniczymi lub dużymi tabelami efekty związane z wydajnością są widoczne podczas przywracania. Zmodyfikuj pliki zrzutu, aby CREATE TABLE instrukcje nie zawierały definicji klucza pomocniczego. Po zaimportowaniu danych ponownie utwórz indeksy pomocnicze, aby uniknąć kary za wydajność podczas procesu przywracania.

Na koniec, aby przygotować się do replikacji typu data-in:

  • Sprawdź, czy docelowe wystąpienie serwera elastycznego usługi Azure Database for MySQL może nawiązać połączenie ze źródłowym serwerem Usługi Amazon RDS for MySQL za pośrednictwem portu 3306.
  • Upewnij się, że źródłowy serwer Amazon RDS for MySQL zezwala zarówno na ruch przychodzący, jak i wychodzący na porcie 3306.
  • Upewnij się, że zapewniasz łączność typu lokacja-lokacja z serwerem źródłowym przy użyciu usługi Azure ExpressRoute lub usługi Azure VPN Gateway. Aby uzyskać więcej informacji na temat tworzenia sieci wirtualnej, zobacz dokumentację usługi Azure Virtual Network. Zapoznaj się również z artykułami szybki start zawierającymi szczegółowe informacje krok po kroku.
  • Skonfiguruj sieciowe grupy zabezpieczeń serwera źródłowego, aby zezwolić na docelowy adres IP serwera elastycznego usługi Azure Database for MySQL.

Ważne

Jeśli źródłowe wystąpienie usługi Amazon RDS for MySQL ma GTID_mode ustawione na wartość WŁĄCZONE, docelowe wystąpienie serwera elastycznego usługi Azure Database for MySQL musi mieć również GTID_mode ustawione na wartość WŁĄCZONE.

Konfigurowanie docelowego wystąpienia usługi Azure Database for MySQL

Aby skonfigurować docelowe wystąpienie serwera elastycznego usługi Azure Database for MySQL, które jest obiektem docelowym replikacji typu data-in:

  1. Ustaw wartość parametru max_allowed_packetna maksymalną wartość 1073741824, czyli 1 GB. Ta wartość uniemożliwia wszelkie problemy z przepełnieniem związane z długimi wierszami.

  2. slow_query_logUstaw parametry , , audit_log_enabledgeneral_logi query_store_capture_mode na wartość OFF podczas migracji, aby wyeliminować wszelkie obciążenia związane z rejestrowaniem zapytań.

  3. Skaluj w górę rozmiar obliczeniowy docelowego wystąpienia serwera elastycznego usługi Azure Database for MySQL do maksymalnie 64 rdzeni wirtualnych. Ten rozmiar zapewnia więcej zasobów obliczeniowych podczas przywracania zrzutu bazy danych serwera źródłowego.

    Zawsze można skalować z powrotem zasoby obliczeniowe, aby spełnić wymagania aplikacji po zakończeniu migracji.

  4. Skaluj w górę rozmiar magazynu, aby uzyskać więcej operacji we/wy na sekundę podczas migracji lub zwiększyć maksymalną liczbę operacji we/wy na sekundę dla migracji.

    Uwaga

    Dostępne maksymalne liczby operacji we/wy na sekundę są określane przez rozmiar obliczeniowy. Aby uzyskać więcej informacji, zobacz sekcję Liczba operacji we/wy na sekundę w opcjach obliczeń i magazynu na serwerze elastycznym usługi Azure Database for MySQL.

Konfigurowanie źródłowego serwera Amazon RDS for MySQL

Aby przygotować i skonfigurować serwer MySQL hostowany w usłudze Amazon RDS, który jest źródłem replikacji typu data-in:

  1. Upewnij się, że rejestrowanie binarne jest włączone na źródłowym serwerze Amazon RDS for MySQL. Sprawdź, czy automatyczne kopie zapasowe są włączone lub upewnij się, że istnieje replika do odczytu dla źródłowego serwera Amazon RDS for MySQL.

  2. Upewnij się, że pliki dziennika binarnego na serwerze źródłowym są zachowywane do momentu zastosowania zmian w docelowym wystąpieniu serwera elastycznego usługi Azure Database for MySQL.

    W przypadku replikacji typu data-in serwer elastyczny usługi Azure Database for MySQL nie zarządza procesem replikacji.

  3. Aby sprawdzić przechowywanie dziennika binarnego na źródłowym serwerze usługi Amazon RDS w celu określenia liczby godzin przechowywania dzienników binarnych, wywołaj procedurę mysql.rds_show_configuration składowaną:

    mysql> call mysql.rds_show_configuration;
    +------------------------+-------+-----------------------------------------------------------------------------------------------------------+
    | name | value | description |
    +------------------------+-------+-----------------------------------------------------------------------------------------------------------+
    | binlog retention hours | 24 | binlog retention hours specifies the duration in hours before binary logs are automatically deleted. |
    | source delay | 0 | source delay specifies replication delay in seconds between current instance and its master. |
    | target delay | 0 | target delay specifies replication delay in seconds between current instance and its future read-replica. |
    +------------------------+-------            +-----------------------------------------------------------------------------------------------------------+
    3 rows in set (0.00 sec)
    
  4. Aby skonfigurować okres przechowywania dziennika binarnego, uruchom procedurę rds_set_configuration składowaną, aby upewnić się, że dzienniki binarne są przechowywane na serwerze źródłowym przez żądany czas. Na przykład:

    Mysql> Call mysql.rds_set_configuration(‘binlog retention hours', 96);
    

    Jeśli tworzysz zrzut i przywracanie, poprzednie polecenie pomaga szybko nadrobić zaległości w zmianach różnicowych.

    Uwaga

    Upewnij się, że na serwerze źródłowym są przechowywane dzienniki binarne o przestrzeń dyskową na podstawie zdefiniowanego okresu przechowywania.

Istnieją dwa sposoby przechwytywania zrzutu danych ze źródłowego serwera Amazon RDS for MySQL. Jedno podejście polega na przechwyceniu zrzutu danych bezpośrednio z serwera źródłowego. Inne podejście polega na przechwyceniu zrzutu z repliki do odczytu usługi Amazon RDS for MySQL.

  • Aby przechwycić zrzut danych bezpośrednio z serwera źródłowego:

    1. Upewnij się, że zapisy z aplikacji są zatrzymywane przez kilka minut, aby uzyskać transakcyjnie spójny zrzut danych.

      Można również tymczasowo ustawić read_only parametr na wartość 1 , aby zapisy nie zostały przetworzone podczas przechwytywania zrzutu danych.

    2. Po zatrzymaniu zapisów na serwerze źródłowym zbierz nazwę pliku dziennika binarnego i przesunięcie, uruchamiając polecenie Mysql> Show master status;.

    3. Zapisz te wartości, aby rozpocząć replikację z wystąpienia serwera elastycznego usługi Azure Database for MySQL.

    4. Aby utworzyć zrzut danych, wykonaj polecenie mysqldump , uruchamiając następujące polecenie:

      $ mysqldump -h hostname -u username -p –single-transaction –databases dbnames –order-by-primary> dumpname.sql
      
  • Jeśli zatrzymanie zapisów na serwerze źródłowym nie jest opcją lub wydajność dumpingu danych nie jest akceptowalna na serwerze źródłowym, przechwyć zrzut na serwerze repliki:

    1. Utwórz replikę do odczytu Amazon MySQL z taką samą konfiguracją jak serwer źródłowy. Następnie utwórz tam zrzut.

    2. Pozwól repliki do odczytu Amazon RDS for MySQL nadrobić zaległości w źródłowym serwerze Amazon RDS for MySQL.

    3. Gdy opóźnienie repliki osiągnie wartość 0 w repliki do odczytu, zatrzymaj replikację, wywołując procedurę mysql.rds_stop_replicationskładowaną .

      Mysql> call mysql.rds_stop_replication;
      
    4. Po zatrzymaniu replikacji połącz się z repliką. Następnie uruchom polecenie , SHOW SLAVE STATUS aby pobrać bieżącą nazwę pliku dziennika binarnego z pola Relay_Master_Log_File i pozycję pliku dziennika z pola Exec_Master_Log_Pos .

    5. Zapisz te wartości, aby rozpocząć replikację z wystąpienia serwera elastycznego usługi Azure Database for MySQL.

    6. Aby utworzyć zrzut danych z repliki do odczytu usługi Amazon RDS for MySQL, wykonaj mysqldump polecenie, uruchamiając następujące polecenie:

      $ mysqldump -h hostname -u username -p –single-transaction –databases dbnames –order-by-primary> dumpname.sql
      

    Uwaga

    Możesz również użyć narzędzia mydumper do przechwytywania równoległego zrzutu danych ze źródłowej bazy danych Amazon RDS for MySQL. Aby uzyskać więcej informacji, zobacz Migrowanie dużych baz danych do serwera elastycznego usługi Azure Database for MySQL przy użyciu narzędzia mydumper/myloader.

  1. Aby przywrócić bazę danych przy użyciu przywracania natywnego mysql, uruchom następujące polecenie:

    $ mysql -h <target_server> -u <targetuser> -p < dumpname.sql
    
  2. Zaloguj się do źródłowego serwera Usługi Amazon RDS for MySQL i skonfiguruj użytkownika replikacji. Następnie przyznaj użytkownikowi niezbędne uprawnienia.

    • Jeśli używasz protokołu SSL, uruchom następujące polecenia:

      Mysql> CREATE USER 'syncuser'@'%' IDENTIFIED BY 'userpassword';
      Mysql> GRANT REPLICATION SLAVE, REPLICATION CLIENT on *.* to 'syncuser'@'%' REQUIRE SSL;
      Mysql> SHOW GRANTS FOR syncuser@'%';
      
    • Jeśli nie używasz protokołu SSL, uruchom następujące polecenia:

      Mysql> CREATE USER 'syncuser'@'%' IDENTIFIED BY 'userpassword';
      Mysql> GRANT REPLICATION SLAVE, REPLICATION CLIENT on *.* to 'syncuser'@'%';
      Mysql> SHOW GRANTS FOR syncuser@'%';
      

    Procedury składowane wykonują wszystkie funkcje replikacji typu data-in. Aby uzyskać informacje o wszystkich procedurach, zobacz Procedury składowane replikacji danych. Te procedury składowane można uruchomić w powłoce MySQL lub w aplikacji MySQL Workbench.

  3. Aby połączyć serwer źródłowy usługi Amazon RDS for MySQL i serwer docelowy serwera elastycznego usługi Azure Database for MySQL, zaloguj się do docelowego wystąpienia serwera elastycznego usługi Azure Database for MySQL. Ustaw serwer Amazon RDS for MySQL jako serwer źródłowy, uruchamiając następujące polecenie:

    CALL mysql.az_replication_change_master('source_server','replication_user_name','replication_user_password',3306,'<master_bin_log_file>',master_bin_log_position,'<master_ssl_ca>');
    
  4. Aby rozpocząć replikację między źródłowym serwerem Usługi Amazon RDS for MySQL i docelowym wystąpieniem serwera elastycznego usługi Azure Database for MySQL, uruchom następujące polecenie:

    Mysql> CALL mysql.az_replication_start;
    
  5. Aby sprawdzić stan replikacji na serwerze repliki, uruchom następujące polecenie:

    Mysql> show slave status\G
    

    Jeśli stan parametrów Slave_IO_Running i Slave_SQL_Running ma wartość Tak, replikacja została uruchomiona i jest w stanie uruchomienia.

  6. Sprawdź wartość parametru, Seconds_Behind_Master aby określić, jak opóźniony jest serwer docelowy.

    Jeśli wartość to 0, element docelowy przetworzył wszystkie aktualizacje z serwera źródłowego. Jeśli wartość jest inna niż 0, serwer docelowy nadal przetwarza aktualizacje.

Zapewnianie pomyślnego przejścia jednorazowego

Aby zapewnić pomyślną migrację jednorazową:

  1. Skonfiguruj odpowiednie uprawnienia logowania i na poziomie bazy danych w docelowym wystąpieniu serwera elastycznego usługi Azure Database for MySQL.
  2. Zatrzymaj zapisy na źródłowym serwerze Usługi Amazon RDS for MySQL.
  3. Upewnij się, że docelowe wystąpienie serwera elastycznego usługi Azure Database for MySQL dogoniło serwer źródłowy i że Seconds_Behind_Master wartość to 0 z show slave status.
  4. Wywołaj procedurę mysql.az_replication_stop składowaną, aby zatrzymać replikację, ponieważ wszystkie zmiany zostały zreplikowane do docelowego wystąpienia serwera elastycznego usługi Azure Database for MySQL.
  5. Wywołaj metodę mysql.az_replication_remove_master , aby usunąć konfigurację replikacji typu data-in.
  6. Przekieruj klientów i aplikacje klienckie do docelowego wystąpienia serwera elastycznego usługi Azure Database for MySQL.

W tym momencie migracja zostanie ukończona. Twoje aplikacje są połączone z serwerem z serwerem elastycznym usługi Azure Database for MySQL.

Następne kroki

  • Aby uzyskać więcej informacji na temat migrowania baz danych do serwera elastycznego usługi Azure Database for MySQL, zobacz Przewodnik po migracji bazy danych.
  • Obejrzyj wideo Łatwe migrowanie aplikacji MySQL/PostgreSQL do usługi zarządzanej platformy Azure. Zawiera pokaz pokazujący, jak migrować aplikacje MySQL do serwera elastycznego usługi Azure Database for MySQL.