MySQL-felsökning

Lösningar för vanliga problem med MySQL-anslutning, autentisering och datatyp i Data API Builder.

Vanliga frågor

Vad är MySQL-stöd i DAB?

Data API Builder stöder MySQL som en relationsdatabas-backend. DAB ansluter med drivrutinen MySqlConnector och översätter REST- och GraphQL-begäranden till SQL-frågor. Både lokala MySQL-instanser och hanterade tjänster som Azure Database for MySQL stöds.

Vilket format för anslutningssträngar använder MySQL?

DAB använder en standardanslutningssträng för MySQL ADO.NET. En typisk sträng ser ut som Server=localhost;Port=3306;Database=mydb;Uid=myuser;Pwd=mypassword;. Ange anslutningssträngen i fältet data-source.connection-stringdab-config.json eller skicka den via --connection-string i dab init.

Vilka MySQL-versioner stöds?

DAB stöder MySQL 8.0 och senare. MySQL 5.7 kan fungera men stöds inte officiellt. Bekräfta serverversionen med SELECT VERSION(); i MySQL-gränssnittet. Om du använder en hanterad tjänst, till exempel Azure Database for MySQL, använder du nivån Flexibel server, som stöder MySQL 8.0.

Vanliga problem

Det går inte att ansluta till MySQL-containern

Symptom: DAB kan inte börja med Unable to connect to any of the specified MySQL hosts.

Orsaka: MySQL-containerporten är inte mappad, värdnamnet är fel eller så har containern inte slutfört initieringen.

Upplösning: Bekräfta att containern körs med docker ps och att porten 3306 har mappats till värden. Använd Server=localhost;Port=3306 i anslutningssträngen. Tillåt några sekunder efter containerstart för MySQL att slutföra initieringen innan DAB startas.

Åtkomst nekad för användare

Symptom: DAB-loggar visar Access denied for user 'myuser'@'172.x.x.x' eller liknande.

Orsaka: MySQL-användarkontot är begränsat till en specifik värd. När DAB körs i Docker kommer anslutningarna från containernätverkets IP-adress, inte localhost.

Upplösning: Ge användaren åtkomst från valfri värd genom att köra GRANT ALL PRIVILEGES ON mydb.* TO 'myuser'@'%' IDENTIFIED BY 'mypassword'; FLUSH PRIVILEGES;. I produktion ersätter du % med en specifik värd eller ett undernät. Kontrollera att lösenordet matchar genom att köra mysql -u myuser -p från samma nätverk.

Okänt databasfel

Symptom: DAB returnerar Unknown database 'mydb' vid start.

Orsaka: Databasen som anges i anslutningssträngen har inte skapats på MySQL-servern.

Upplösning: Skapa databasen innan du startar DAB genom att köra CREATE DATABASE mydb; i MySQL-gränssnittet. Om du använder en container anger du MYSQL_DATABASE miljövariabeln så att MySQL skapar databasen vid första starten.

Varning om kolumntyp som inte stöds

Symptom: DAB loggar en varning om en kolumntyp som inte stöds och fältet saknas i det genererade schemat.

Orsaka: Vissa MySQL-specifika typer som SET, ENUMeller rumsliga typer kanske inte har någon direkt mappning i DAB:s typsystem.

Upplösning: Granska DAB-loggarna för att identifiera kolumnen och typen. Överväg att ändra kolumnen till en typ som stöds, till exempel VARCHAR för ENUM fält, eller exkludera kolumnen från entitetsdefinitionen med hjälp av konfigurationen mappings för att utelämna den från det exponerade schemat.

Uppdateringen misslyckas för vyer

Symptom: En PUT- eller PATCH-begäran för en entitet som backas upp av en MySQL-vy misslyckas med ett fel eller har ingen effekt.

Orsaka: Data API Builder stöder för närvarande inte uppdateringsåtgärder i MySQL-vyer. Det här är en känd begränsning som spåras i GitHub-problem #938.

Lösning: Använd en bastabellentitet för skrivåtgärder. Om vyn är avsiktligt skrivskyddad, ange "update": false i entitetens behörigheter för att tydliggöra begränsningen.

Uppdateringen misslyckas i tabeller med beräknade kolumner

Symptom: En PUT- eller PATCH-begäran i en MySQL-tabell som innehåller beräknade kolumner misslyckas eller returnerar ett fel.

Orsaka: Data-API-byggare hanterar inte beräknade kolumner korrekt under uppdateringsåtgärder i MySQL. Det här är en känd begränsning som spåras i GitHub-problem #1001.

Upplösning: Det finns ingen lösning just nu. Undanta beräknade kolumner från entitetens mappningar om möjligt eller undvik uppdateringsåtgärder på berörda entiteter tills problemet har lösts.

Kapslad filtrering stöds inte

Symptom: En REST\- eller GraphQL-ilterfråga som filtrerar i ett relaterat entitetsfält returnerar ett fel eller oväntade resultat på en MySQL-backad entitet.

Orsaka: Data API Builder stöder för närvarande inte kapslad filtrering för MySQL. Det här är en känd begränsning som spåras i GitHub-problem #1019.

Upplösning: Använd endast filtrering på de översta entitetsfälten. För kapslade data, hämta den överordnade och filtrera på klientsidan, eller omstrukturera frågan för att undvika inbäddade predikat.

Lagrade procedurer stöds inte

Symptom: Det går inte att konfigurera en MySQL-lagrad procedur som en entitetskälla eller så fungerar inte entiteten som förväntat.

Orsaka: Data API Builder stöder för närvarande inte lagrade procedurer för MySQL. Det här är en känd begränsning som spåras i GitHub-problemet #1024.

Upplösning: Använd en tabell eller vy som entitetskälla i stället. Följ GitHub-problemet för uppdateringar om när stöd för lagrad MySQL-procedur läggs till.

Databasprincipen tillämpas inte för skapa-åtgärder

Symptom: En create-mutation eller POST-begäran lyckas även när en databasprincip ska begränsa åtgärden.

Orsaka: Databasprincipstöd för Skapa åtgärder i MySQL har ännu inte implementerats. Det här är en känd begränsning som spåras i GitHub-problem #1329.

Upplösning: Använd rollbaserade behörigheter för att begränsa skapa åtkomst tills databasprincipstöd för MySQL Create är tillgängligt.

Databasprincipen tillämpas inte för PUT- och PATCH-åtgärder

Symptom: En PUT- eller PATCH-begäran på en MySQL-entitet lyckas även när en databasprincip bör begränsa den.

Orsaka: Databasprincipstöd för PUT- och PATCH-åtgärder i MySQL har ännu inte implementerats. Det här är en känd begränsning som spåras i GitHub-problemet #1371.

Upplösning: Använd rollbaserade behörigheter för att begränsa uppdateringsåtkomsten tills databasprincipstöd för MySQL-uppdateringsåtgärder är tillgängligt.

Autentisering med Behalf-Of (OBO) stöds inte

Symptom: Konfigurationen av OBO-autentisering (On-Behalf-Of) för en MySQL-backad DAB-instans misslyckas eller så vidarebefordras inte token till databasen som förväntat.

Orsaka: OBO-autentisering stöds för närvarande endast för SQL Server och Azure SQL. Stöd för MySQL har ännu inte implementerats. Det här är en känd begränsning som spåras i GitHub-problem #3159.

Upplösning: Använd en autentiseringsmetod som stöds, till exempel autentiseringsuppgifter för anslutningssträngar för MySQL. Följ GitHub-problemet för uppdateringar om när OBO-stöd utökas till icke-SQL Server-databaser.