Rozwiązywanie problemów z bazą danych MySQL

Rozwiązania typowych problemów z łącznością, uwierzytelnianiem i typem danych mySQL w narzędziu Data API Builder.

Często zadawane pytania

Co to jest obsługa MySQL w DAB?

Data API builder obsługuje MySQL jako backend relacyjnej bazy danych. DAB łączy się przy użyciu sterownika MySqlConnector i tłumaczy żądania REST i GraphQL na zapytania SQL. Obsługiwane są zarówno instancje własne MySQL, jak i usługi zarządzane, takie jak Azure Database for MySQL.

Jakiego formatu parametrów połączenia używa MySQL?

DAB używa standardowego ciągu połączenia MySQL ADO.NET. Typowy ciąg wygląda następująco: Server=localhost;Port=3306;Database=mydb;Uid=myuser;Pwd=mypassword;. Ustaw ciąg połączenia w polu data-source.connection-stringdab-config.json lub przekaż go za pośrednictwem --connection-string w dab init.

Jakie wersje programu MySQL są obsługiwane?

DAB obsługuje MySQL 8.0 i nowsze. Program MySQL 5.7 może działać, ale nie jest oficjalnie obsługiwany. Potwierdź wersję serwera za pomocą polecenia SELECT VERSION(); w powłoce MySQL. Jeśli korzystasz z usługi zarządzanej, takiej jak Azure Database for MySQL, użyj warstwy serwer elastyczny, która obsługuje program MySQL 8.0.

Typowe problemy

Nie można nawiązać połączenia z kontenerem MySQL

Objaw: DAB nie uruchamia się z Unable to connect to any of the specified MySQL hosts.

Spowodować: Port kontenera MySQL nie jest mapowany, nazwa hosta jest nieprawidłowa lub kontener nie zakończył inicjowania.

Rozwiązanie: Upewnij się, że kontener jest uruchomiony z docker ps i że port 3306 jest mapowany na hosta. Użyj Server=localhost;Port=3306 w parametrach połączenia. Poczekaj kilka sekund po uruchomieniu kontenera dla programu MySQL, aby zakończyć inicjowanie przed uruchomieniem języka DAB.

Odmowa dostępu dla użytkownika

Objaw: Dzienniki DAB pokazują Access denied for user 'myuser'@'172.x.x.x' lub podobne.

Przyczyna: Konto użytkownika MySQL jest ograniczone do korzystania z określonego hosta. Gdy usługa DAB jest uruchamiana na platformie Docker, połączenia pochodzą z adresu IP sieci kontenera, a nie localhost.

Rozdzielczość: Udziel użytkownikowi dostępu z dowolnego hosta, uruchamiając polecenie GRANT ALL PRIVILEGES ON mydb.* TO 'myuser'@'%' IDENTIFIED BY 'mypassword'; FLUSH PRIVILEGES;. W przypadku środowiska produkcyjnego zastąp % określonym hostem lub podsiecią. Sprawdź, czy hasło jest zgodne, uruchamiając polecenie mysql -u myuser -p z tej samej sieci.

Nieznany błąd bazy danych

Objaw: DAB jest zwracany Unknown database 'mydb' podczas uruchamiania.

Spowodować: Baza danych określona w parametrach połączenia nie została utworzona na serwerze MySQL.

Rozwiązanie: Utwórz bazę danych przed uruchomieniem DAB, uruchamiając polecenie CREATE DATABASE mydb; w powłoce MySQL. W przypadku korzystania z kontenera ustaw zmienną MYSQL_DATABASE środowiskową, aby baza danych MySQL tworzyła bazę danych podczas pierwszego uruchomienia.

Ostrzeżenie o nieobsługiwanym typie kolumny

Objaw: DAB rejestruje ostrzeżenie o nieobsługiwanym typie kolumny i brakującym polu w wygenerowanym schemacie.

Przyczyna: Niektóre typy specyficzne dla MySQL, takie jak SET, ENUM lub typy przestrzenne, mogą nie mieć bezpośredniego mapowania w systemie typów DAB.

Rozwiązanie: Przejrzyj dzienniki DAB, aby zidentyfikować kolumnę i typ. Rozważ zmianę kolumny na obsługiwany typ, taki jak VARCHAR dla pól ENUM, lub wykluczenie kolumny z definicji jednostki przy użyciu konfiguracji mappings, aby nie była obecna w uwidocznionym schemacie.

Aktualizacja nie powiodła się w widokach

Objawem: Żądanie PUT lub PATCH dla jednostki wspieranej przez widok MySQL kończy się niepowodzeniem z powodu błędu lub nie ma wpływu.

Przyczyna: Builder API danych nie obsługuje obecnie operacji aktualizacji w widokach MySQL. Jest to znane ograniczenie śledzone w problemie z usługą GitHub #938.

