Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Lösungen für allgemeine Probleme mit MySQL-Konnektivität, Authentifizierung und Datentypen im Daten-API-Generator.
Häufig gestellte Fragen
Was ist MySQL-Unterstützung in DAB?
Der Daten-API-Generator unterstützt MySQL als relationales Datenbank-Back-End. DAB stellt eine Verbindung mit dem MySqlConnector-Treiber her und übersetzt REST- und GraphQL-Anforderungen in SQL-Abfragen. Sowohl selbst gehostete MySQL-Instanzen als auch verwaltete Dienste wie Azure-Datenbank für MySQL werden unterstützt.
Welches Verbindungszeichenfolgenformat verwendet MySQL?
DAB verwendet eine standardmäßige MySQL-ADO.NET Verbindungszeichenfolge. Eine typische Zeichenfolge sieht wie folgt aus: Server=localhost;Port=3306;Database=mydb;Uid=myuser;Pwd=mypassword;. Setzen Sie die Verbindungszeichenfolge im data-source.connection-string-Feld von dab-config.json oder übergeben Sie sie über --connection-string in dab init.
Welche MySQL-Versionen werden unterstützt?
DAB unterstützt MySQL 8.0 und höher. MySQL 5.7 kann funktionieren, wird aber nicht offiziell unterstützt. Bestätigen Sie Ihre Serverversion mit SELECT VERSION(); der MySQL-Shell. Wenn Sie sich in einem verwalteten Dienst wie Azure Database for MySQL befinden, verwenden Sie die Flexible Server-Ebene, die MySQL 8.0 unterstützt.
Häufig auftretende Probleme
Verbindung mit MySQL-Container kann nicht hergestellt werden
Symptom: DAB kann nicht mit Unable to connect to any of the specified MySQL hosts starten.
Ursache: Der MySQL-Containerport ist nicht zugeordnet, der Hostname ist falsch, oder der Container hat die Initialisierung nicht abgeschlossen.
Auflösung: Vergewissern Sie sich, dass der Container mit docker ps läuft und dass Port 3306 zum Host abgebildet ist. Verwenden Sie Server=localhost;Port=3306 in der Verbindungszeichenfolge. Lassen Sie nach dem Start des Containers einige Sekunden, damit MySQL die Initialisierung abschließen kann, bevor DAB gestartet wird.
Zugriff verweigert für Benutzer
Symptom: DAB-Protokolle zeigen Access denied for user 'myuser'@'172.x.x.x' oder Ähnliches.
Ursache: Das MySQL-Benutzerkonto ist auf einen bestimmten Host beschränkt. Wenn DAB in Docker ausgeführt wird, stammen Verbindungen von der Containernetzwerk-IP, nicht localhost.
Lösung: Gewähren Sie Benutzer Zugriff von jedem Host, indem Sie GRANT ALL PRIVILEGES ON mydb.* TO 'myuser'@'%' IDENTIFIED BY 'mypassword'; FLUSH PRIVILEGES; ausführen. Ersetzen Sie % in der Produktion durch den spezifischen Host oder das Subnetz. Überprüfen Sie die Übereinstimmung des Kennworts, indem Sie mysql -u myuser -p aus demselben Netzwerk ausführen.
Unbekannter Datenbankfehler
Symptom: DAB gibt während des Starts zurück Unknown database 'mydb' .
Ursache: Die in der Verbindungszeichenfolge angegebene Datenbank wurde nicht auf dem MySQL-Server erstellt.
Auflösung: Erstellen Sie die Datenbank, bevor Sie DAB starten, indem Sie CREATE DATABASE mydb; in der MySQL-Shell ausführen. Wenn Sie einen Container verwenden, legen Sie die Umgebungsvariable MYSQL_DATABASE so fest, dass MySQL die Datenbank beim ersten Start erstellt.
Warnung über nicht unterstützten Spaltentyp
Symptom: DAB protokolliert eine Warnung zu einem nicht unterstützten Spaltentyp, und das Feld fehlt im generierten Schema.
Ursache: Bestimmte mySQL-spezifische Typen wie SET, ENUModer räumliche Typen verfügen möglicherweise nicht über eine direkte Zuordnung im DAB-Typsystem.
Lösung: Überprüfen Sie die DAB-Protokolle, um die Spalte und den Typ zu identifizieren. Erwägen Sie, die Spalte in einen unterstützten Typ zu ändern, z. B. VARCHAR für ENUM Felder, oder schließen Sie die Spalte aus der Entitätsdefinition mithilfe der mappings Konfiguration aus, um sie aus dem freigegebenen Schema auszulassen.
Aktualisierung von Ansichten schlägt fehl
Symptom: Eine PUT- oder PATCH-Anforderung für eine Entität, die von einer MySQL-Ansicht unterstützt wird, schlägt mit einem Fehler fehl oder hat keine Auswirkung.
Ursache: Der Daten-API-Generator unterstützt derzeit keine Aktualisierungsvorgänge für MySQL-Ansichten. Dies ist eine bekannte Einschränkung, die in GitHub-Problem #938 nachverfolgt wird.
Auflösung: Verwenden Sie eine Basistabellenentität für Schreibvorgänge. Wenn die Ansicht von Haus aus schreibgeschützt ist, setzen Sie "update": false in den Berechtigungen der Entität, um die Einschränkung explizit festzulegen.
Aktualisierung schlägt bei Tabellen mit berechneten Spalten fehl
Symptom: Eine PUT- oder PATCH-Anforderung für eine MySQL-Tabelle, die berechnete Spalten enthält, schlägt fehl oder gibt einen Fehler zurück.
Ursache: Der Daten-API-Generator verarbeitet berechnete Spalten bei Aktualisierungsvorgängen in MySQL nicht ordnungsgemäß. Dies ist eine bekannte Einschränkung, die in GitHub-Problem #1001 nachverfolgt wird.
Auflösung: Zurzeit gibt es keine Problemumgehung. Schließen Sie berechnete Spalten nach Möglichkeit aus den Zuordnungen der Entität aus, oder vermeiden Sie Aktualisierungsvorgänge für betroffene Entitäten, bis das Problem behoben ist.
Geschachtelte Filterung wird nicht unterstützt.
Symptom: Eine REST \- oder GraphQL-Ilterabfrage, die nach einem verknüpften Entitätsfeld filtert, gibt einen Fehler oder unerwartete Ergebnisse für eine mySQL-gesicherte Entität zurück.
Ursache: Der Daten-API-Generator unterstützt derzeit keine geschachtelte Filterung für MySQL. Dies ist eine bekannte Einschränkung, die in GitHub-Problem #1019 nachverfolgt wird.
Auflösung: Anwenden der Filterung nur auf Entitätsfelder auf oberster Ebene. Rufen Sie bei geschachtelten Daten das übergeordnete Element ab, und filtern Sie sie clientseitig, oder strukturieren Sie die Abfrage neu, um geschachtelte Prädikate zu vermeiden.
Gespeicherte Prozeduren werden nicht unterstützt.
Symptom: Das Konfigurieren einer gespeicherten MySQL-Prozedur als Entitätsquelle schlägt fehl, oder die Entität verhält sich nicht wie erwartet.
Ursache: Der Daten-API-Generator unterstützt derzeit keine gespeicherten Prozeduren für MySQL. Dies ist eine bekannte Einschränkung, die im GitHub-Problem #1024 nachverfolgt wird.
Auflösung: Verwenden Sie stattdessen eine Tabelle oder Ansicht als Entitätsquelle. Folgen Sie dem GitHub-Issue, um Updates darüber zu erhalten, wann die Unterstützung für MySQL-Gespeicherte Prozeduren hinzugefügt wird.
Datenbankrichtlinie wird für Erstellungsvorgänge nicht erzwungen.
Symptom: Eine Erstellungsmutation oder POST-Anforderung ist auch dann erfolgreich, wenn eine Datenbankrichtlinie den Vorgang einschränken soll.
Ursache: Die Unterstützung von Datenbankrichtlinien für "Aktionen erstellen" in MySQL ist noch nicht implementiert. Dies ist eine bekannte Einschränkung, die in GitHub-Problem #1329 nachverfolgt wird.
Auflösung: Verwenden Sie rollenbasierte Berechtigungen, um den Erstellungszugriff einzuschränken, bis die Unterstützung von Datenbankrichtlinien für MySQL Create verfügbar ist.
Datenbankrichtlinie wird für PUT- und PATCH-Vorgänge nicht erzwungen.
Symptom: Eine PUT- oder PATCH-Anforderung für eine MySQL-Entität ist auch dann erfolgreich, wenn eine Datenbankrichtlinie sie einschränken soll.
Ursache: Datenbankrichtlinienunterstützung für PUT- und PATCH-Vorgänge in MySQL ist noch nicht implementiert. Dies ist eine bekannte Einschränkung, die in GitHub-Problem #1371 nachverfolgt wird.
Auflösung: Verwenden Sie rollenbasierte Berechtigungen, um den Updatezugriff einzuschränken, bis die Unterstützung von Datenbankrichtlinien für MySQL-Updatevorgänge verfügbar ist.
On-Behalf-Of (OBO)-Authentifizierung wird nicht unterstützt
Symptom: Das Konfigurieren der On-Behalf-Of-Authentifizierung (OBO) für eine mySQL-gesicherte DAB-Instanz schlägt fehl, oder das Token wird nicht wie erwartet an die Datenbank weitergeleitet.
Ursache: Die OBO-Authentifizierung wird derzeit nur für SQL Server und Azure SQL unterstützt. Die Unterstützung für MySQL wurde noch nicht implementiert. Dies ist eine bekannte Einschränkung, die in GitHub-Problem #3159 nachverfolgt wird.
Auflösung: Verwenden Sie eine unterstützte Authentifizierungsmethode wie Verbindungszeichenfolgenanmeldeinformationen für MySQL. Folgen Sie dem GitHub-Issue für Updates, wann die OBO-Unterstützung auf Datenbanken, die kein SQL Server sind, erweitert wird.