Solução de problemas do MySQL

Soluções para problemas comuns de conectividade, autenticação e tipo de dados do MySQL no construtor de API de Dados.

Perguntas comuns

O que é o suporte ao MySQL no DAB?

O Construtor de API de Dados dá suporte ao MySQL como um back-end de banco de dados relacional. O DAB se conecta usando o driver MySqlConnector e converte solicitações REST e GraphQL em consultas SQL. Há suporte para instâncias do MySQL auto-hospedadas e serviços gerenciados, como o Banco de Dados do Azure para MySQL.

Qual formato de cadeia de conexão o MySQL usa?

O DAB usa uma cadeia de conexão de ADO.NET MySQL padrão. Uma cadeia de caracteres típica se parece com Server=localhost;Port=3306;Database=mydb;Uid=myuser;Pwd=mypassword;. Defina a cadeia de conexão no campo data-source.connection-string de dab-config.json ou passe-a por meio de --connection-string em dab init.

Quais versões do MySQL têm suporte?

O DAB dá suporte ao MySQL 8.0 e posterior. O MySQL 5.7 pode funcionar, mas não tem suporte oficial. Confirme a versão SELECT VERSION(); do servidor no shell do MySQL. Se você estiver em um serviço gerenciado, como o Banco de Dados do Azure para MySQL, use a camada servidor flexível, que dá suporte ao MySQL 8.0.

Problemas comuns

Não é possível se conectar ao contêiner do MySQL

Sintoma: O DAB falha ao começar com Unable to connect to any of the specified MySQL hosts.

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

Resolução: Confirme se o contêiner está em execução com docker ps e se a porta 3306 está mapeada para o host. Use Server=localhost;Port=3306 na cadeia de conexão. Aguarde alguns segundos após o início do contêiner para que o MySQL termine de inicializar antes de iniciar o DAB.

Acesso negado para o usuário

Sintoma: Os logs do DAB mostram Access denied for user 'myuser'@'172.x.x.x' ou informações semelhantes.

Causa: A conta de usuário do MySQL é restrita a um host específico. Quando o DAB é executado no Docker, as conexões se originam do IP da rede de contêiner, não localhost.

Resolução: Conceda ao usuário acesso de qualquer host executando GRANT ALL PRIVILEGES ON mydb.* TO 'myuser'@'%' IDENTIFIED BY 'mypassword'; FLUSH PRIVILEGES;. Para produção, substitua % pelo host ou sub-rede específico. Verifique se a senha corresponde executando mysql -u myuser -p na mesma rede.

Erro de banco de dados desconhecido

Sintoma: O DAB retorna Unknown database 'mydb' durante a inicialização.

Causa: O banco de dados especificado na cadeia de conexão não foi criado no servidor MySQL.

Resolução: Crie o banco de dados antes de iniciar o DAB executando CREATE DATABASE mydb; no shell MySQL. Se estiver usando um contêiner, defina a variável de MYSQL_DATABASE ambiente para que o MySQL crie o banco de dados na primeira inicialização.

Aviso: Tipo de coluna não suportado

Sintoma: O DAB registra um aviso sobre um tipo de coluna sem suporte e o campo está ausente do esquema gerado.

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

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

Falha na atualização das visões

Sintoma: Uma solicitação PUT ou PATCH em uma entidade apoiada por uma exibição MySQL falha com um erro ou não tem efeito.

Causa: Atualmente, o Construtor de API de Dados não dá suporte a operações de atualização em exibições do MySQL. Essa é uma limitação conhecida rastreada no problema do GitHub nº 938.

Resolução: Use uma entidade de tabela base para operações de gravação. Se o modo de exibição for somente leitura por sua própria natureza, defina "update": false nas permissões da entidade para tornar a limitação explícita.

Falha na atualização em tabelas com colunas computadas

Sintoma: Uma solicitação PUT ou PATCH em uma tabela MySQL que contém colunas computadas falha ou retorna um erro.

Causa: O Construtor de API de Dados não manipula corretamente colunas computadas durante operações de atualização no MySQL. Essa é uma limitação conhecida rastreada no problema do GitHub nº 1001.

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

Não há suporte para filtragem aninhada

Sintoma: Uma consulta REST \ ou GraphQL ilter que filtra em um campo de entidade relacionado retorna um erro ou resultados inesperados em uma entidade com suporte do MySQL.

Causa: Atualmente, o Construtor de API de Dados não dá suporte à filtragem aninhada para MySQL. Essa é uma limitação conhecida rastreada no problema do GitHub nº 1019.

Resolução: Aplicar filtragem somente nos campos de entidade de nível superior. Para dados aninhados, recupere o elemento pai e filtre no lado do cliente, ou reestruture a consulta para evitar predicados aninhados.

Não há suporte para procedimentos armazenados

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

Causa: Atualmente, o Construtor de API de Dados não dá suporte a procedimentos armazenados para MySQL. Essa é uma limitação conhecida rastreada no problema do GitHub nº 1024.

Resolução: Use uma tabela ou visualização como a origem da entidade. Siga a issue do GitHub para atualizações sobre a adição de suporte a procedimentos armazenados do MySQL.

A política de banco de dados não é imposta para operações de criação

Sintoma: Uma mutação de criação ou solicitação POST é bem-sucedida mesmo quando uma política de banco de dados deve restringir a operação.

Causa: O suporte à política de banco de dados para criar ações no MySQL ainda não foi implementado. Essa é uma limitação conhecida rastreada no problema do GitHub nº 1329.

Resolução: Use permissões baseadas em função para restringir o acesso de criação até que o suporte à política de banco de dados para MySQL Create esteja disponível.

A política de banco de dados não é imposta para operações PUT e PATCH

Sintoma: Uma solicitação PUT ou PATCH em uma entidade MySQL é bem-sucedida mesmo quando uma política de banco de dados deve restringi-la.

Causa: O suporte à política de banco de dados para operações PUT e PATCH no MySQL ainda não foi implementado. Essa é uma limitação conhecida rastreada no problema do GitHub nº 1371.

Resolução: Use permissões baseadas em função para restringir o acesso à atualização até que o suporte à política de banco de dados para operações de atualização do MySQL esteja disponível.

Não há suporte para autenticação On-Behalf-Of (OBO)

Sintoma: A configuração da autenticação on-Behalf-Of (OBO) para uma instância do DAB com suporte do MySQL falha ou o token não é encaminhado para o banco de dados conforme o esperado.

Causa: Atualmente, a autenticação OBO só tem suporte para SQL Server e SQL do Azure. O suporte para MySQL ainda não foi implementado. Essa é uma limitação conhecida rastreada no problema do GitHub nº 3159.

Resolução: Use um método de autenticação com suporte, como credenciais de cadeia de conexão para MySQL. Siga o tópico no GitHub para atualizações sobre quando o suporte a OBO será expandido para bancos de dados que não utilizam o SQL Server.