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.
Problem z migracją schematu dla docelowego serwera elastycznego MySQL w wersji 8.0
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.
Niezgodny tryb SQL
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.
Problemy z przechowywaniem dziennika binlog
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.
Przekroczenie limitu czasu uzyskiwania blokad tabeli
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.
Zapisywanie ponad 4 MB danych w usłudze Azure Storage
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.
Problem ze zduplikowanym wpisem klucza
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 dotyczący niezgodnych wierszy zreplikowanej operacji
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 obcięcia danych 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.
Niepowodzenie tworzenia obiektu
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.
Nie można odnaleźć tabeli
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.
Wszystkie połączenia w puli zostały przerwane
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.
Spójna migawka została przerwana
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.
Ograniczenie klucza obcego
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.