Risoluzione dei problemi di MySQL

Soluzioni per problemi comuni di connettività, autenticazione e tipo di dati di MySQL in Generatore API dati.

Domande comuni

Che cos'è il supporto di MySQL in DAB?

Il generatore di API dati supporta MySQL come back-end di database relazionale. DAB si connette usando il driver MySqlConnector e converte le richieste REST e GraphQL in query SQL. Sono supportate sia istanze MySQL self-hosted che servizi gestiti, ad esempio Database di Azure per MySQL.

Quale formato di stringa di connessione usa MySQL?

DAB usa una stringa di connessione mySQL standard ADO.NET. Una stringa tipica è simile a Server=localhost;Port=3306;Database=mydb;Uid=myuser;Pwd=mypassword;. Impostare la stringa di connessione nel data-source.connection-string campo di dab-config.json o passarla tramite --connection-string in dab init.

Quali versioni di MySQL sono supportate?

DAB supporta MySQL 8.0 e versioni successive. MySQL 5.7 può funzionare ma non è ufficialmente supportato. Verificare la versione del server con SELECT VERSION(); nella shell MySQL. Se si usa un servizio gestito, ad esempio Database di Azure per MySQL, usare il livello Server flessibile, che supporta MySQL 8.0.

Problemi comuni

Impossibile connettersi al contenitore MySQL

Sintomo: DAB non inizia con Unable to connect to any of the specified MySQL hosts.

Causa: La porta del contenitore MySQL non è mappata, il nome host non è corretto o il contenitore non ha completato l'inizializzazione.

Risoluzione: Verificare che il contenitore sia in esecuzione con docker ps e che la porta 3306 sia mappata all'host. Usare Server=localhost;Port=3306 nella stringa di connessione. Attendere alcuni secondi dall'avvio del contenitore per MySQL per completare l'inizializzazione prima di avviare DAB.

Accesso negato per l'utente

Sintomo: I log DAB mostrano Access denied for user 'myuser'@'172.x.x.x' o simili.

Causa: L'account utente MySQL è limitato a un host specifico. Quando si esegue DAB in Docker, le connessioni provengono dall'indirizzo IP della rete del contenitore, non da localhost.

Risoluzione: Concedere all'utente l'accesso da qualsiasi host eseguendo GRANT ALL PRIVILEGES ON mydb.* TO 'myuser'@'%' IDENTIFIED BY 'mypassword'; FLUSH PRIVILEGES;. Per la produzione, sostituire % con l'host o la subnet specifica. Assicurarsi che la password sia corretta eseguendo mysql -u myuser -p dalla stessa rete.

Errore sconosciuto del database

Sintomo: Durante l'avvio, DAB restituisce Unknown database 'mydb'.

Causa: Il database specificato nella stringa di connessione non è stato creato nel server MySQL.

Risoluzione: Creare il database prima di avviare DAB eseguendo CREATE DATABASE mydb; nella shell MySQL. Se si usa un contenitore, impostare la MYSQL_DATABASE variabile di ambiente in modo che MySQL crei il database al primo avvio.

Avviso relativo al tipo di colonna non supportato

Sintomo: DAB registra un avviso relativo a un tipo di colonna non supportato e il campo non è presente nello schema generato.

Causa: Alcuni tipi specifici di MySQL, come ad esempio SET, ENUM, o tipi spaziali, potrebbero non avere un mapping diretto nel sistema di tipi di DAB.

Risoluzione: Esaminare i log DAB per identificare la colonna e il tipo. È consigliabile modificare la colonna in un tipo supportato, ad VARCHAR esempio per ENUM i campi, o escludere la colonna dalla definizione dell'entità usando la mappings configurazione per ometterla dallo schema esposto.

L'aggiornamento non riesce nelle visualizzazioni

Sintomo: Una richiesta PUT o PATCH su un'entità supportata da una visualizzazione MySQL ha esito negativo con un errore o non ha alcun effetto.

