Problemen met MySQL oplossen

Oplossingen voor veelvoorkomende problemen met MySQL-connectiviteit, verificatie en gegevenstypen in Data API Builder.

Veelgestelde vragen

Wat is MySQL-ondersteuning in DAB?

Data API Builder ondersteunt MySQL als een back-end voor relationele databases. DAB maakt verbinding met behulp van het MySqlConnector-stuurprogramma en vertaalt REST- en GraphQL-aanvragen in SQL-query's. Zowel zelf-hostende MySQL-exemplaren als beheerde services, zoals Azure Database for MySQL, worden ondersteund.

Welke verbindingsreeksindeling gebruikt MySQL?

DAB maakt gebruik van een standaard MySQL-ADO.NET-verbindingsreeks. Een typische tekenreeks ziet er als Server=localhost;Port=3306;Database=mydb;Uid=myuser;Pwd=mypassword; uit. Stel de verbindingsreeks in het data-source.connection-string veld van dab-config.json of geef deze door in--connection-stringdab init.

Welke MySQL-versies worden ondersteund?

DAB ondersteunt MySQL 8.0 en hoger. MySQL 5.7 werkt mogelijk, maar wordt niet officieel ondersteund. Bevestig uw serverversie met SELECT VERSION(); in de MySQL-shell. Als u zich in een beheerde service bevindt, zoals Azure Database for MySQL, gebruikt u de laag Flexible Server, die Ondersteuning biedt voor MySQL 8.0.

Veelvoorkomende problemen

Kan geen verbinding maken met MySQL-container

Symptoom: DAB kan niet worden gestart met Unable to connect to any of the specified MySQL hosts.

Oorzaak: De MySQL-containerpoort is niet toegewezen, de hostnaam is onjuist of de container is niet klaar met initialiseren.

Resolutie: Controleer of de container draait met docker ps en dat poort 3306 is toegewezen aan de host. Gebruik Server=localhost;Port=3306 in de verbindingsreeks. Wacht enkele seconden na het starten van de container voor MySQL om de initialisatie te voltooien voordat u DAB start.

Toegang geweigerd voor gebruiker

Symptoom: DAB-logboeken tonen Access denied for user 'myuser'@'172.x.x.x' of een vergelijkbare melding.

Oorzaak: Het MySQL-gebruikersaccount is beperkt tot een specifieke host. Wanneer DAB wordt uitgevoerd in Docker, zijn verbindingen afkomstig van het IP-adres van het containernetwerk, niet localhost.

Resolutie: Verleen de gebruiker toegang vanaf elke host door het uitvoeren van GRANT ALL PRIVILEGES ON mydb.* TO 'myuser'@'%' IDENTIFIED BY 'mypassword'; FLUSH PRIVILEGES;. Vervang in de productieomgeving % door de specifieke host of het specifieke subnet. Controleer of het wachtwoord overeenkomt door uit te voeren mysql -u myuser -p vanuit hetzelfde netwerk.

Onbekende databasefout

Symptoom: DAB geeft Unknown database 'mydb' tijdens het opstarten.

Oorzaak: De database die is opgegeven in de verbindingsreeks, is niet gemaakt op de MySQL-server.

Resolutie: Maak de database voordat u DAB start door deze uit te voeren CREATE DATABASE mydb; in de MySQL-shell. Als u een container gebruikt, stelt u de MYSQL_DATABASE omgevingsvariabele in, zodat MySQL de database bij het eerste begin maakt.

Waarschuwing voor niet-ondersteund kolomtype

Symptoom: DAB registreert een waarschuwing over een niet-ondersteund kolomtype en het veld ontbreekt in het gegenereerde schema.

Oorzaak: Bepaalde MySQL-specifieke typen, zoals SET, ENUMof ruimtelijke typen, hebben mogelijk geen directe toewijzing in het typesysteem van DAB.

Resolutie: Bekijk de DAB-logboeken om de kolom en het type te identificeren. U kunt de kolom wijzigen in een ondersteund type, zoals VARCHAR voor ENUM velden, of de kolom uitsluiten van de entiteitsdefinitie met behulp van de mappings configuratie om deze weg te laten uit het weergegeven schema.

Bijwerken mislukt bij weergaven

Symptoom: Een PUT- of PATCH-aanvraag voor een entiteit die wordt ondersteund door een MySQL-weergave mislukt met een fout of heeft geen effect.

