Migrowanie usługi Amazon RDS for MySQL do usługi Azure Database for MySQL przy użyciu replikacji typu data-in
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.
Możesz użyć metod, takich jak zrzut i przywracanie bazy danych MySQL, eksportowanie i importowanie aplikacji MySQL Workbench lub usługa Azure Database Migration Service, aby przeprowadzić migrację baz danych MySQL do usługi Azure Database for MySQL — serwer elastyczny. 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.
Konfigurowanie replikacji danych do usługi Azure Database for MySQL — serwer elastyczny w celu synchronizowania danych ze źródłowego serwera MySQL do docelowego serwera 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 usługą Azure Database for MySQL — serwer elastyczny.
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 program 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 usługi Azure Database for MySQL — serwer elastyczny z systemem w wersji 5.7 lub 8.0.
Ważne
Jeśli twoim celem jest usługa Azure Database for MySQL — elastyczny serwer z strefowo nadmiarową wysoką dostępnością, pamiętaj, ż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ść:
- Utwórz serwer z włączoną strefowo nadmiarową wysoką dostępnością.
- Wyłącz wysoką dostępność.
- Postępuj zgodnie z artykułem, aby skonfigurować replikację typu data-in.
- Po przejściu jednorazowym usuń konfigurację replikacji typu data-in.
- 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. Usługa Azure Database for MySQL — elastyczny serwer 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 usługi Azure Database for MySQL — serwer elastyczny, który jest obiektem docelowym replikacji typu data-in:
Ustaw wartość parametru
max_allowed_packet
na maksymalną wartość 1073741824, czyli 1 GB. Ta wartość uniemożliwia wszelkie problemy z przepełnieniem związane z długimi wierszami.slow_query_log
Ustaw parametry , ,audit_log_enabled
general_log
iquery_store_capture_mode
na wartość OFF podczas migracji, aby wyeliminować wszelkie obciążenia związane z rejestrowaniem zapytań.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.
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 obliczeniowych 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:
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.
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 usługa Azure Database for MySQL — elastyczny serwer nie zarządza procesem replikacji.
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ą: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) |
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: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:
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.Po zatrzymaniu zapisów na serwerze źródłowym zbierz nazwę pliku dziennika binarnego i przesunięcie, uruchamiając polecenie
Mysql> Show master status;
.Zapisz te wartości, aby rozpocząć replikację z wystąpienia serwera elastycznego usługi Azure Database for MySQL.
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:
Utwórz replikę do odczytu Amazon MySQL z taką samą konfiguracją jak serwer źródłowy. Następnie utwórz tam zrzut.
Pozwól repliki do odczytu Amazon RDS for MySQL nadrobić zaległości w źródłowym serwerze Amazon RDS for MySQL.
Gdy opóźnienie repliki osiągnie wartość 0 w repliki do odczytu, zatrzymaj replikację, wywołując procedurę
mysql.rds_stop_replication
składowaną .call mysql.rds_stop_replication;
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 .Zapisz te wartości, aby rozpocząć replikację z wystąpienia serwera elastycznego usługi Azure Database for MySQL.
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 usługi Azure Database for MySQL — elastyczny serwer przy użyciu narzędzia mydumper/myloader.
Łączenie serwerów źródłowych i replikowych w celu uruchomienia replikacji typu data-in
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
Uwaga
Jeśli zamiast tego używasz narzędzia myloader, zobacz Migrowanie dużych baz danych do serwera elastycznego usługi Azure Database for MySQL przy użyciu narzędzia mydumper/myloader.
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:
CREATE USER 'syncuser'@'%' IDENTIFIED BY 'userpassword'; GRANT REPLICATION SLAVE, REPLICATION CLIENT on *.* to 'syncuser'@'%' REQUIRE SSL; SHOW GRANTS FOR syncuser@'%';
Jeśli nie używasz protokołu SSL, uruchom następujące polecenia:
CREATE USER 'syncuser'@'%' IDENTIFIED BY 'userpassword'; GRANT REPLICATION SLAVE, REPLICATION CLIENT on *.* to 'syncuser'@'%'; 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.
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>');
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:
CALL mysql.az_replication_start;
Aby sprawdzić stan replikacji na serwerze repliki, uruchom następujące polecenie:
show slave status\G
Jeśli stan parametrów
Slave_IO_Running
iSlave_SQL_Running
ma wartość Tak, replikacja została uruchomiona i jest w stanie uruchomienia.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ą:
- Skonfiguruj odpowiednie identyfikatory logowania i uprawnienia na poziomie bazy danych w docelowym wystąpieniu serwera elastycznego usługi Azure Database for MySQL.
- Zatrzymaj zapisy na źródłowym serwerze Usługi Amazon RDS for MySQL.
- Upewnij się, że docelowe wystąpienie serwera elastycznego usługi Azure Database for MySQL zostało przechwycone z serwerem źródłowym i że
Seconds_Behind_Master
wartość to 0 zshow slave status
. - 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. - Wywołaj metodę
mysql.az_replication_remove_master
, aby usunąć konfigurację replikacji typu data-in. - 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 uruchomionym serwerem elastycznym usługi Azure Database for MySQL.