Znane problemy z migracjami do usługi Azure Database for MySQL
Znane problemy związane z migracjami do usługi Azure Database for MySQL zostały opisane w poniższych sekcjach.
Błąd: Migracja do serwera elastycznego MySQL z aparatem w wersji 8.0.30 lub nowszej może zakończyć się niepowodzeniem, gdy funkcja generuje niewidoczne klucze podstawowe dla tabel InnoDB jest włączona (zobacz MySQL :: MySQL 8.0 Reference Manual :: 13.1.1.20.11 Generated Invisible Primary Keys). Błąd może wystąpić podczas migrowania schematu tabeli ze źródła do miejsca docelowego, podczas stosowania zmian w fazie replikacji migracji online, po ponowieniu próby migracji lub podczas migracji do miejsca docelowego, w którym schemat został zmigrowany ręcznie.
Potencjalny komunikat o błędzie:
- "Nieznany błąd".
- "Nie można wygenerować niewidocznego klucza podstawowego. Kolumna automatycznego zwiększania już istnieje”.
- "Kolumna "my_row_id" w tabeli docelowej "nazwa tabeli" w bazie danych "database" nie istnieje w tabeli źródłowej.
Ograniczenie: Migracja do wystąpienia serwera elastycznego MySQL, w którym włączono sql_generate_invisible_primary_key, nie jest obsługiwana przez usługę DMS.
Obejście: ustaw parametr serwera sql_generate_invisible_primary_key dla docelowego serwera elastycznego MySQL na WYŁ. Parametr serwera można znaleźć w okienku Parametry serwera na karcie Wszystkie dla docelowego serwera elastycznego MySQL. Ponadto usuń docelową bazę danych i rozpocznij migrację usługi DMS od nowa, aby nie mieć żadnych niezgodnych schematów.
Co najmniej jeden niezgodny tryb SQL może powodować wiele różnych błędów. Poniżej przedstawiono przykładowy błąd wraz z trybami serwera, które powinny być sprawdzane w przypadku wystąpienia tego błędu.
Błąd: Wystąpił błąd podczas przygotowywania tabeli "{table}" w bazie danych "{database}" na serwerze "{server}" do migracji podczas działania "{activity}". W związku z tym ta tabela nie zostanie zmigrowana.
Ograniczenie: ten błąd występuje, gdy jeden z następujących trybów SQL jest ustawiony na jednym serwerze, ale nie na drugim serwerze.
Obejście:
NO_ZERO_DATE
Gdy wartość domyślna daty w tabeli lub danych to 0000-00-00 w źródle, a serwer docelowy ma ustawiony tryb NO_ZERO_DATE SQL, schemat i/lub migracja danych kończy się niepowodzeniem. Istnieją dwa możliwe obejścia. Pierwszą z nich jest zmiana wartości domyślnych kolumn na null lub prawidłową datę. Drugą opcją jest usunięcie trybu NO_ZERO_DATE SQL z globalnej zmiennej trybu SQL.
NO_AUTO_CREATE_USER
Podczas uruchamiania migracji z serwera źródłowego MySQL 5.7 do serwera docelowego MySQL 8.0, który przeprowadza migrację schematu procedur, występuje błąd, jeśli no_auto_create_user tryb SQL jest ustawiony na serwerze źródłowym MySQL 5.7.
Błąd: Błąd krytyczny podczas odczytywania dziennika binlog. Ten błąd może wskazywać, że nazwa pliku binlog i/lub pozycja początkowa zostały niepoprawnie określone.
Ograniczenie: ten błąd występuje, jeśli okres przechowywania dziennika binlog jest zbyt krótki.
Obejście: Istnieje wiele zmiennych, które można skonfigurować w tym przypadku: binlog_expire_logs_seconds określa okres przechowywania i usuwanie dziennika binlogu można całkowicie zapobiec przez ustawienie binlog_expire_logs_auto_purge wyłączone. Program MySQL 5.7 ma przestarzałą zmienną systemową expire_logs_days.
Błąd: Wystąpił wyjątek podczas próby uzyskania blokady odczytu na serwerze "{server}" w celu zapewnienia spójnego tworzenia widoku.
Ograniczenie: ten błąd występuje, gdy występuje przekroczenie limitu czasu podczas uzyskiwania blokad dla wszystkich tabel, gdy jest włączona spójność transakcyjna.
Obejście: Upewnij się, że wybrane tabele nie są zablokowane lub że na nich nie są uruchomione żadne długotrwałe transakcje.
Błąd: Treść żądania jest zbyt duża i przekracza maksymalny dopuszczalny limit.
Ograniczenie: ten błąd prawdopodobnie występuje, gdy istnieje zbyt wiele tabel do migracji (>10 tys.). Istnieje limit 4 MB dla każdego wywołania usługi Azure Storage.
Obejście: Skontaktuj się z pomocą techniczną, tworząc wniosek o pomoc techniczną i możemy udostępnić niestandardowe skrypty umożliwiające bezpośredni dostęp do naszych interfejsów API REST.
Błąd: Błąd jest często objawem przekroczenia limitu czasu, problemów z siecią lub skalowania docelowego.
Potencjalny komunikat o błędzie: Nie można zapisać partii w tabeli "{table}" z powodu błędu SQL zgłoszonego przez serwer docelowy. W przypadku kontekstu partia zawierała podzbiór wierszy zwracanych przez następujące zapytanie źródłowe.
Ograniczenie: ten błąd może być spowodowany przekroczeniem limitu czasu lub przerwanym połączeniem z obiektem docelowym, co powoduje zduplikowanie kluczy podstawowych. Może to być również związane z wieloma migracjami do docelowego uruchomionego w tym samym czasie lub użytkownik, który testuje obciążenia uruchomione w miejscu docelowym, gdy migracja jest uruchomiona. Ponadto obiekt docelowy może wymagać, aby klucze podstawowe były unikatowe, mimo że nie muszą być tak w źródle.
Obejście: Aby rozwiązać ten problem, upewnij się, że nie są uruchomione żadne zduplikowane migracje i że źródłowe klucze podstawowe są unikatowe. Jeśli błąd będzie się powtarzać, skontaktuj się z pomocą techniczną, tworząc wniosek o pomoc techniczną i możemy udostępnić niestandardowe skrypty umożliwiające bezpośredni dostęp do naszych interfejsów API REST.
Błąd: Migracja online nie może replikować oczekiwanej liczby zmian.
Potencjalny komunikat o błędzie: Wystąpił błąd podczas stosowania rekordów na serwerze docelowym, który został odczytany z dziennika binarnego serwera źródłowego. Zmiany zaczęły się w dzienniku binarnym „{mysql-bin.log}” i pozycji „{position}”, i zakończyły się w dzienniku binarnym „{mysql-bin.log}” i pozycji „{position}”. Wszystkie rekordy na serwerze źródłowym przed pozycją „{position}” w dzienniku binarnym „{mysql-bin.log}” zostały przekazane do obiektu docelowego.
Ograniczenie: W źródle istniały instrukcje wstawiania i usuwania do tabeli, a usunięcia były według widocznego unikatowego indeksu.
Obejście: Zalecamy ręczne migrowanie tabeli.
Błąd: Kolumna wyliczenia ma wartość null w co najmniej jednym wierszu, a docelowy tryb SQL jest ustawiony na ścisłe.
Potencjalny komunikat o błędzie: Nie można zapisać partii w tabeli "{table}" z powodu błędu obcinania danych. Upewnij się, że dane nie są zbyt duże dla typu danych w kolumnie tabeli MySQL. Jeśli typ kolumny jest wyliczeniowym, upewnij się, że tryb SQL nie jest ustawiony jako TRADYCYJNY, STRICT_TRANS_TABLES lub STRICT_ALL_TABLES i jest taki sam w źródle i obiekcie docelowym.
Ograniczenie: Błąd występuje, gdy dane historyczne zostały zapisane na serwerze źródłowym, gdy miały określone ustawienie, ale gdy zostaną zmienione, dane nie mogą się przenosić.
Obejście problemu: Aby rozwiązać ten problem, zalecamy zmianę docelowego trybu SQL na nieokreślony lub zmianę wszystkich wartości null na prawidłowe wartości.
Błąd: Wystąpił błąd po niepodaniu sprawdzania poprawności widoku.
Ograniczenie: Błąd występuje podczas próby zmigrowania widoku i tabeli, której nie można odwoływać się do widoku.
Obejście: Zalecamy ręczne migrowanie widoków.
Błąd: Nie można odnaleźć błędu podczas odwoływania się do tabeli.
Potencjalny komunikat o błędzie: Potok nie może utworzyć schematu obiektu "{object}" dla działania "{activity}" przy użyciu strategii MySqlSchemaMigrationViewUsingTableStrategy z powodu wykonania zapytania.
Ograniczenie: Błąd może wystąpić, gdy widok odwołuje się do tabeli, która została usunięta lub zmieniona, albo gdy widok został utworzony z niepoprawnymi lub niekompletnymi informacjami. Ten błąd może wystąpić, jeśli zmigrowany jest podzbiór tabel, ale tabele, od których zależą, nie są.
Obejście: Zalecamy ręczne migrowanie widoków. Sprawdź, czy do migracji wybrano wszystkie tabele przywołane w kluczach obcych i instrukcjach CREATE VIEW.
Błąd: Wszystkie połączenia na serwerze źródłowym zostały przerwane.
Ograniczenie: Błąd występuje, gdy wszystkie połączenia nabyte na początku początkowego ładowania zostaną utracone z powodu ponownego uruchomienia serwera, problemów z siecią, dużego ruchu na serwerze źródłowym lub innych przejściowych problemów. Tego błędu nie można naprawić. Ponadto ten błąd występuje w przypadku próby przeprowadzenia migracji serwera w oknie obsługi.
Obejście: Należy ponownie uruchomić migrację i zalecamy zwiększenie wydajności serwera źródłowego. Innym problemem są skrypty, które zabijają długotrwałe połączenia, uniemożliwiają działanie tych skryptów.
Ograniczenie: Błąd występuje, gdy klient wykonuje DDL podczas początkowego ładowania wystąpienia migracji.
Obejście: Aby rozwiązać ten problem, zalecamy powstrzymanie się od wprowadzania zmian DDL podczas ładowania początkowego.
Błąd: Błąd występuje, gdy istnieje zmiana przywoływnego typu klucza obcego z tabeli.
Potencjalny komunikat o błędzie: odwołanie do kolumny "{pk column 1}" i kolumny o odwołaniu "{fk column 1}" w ograniczeniu klucza obcego "{key}" są niezgodne.
Ograniczenie: Błąd może spowodować niepowodzenie migracji schematu tabeli, ponieważ kolumna PK w tabeli 1 może nie być zgodna z kolumną FK w tabeli 2.
Obejście: Aby rozwiązać ten problem, zalecamy usunięcie klucza obcego i ponowne utworzenie go po zakończeniu procesu migracji.