Resolução de problemas MySQL

Soluções para problemas comuns de conectividade, autenticação e tipos de dados MySQL no Data API Builder.

Perguntas frequentes

O que é o suporte para MySQL em DAB?

O Data API Builder suporta MySQL como back-end de base de dados relacional. O DAB liga-se usando o driver MySqlConnector e traduz pedidos REST e GraphQL em consultas SQL. São suportadas tanto instâncias MySQL auto-hospedadas como serviços geridos, como Azure Database for MySQL.

Que formato de string de ligação é que o MySQL utiliza?

O DAB utiliza uma cadeia de ligação padrão de ADO.NET MySQL. Uma corda típica assemelha-se a Server=localhost;Port=3306;Database=mydb;Uid=myuser;Pwd=mypassword;. Defina a cadeia de ligação no data-source.connection-string campo de dab-config.json ou passe-a via --connection-string em dab init.

Que versões do MySQL são suportadas?

O DAB suporta MySQL 8.0 e versões posteriores. O MySQL 5.7 pode funcionar, mas não é oficialmente suportado. Confirma a versão SELECT VERSION(); do teu servidor no shell MySQL. Se estiver num serviço gerido como o Azure Database for MySQL, use a camada Flexible Server, que suporta MySQL 8.0.

Problemas comuns

Não é possível ligar-se ao contentor MySQL

Sintoma: O DAB não começa com Unable to connect to any of the specified MySQL hosts.

Causa: A porta do contentor MySQL não está mapeada, o nome do host está errado ou o contentor ainda não terminou de inicializar.

Resolução: Confirma que o contentor está a funcionar com docker ps e que essa porta 3306 está mapeada para o host. Use Server=localhost;Port=3306 na corda de ligação. Espere alguns segundos após o início do contentor para que o MySQL termine de inicializar antes de iniciar o DAB.

Acesso negado ao utilizador

Sintoma: Os registos DAB mostram Access denied for user 'myuser'@'172.x.x.x' ou algo semelhante.

Causa: A conta de utilizador MySQL está restrita a um host específico. Quando o DAB é executado no Docker, as ligações originam-se no IP da rede de containers, não em localhost.

Resolução: Conceda ao utilizador acesso a partir de qualquer host executando GRANT ALL PRIVILEGES ON mydb.* TO 'myuser'@'%' IDENTIFIED BY 'mypassword'; FLUSH PRIVILEGES;. Para produção, substitua % pelo hospedeiro ou sub-rede específico. Verifica se a palavra-passe corresponde correndo mysql -u myuser -p a partir da mesma rede.

Erro desconhecido na base de dados

Sintoma: O DAB regressa Unknown database 'mydb' durante o arranque.

Causa: A base de dados especificada na string de ligação não foi criada no servidor MySQL.

Resolução: Crie a base de dados antes de iniciar o DAB, correndo CREATE DATABASE mydb; no shell MySQL. Se usares um contentor, define a MYSQL_DATABASE variável de ambiente para que o MySQL crie a base de dados logo no início.

Aviso de tipo de coluna não suportado

Sintoma: O DAB regista um aviso sobre um tipo de coluna não suportado e o campo está ausente do esquema gerado.

Causa: Certos tipos específicos do MySQL, como SET, ENUM, ou tipos espaciais, podem não ter um mapeamento direto no sistema de tipos do DAB.

Resolução: Revise os registos do DAB para identificar a coluna e o tipo. Considere alterar a coluna para um tipo suportado, como VARCHAR para campos ENUM, ou excluir a coluna da definição da entidade usando a configuração mappings para omiti-la do esquema exposto.

A atualização falha nas visualizações

Sintoma: Um pedido PUT ou PATCH numa entidade suportada por uma visualização MySQL falha com um erro ou não tem efeito.

Causa: O Data API Builder atualmente não suporta operações de atualização nas vistas MySQL. Esta é uma limitação conhecida registada na edição #938 do GitHub.

Resolução: Use uma entidade de tabela base para operações de escrita. Se a visualização estiver projetada como apenas leitura, defina "update": false nas permissões da entidade para tornar explícita a limitação.

A atualização falha em tabelas com colunas calculadas

Sintoma: Um pedido PUT ou PATCH numa tabela MySQL que contém colunas computadas falha ou devolve um erro.

Causa: O Data API Builder não lida corretamente com colunas computadas durante operações de atualização no MySQL. Esta é uma limitação conhecida registada na edição #1001 do GitHub.

Resolução: Não há solução alternativa neste momento. Exclua as colunas calculadas dos mapeamentos da entidade, se possível, ou evite operações de atualização nas entidades afetadas até que o problema seja resolvido.

A filtragem aninhada não é suportada

Sintoma: Uma consulta REST \ ou GraphQL ilter que filtra num campo de entidade relacionada devolve um erro ou resultados inesperados numa entidade suportada por MySQL.

Causa: O Data API Builder atualmente não suporta filtragem aninhada para MySQL. Esta é uma limitação conhecida registada na edição #1019 do GitHub.

Resolução: Aplique filtragem apenas nos campos de entidade de nível superior. Para dados aninhados, recuperar o elemento pai e realizar o filtro no lado do cliente, ou reestruturar a consulta de modo a evitar predicados aninhados.

Procedimentos armazenados não são suportados

Sintoma: A configuração de um procedimento armazenado MySQL como fonte de entidade falha, ou a entidade não se comporta conforme esperado.

Causa: O Data API Builder não suporta atualmente procedimentos armazenados para MySQL. Esta é uma limitação conhecida registada na edição #1024 do GitHub.

Resolução: Use uma tabela ou vista como fonte da entidade em vez disso. Siga a issue do GitHub para atualizações sobre quando será adicionado o suporte a procedimentos armazenados do MySQL.

A política de base de dados não é aplicada para operações Create

Sintoma: Um pedido de criação de mutação ou POST tem sucesso mesmo quando uma política de base de dados deve restringir a operação.

Causa: O suporte de políticas de base de dados para ações Create no MySQL ainda não está implementado. Esta é uma limitação conhecida registada na edição #1329 do GitHub.

Resolução: Use permissões baseadas em papéis para restringir o acesso de criação até que o suporte a políticas de base de dados para o MySQL Create esteja disponível.

A política da base de dados não é aplicada para operações PUT e PATCH

Sintoma: Um pedido PUT ou PATCH numa entidade MySQL tem sucesso mesmo quando uma política de base de dados deveria restringi-lo.

Causa: O suporte a políticas de base de dados para operações PUT e PATCH no MySQL ainda não está implementado. Esta é uma limitação conhecida registada na edição #1371 do GitHub.

Resolução: Utilize permissões baseadas em funções para restringir o acesso a atualizações até que esteja disponível suporte a políticas de base de dados para operações de atualização MySQL.

A autenticação On-Behalf-Of (OBO) não é suportada.

Sintoma: Configurar a autenticação On-Behalf-Of (OBO) para uma instância DAB suportada por MySQL falha ou o token não é encaminhado para a base de dados como esperado.

Causa: A autenticação OBO é atualmente suportada apenas para SQL Server e Azure SQL. O suporte para MySQL ainda não foi implementado. Esta é uma limitação conhecida registada na edição #3159 do GitHub.

Resolução: Use um método de autenticação suportado, como credenciais de string de ligação para MySQL. Siga a edição do GitHub para atualizações sobre quando o suporte OBO for expandido para bases de dados não SQL Server.