Oorzaak: Data API Builder biedt momenteel geen ondersteuning voor updatebewerkingen in MySQL-weergaven. Dit is een bekende beperking die wordt bijgehouden in GitHub-probleem #938.

Resolutie: Gebruik een basistabelentiteit voor schrijfbewerkingen. Als de weergave ontworpen is als alleen-lezen, stel "update": false in de machtigingen van de entiteit in om de beperking expliciet te maken.

Bijwerken mislukt voor tabellen met berekende kolommen

Symptoom: Een PUT- of PATCH-aanvraag voor een MySQL-tabel met berekende kolommen mislukt of retourneert een fout.

Oorzaak: Data API Builder verwerkt berekende kolommen niet correct tijdens updatebewerkingen in MySQL. Dit is een bekende beperking die wordt bijgehouden in GitHub-probleem #1001.

Resolutie: Er is op dit moment geen tijdelijke oplossing. Sluit zo mogelijk berekende kolommen uit van de toewijzingen van de entiteit of vermijd updatebewerkingen op betrokken entiteiten totdat het probleem is opgelost.

Geneste filters worden niet ondersteund

Symptoom: Een REST \ of GraphQL ilter-query die filtert op een gerelateerd entiteitsveld retourneert een fout of onverwachte resultaten op een door MySQL ondersteunde entiteit.

Oorzaak: Data API Builder biedt momenteel geen ondersteuning voor geneste filtering voor MySQL. Dit is een bekende beperking die wordt bijgehouden in GitHub-probleem #1019.

Resolutie: Pas filteren toe op de entiteitsvelden op het hoogste niveau. Voor geneste gegevens kunt u de ouder ophalen en aan de clientzijde filteren, of de query herstructureren om geneste predicaten te vermijden.

Opgeslagen procedures worden niet ondersteund

Symptoom: Het configureren van een opgeslagen MySQL-procedure als een entiteitsbron mislukt of de entiteit gedraagt zich niet zoals verwacht.

Oorzaak: Data API Builder biedt momenteel geen ondersteuning voor opgeslagen procedures voor MySQL. Dit is een bekende beperking die wordt bijgehouden in GitHub-probleem #1024.

Resolutie: Gebruik in plaats daarvan een tabel of weergave als entiteitsbron. Volg het GitHub-probleem voor updates wanneer ondersteuning voor opgeslagen MySQL-procedures wordt toegevoegd.

Databasebeleid wordt niet afgedwongen voor create-bewerkingen.

Symptoom: Een create mutatie of POST-aanvraag slaagt zelfs wanneer een databasebeleid de bewerking moet beperken.

Oorzaak: Ondersteuning voor databasebeleid voor create actions in MySQL is nog niet geïmplementeerd. Dit is een bekende beperking die wordt bijgehouden in GitHub-probleem #1329.

Resolutie: Gebruik op rollen gebaseerde machtigingen om de toegang te beperken totdat ondersteuning voor databasebeleid voor MySQL Create beschikbaar is.

Databasebeleid wordt niet afgedwongen voor PUT- en PATCH-bewerkingen

Symptoom: Een PUT- of PATCH-aanvraag voor een MySQL-entiteit slaagt zelfs wanneer een databasebeleid dit moet beperken.

Oorzaak: Ondersteuning voor databasebeleid voor PUT- en PATCH-bewerkingen in MySQL is nog niet geïmplementeerd. Dit is een bekende beperking die wordt bijgehouden in GitHub-probleem #1371.

Resolutie: Gebruik op rollen gebaseerde machtigingen om de toegang tot updates te beperken totdat ondersteuning voor databasebeleid voor MySQL-updatebewerkingen beschikbaar is.

Verificatie On-Behalf-Of (OBO) wordt niet ondersteund

Symptoom: Het configureren van on-Behalf-Of -verificatie (OBO) voor een met MySQL ondersteund DAB-exemplaar mislukt of het token wordt niet doorgestuurd naar de database zoals verwacht.

Oorzaak: OBO-verificatie wordt momenteel alleen ondersteund voor SQL Server en Azure SQL. Ondersteuning voor MySQL is nog niet geïmplementeerd. Dit is een bekende beperking die wordt bijgehouden in GitHub-probleem #3159.

Resolutie: Gebruik een ondersteunde verificatiemethode, zoals verbindingsreeksreferenties voor MySQL. Volg het GitHub-probleem voor updates wanneer OBO-ondersteuning wordt uitgebreid naar niet-SQL Server-databases.