Rozdzielczość: Użyj jednostki tabeli podstawowej na potrzeby operacji zapisu. Jeśli widok jest tylko do odczytu zgodnie z projektem, ustaw wartość "update": false w uprawnieniach jednostki, aby jawnie określić ograniczenie.

Aktualizacja kończy się niepowodzeniem w tabelach z obliczonymi kolumnami

Objawem: Żądanie PUT lub PATCH w tabeli MySQL zawierającej obliczone kolumny kończy się niepowodzeniem lub zwraca błąd.

Przyczyna: Kompilator interfejsu API danych zawodzi w poprawnym obsługiwaniu obliczonych kolumn podczas operacji aktualizacji w MySQL. Jest to znane ograniczenie śledzone w problemie usługi GitHub #1001.

Rozdzielczość: Obecnie nie ma obejścia problemu. Wyklucz obliczone kolumny z mapowań jednostki, jeśli to możliwe, lub unikaj operacji aktualizacji w jednostkach, których dotyczy problem, dopóki problem nie zostanie rozwiązany.

Filtrowanie zagnieżdżone nie jest obsługiwane

Objawem: Zapytanie rest \ lub graphQL ilter, które filtruje w polu powiązanej jednostki zwraca błąd lub nieoczekiwane wyniki w jednostce opartej na usłudze MySQL.

Przyczyna: Konstruktor API danych nie obsługuje obecnie filtrowania zagnieżdżonego dla MySQL. Jest to znane ograniczenie śledzone w problemie z usługą GitHub #1019.

Rozdzielczość: Zastosuj filtrowanie tylko w polach jednostek najwyższego poziomu. W przypadku danych zagnieżdżonych pobierz element nadrzędny i filtruj po stronie klienta lub zmień strukturę zapytania, aby uniknąć zagnieżdżonych predykatów.

Procedury składowane nie są obsługiwane

Objawem: Konfigurowanie procedury składowanej MySQL jako źródła jednostki kończy się niepowodzeniem lub jednostka nie działa zgodnie z oczekiwaniami.

Przyczyna: Kreator API danych nie obsługuje obecnie procedur składowanych dla MySQL. Jest to znane ograniczenie śledzone w problemie usługi GitHub #1024.

Rozdzielczość: Zamiast tego użyj tabeli lub widoku jako źródła jednostki. Śledź wątek na GitHubie, aby uzyskać informacje o dodaniu obsługi procedur składowanych MySQL.

Zasady bazy danych nie są wymuszane dla operacji tworzenia

Objawem: Operacja tworzenia mutacji lub żądania POST kończy się powodzeniem nawet wtedy, gdy zasady bazy danych powinny ograniczyć operację.

Przyczyna: Obsługa zasad bazy danych dla akcji tworzenia w MySQL nie została jeszcze zaimplementowana. Jest to znane ograniczenie śledzone w problemie z usługą GitHub #1329.

Rozdzielczość: Użyj uprawnień opartych na rolach, aby ograniczyć możliwość tworzenia do momentu, aż będzie dostępna obsługa zasad tworzenia w bazie danych MySQL.

Zasady bazy danych nie są wymuszane dla operacji PUT i PATCH

Symptom: Żądanie PUT lub PATCH w jednostce MySQL ukończy się pomyślnie nawet wtedy, gdy zasady bazy danych powinny je ograniczyć.

Spowodować: Obsługa zasad bazy danych dla operacji PUT i PATCH w programie MySQL nie została jeszcze zaimplementowana. Jest to znane ograniczenie śledzone w problemie usługi GitHub #1371.

Rozdzielczość: Użyj uprawnień opartych na rolach, aby ograniczyć dostęp do aktualizacji, dopóki nie będzie dostępna obsługa zasad bazy danych dla operacji aktualizacji MySQL.

Uwierzytelnianie w imieniu (OBO) nie jest obsługiwane

Objaw: Konfigurowanie uwierzytelniania On-Behalf-Of (OBO) dla wystąpienia DAB opartego na MySQL kończy się niepowodzeniem lub token nie jest przekazywany do bazy danych zgodnie z oczekiwaniami.

Przyczyna: Uwierzytelnianie OBO jest obecnie obsługiwane tylko dla SQL Server i Azure SQL. Obsługa bazy danych MySQL nie została jeszcze zaimplementowana. Jest to znane ograniczenie śledzone w problemie usługi GitHub #3159.

Rozwiązanie: Użyj obsługiwanej metody uwierzytelniania, takiej jak poświadczenia dla parametrów połączenia dla MySQL. Śledź problem na GitHub, aby uzyskać informacje na temat aktualizacji, kiedy obsługa OBO zostanie rozszerzona na bazy danych inne niż SQL Server.