Causa: Il generatore di API dati attualmente non supporta le operazioni di aggiornamento nelle viste MySQL. Si tratta di una limitazione nota rilevata nel problema 938 di GitHub.

Risoluzione: Usare un'entità tabella di base per le operazioni di scrittura. Se la visualizzazione è di sola lettura per impostazione predefinita, impostare "update": false nelle autorizzazioni dell'entità per rendere esplicita la limitazione.

L'aggiornamento non riesce nelle tabelle con colonne calcolate

Sintomo: Una richiesta PUT o PATCH in una tabella MySQL contenente colonne calcolate ha esito negativo o restituisce un errore.

Causa: Il generatore di API dati non gestisce correttamente le colonne calcolate durante le operazioni di aggiornamento in MySQL. Si tratta di una limitazione nota rilevata nel problema #1001 di GitHub.

Risoluzione: Al momento non esiste alcuna soluzione alternativa. Escludere le colonne calcolate dai mapping dell'entità, se possibile, oppure evitare operazioni di aggiornamento sulle entità interessate fino a quando il problema non viene risolto.

Il filtro annidato non è supportato

Sintomo: Una query REST \ o GraphQL ilter che filtra in un campo di entità correlato restituisce un errore o risultati imprevisti in un'entità supportata da MySQL.

Causa: Il generatore di API dati attualmente non supporta il filtro annidato per MySQL. Si tratta di una limitazione nota rilevata nel problema di GitHub #1019.

Risoluzione: Applicare il filtro solo ai campi di entità di primo livello. Per i dati annidati, recuperare il genitore e filtrare lato client, oppure ristrutturare la query per evitare predicati annidati.

Le procedure memorizzate non sono supportate

Sintomo: La configurazione di una stored procedure MySQL come origine dell'entità ha esito negativo o l'entità non si comporta come previsto.

Causa: Il generatore di API dati attualmente non supporta le stored procedure per MySQL. Si tratta di una limitazione nota rilevata nel problema gitHub #1024.

Risoluzione: Usare invece una tabella o una vista come origine dell'entità. Seguire la questione su GitHub per gli aggiornamenti su quando viene aggiunto il supporto delle stored procedure MySQL.

Le politiche del database non vengono applicate alle operazioni di creazione.

Sintomo: Una richiesta di creazione della mutazione o POST ha esito positivo anche quando un criterio di database deve limitare l'operazione.

Causa: Il supporto dei criteri di database per La creazione di azioni in MySQL non è ancora implementato. Si tratta di una limitazione nota rilevata nel problema di GitHub #1329.

Risoluzione: Usare le autorizzazioni basate sui ruoli per limitare l'accesso di creazione fino a quando non è disponibile il supporto della policy di database per l'operazione "Create" di MySQL.

I criteri di database non vengono applicati per le operazioni PUT e PATCH

Sintomo: Una richiesta PUT o PATCH in un'entità MySQL ha esito positivo anche quando un criterio di database deve limitarlo.

Causa: Il supporto dei criteri di database per le operazioni PUT e PATCH in MySQL non è ancora implementato. Si tratta di una limitazione nota rilevata nel problema di GitHub #1371.

Risoluzione: Usare le autorizzazioni basate sui ruoli per limitare l'accesso agli aggiornamenti fino a quando non è disponibile il supporto dei criteri di database per le operazioni di aggiornamento di MySQL.

L'autenticazione on-Behalf-Of (OBO) non è supportata

Sintomo: La configurazione dell'autenticazione OBO (On- On-Behalf-Of) per un'istanza DAB supportata da MySQL ha esito negativo o il token non viene inoltrato al database come previsto.

Causa: L'autenticazione OBO è attualmente supportata solo per SQL Server e Azure SQL. Il supporto per MySQL non è ancora stato implementato. Si tratta di una limitazione nota rilevata nel problema di GitHub #3159.

Risoluzione: Usare un metodo di autenticazione supportato, ad esempio le credenziali della stringa di connessione per MySQL. Seguire la segnalazione su GitHub per aggiornamenti su quando il supporto OBO verrà esteso ai database diversi da SQL Server.