Compartilhar via


Solução de erros frequentemente encontrados durante ou após a migração para o Banco de Dados do Azure para MySQL – Servidor Flexível

O Servidor Flexível do Banco de Dados do Azure para MySQL é um serviço totalmente gerenciado, ativado pela versão da comunidade do MySQL. A experiência com o MySQL em um ambiente de serviço gerenciado pode ser diferente da execução do MySQL em seu próprio ambiente. Neste artigo, você verá alguns dos erros comuns que os usuários podem encontrar ao migrar ou desenvolver no servidor flexível do Banco de Dados do Azure para MySQL pela primeira vez.

Erros de conexão comuns

ERRO 1184 (08S01): conexão 22 com db: 'db-name' usuário: 'user' host: 'hostIP' anulada (falha no comando init_connect)

O erro acima ocorre após a entrada bem-sucedida, mas antes da execução de qualquer comando quando a sessão é estabelecida. A mensagem acima indica que você definiu um valor incorreto do parâmetro de servidor init_connect, que está causando a falha na inicialização da sessão.

Há alguns parâmetros do servidor, como require_secure_transport, que não são compatíveis com o nível de sessão. Portanto, a tentativa de alterar os valores desses parâmetros usando init_connect poderá resultar no erro 1184 durante a conexão com a instância do Servidor Flexível do Banco de Dados do Azure para MySQL, conforme mostrado abaixo:

mysql> show databases; ERROR 2006 (HY000): MySQL server has gone away No connection. Tentando reconectar... ID da conexão: 64897 Banco de dados atual: ** NENHUM ** ERRO 1184 (08S01): a conexão 22 com o BD foi anulada: usuário "db-name": host "user": "hostIP" (falha no comando init_connect)

Resolução: redefina o valor de init_connect na guia Parâmetros do servidor no portal do Azure e definir apenas os parâmetros do servidor compatíveis usando o parâmetro init_connect.

Erros devido à ausência do privilégio SUPER e da função DBA

Não há suporte para o privilégio SUPER nem para a função DBA no serviço. Como resultado, você pode encontrar alguns erros comuns listados abaixo:

ERRO 1419: Você não tem o privilégio SUPER e o log binário está habilitado (talvez você queira usar a variável de log_bin_trust_function_creators menos segura)

O erro acima pode ocorrer ao criar uma função, gatilho conforme abaixo ou importar um esquema. As instruções DDL como CREATE FUNCTION ou CREATE TRIGGER são gravadas no log binário, de modo que a réplica secundária possa executá-las. O thread SQL de réplica tem privilégios completos, que pode ser explorado para elevar os privilégios. Para se proteger contra esse perigo nos servidores que têm o log binário habilitado, o mecanismo MySQL exige que os criadores de funções armazenadas tenham o privilégio SUPER, além do privilégio habitual CREATE ROUTINE.

CREATE FUNCTION f1(i INT)
RETURNS INT
DETERMINISTIC
READS SQL DATA
BEGIN
  RETURN i;
END;

Resolução: para resolver o erro, definido log_bin_trust_function_creators como 1, execute as instruções DDL ou importe o esquema para criar os objetos desejados. Você pode continuar mantendo o log_bin_trust_function_creators como 1 para o seu servidor para evitar o erro no futuro. Nossa recomendação é definir log_bin_trust_function_creators, pois o risco de segurança destacado na documentação da comunidade do MySQL é mínimo no Servidor Flexível do Banco de Dados do Azure para MySQL, já que o log do compartimento não está exposto a nenhuma ameaça.

ERRO 1227 (42000) na linha 101: acesso negado; você precisará ter (pelo menos um dos) privilégios SUPER para executar essa operação. Falha na operação com o código de saída 1

O erro acima pode ocorrer ao importar um arquivo de despejo ou ao criar um procedimento que contenha definidores.

Resolução: para resolver esse erro, o usuário administrador pode conceder privilégios de criação ou execução de procedimentos executando o comando GRANT, como nos exemplos a seguir.

GRANT CREATE ROUTINE ON mydb.* TO 'someuser'@'somehost';
GRANT EXECUTE ON PROCEDURE mydb.myproc TO 'someuser'@'somehost';

Como alternativa, você pode substituir os definidores pelo nome do usuário administrador que está executando o processo de importação, conforme mostrado abaixo.

DELIMITER;;
/*!50003 CREATE*/ /*!50017 DEFINER=`root`@`127.0.0.1`*/ /*!50003
DELIMITER;;

/* Modified to */

DELIMITER ;;
/*!50003 CREATE*/ /*!50017 DEFINER=`AdminUserName`@`ServerName`*/ /*!50003
DELIMITER ;

ERRO 1227 (42000) na linha 295: Acesso negado; você precisa (pelo menos um dos) privilégios super ou SET_USER_ID para esta operação

O erro acima pode ocorrer ao executar CREATE VIEW com instruções DEFINER como parte da importação de um arquivo de despejo ou ao executar um script. O Servidor Flexível do Banco de Dados do Azure para MySQL não permite privilégios SUPER ou SET_USER_ID para nenhum usuário.

Resolução:

  • use o usuário do definidor para executar CREATE VIEW, se possível. É provável que haja muitas exibições com diferentes definidores com diferentes permissões, portanto, isso pode não ser viável. OR
  • Edite o arquivo de despejo ou o script CREATE VIEW e remova a instrução DEFINER= do arquivo de despejo. OU
  • Edite o arquivo de despejo ou o script CREATE VIEW e substitua os valores do definidor pelo usuário com as permissões de administrador que está executando a importação ou execute o arquivo de script.

Dica

Use sed ou o PERL para modificar um arquivo de despejo ou um script SQL para substituir a instrução DEFINER=

ERRO 1227 (42000) na linha 18: acesso negado; você precisará ter (pelo menos um dos) privilégios SUPER para executar essa operação

O erro acima pode ocorrer se você estiver tentando importar o arquivo de despejo de uma instância do Servidor Flexível do Banco de Dados do Azure para MySQL com GTID habilitado para a instância de Servidor Flexível do Banco de Dados do Azure para MySQL de destino. Mysqldump adiciona a instrução SET @@SESSION.sql_log_bin=0 a um arquivo de despejo de um servidor em que os GTIDs estão em uso, o que desabilita o log binário enquanto o arquivo de despejo está sendo recarregado.

Resolução: para resolver esse erro durante a importação, remova ou comente as linhas abaixo no arquivo mysqldump e execute a importação novamente para garantir que ela seja bem-sucedida.

SET @MYSQLDUMP_TEMP_LOG_BIN = @@SESSION.SQL_LOG_BIN;
SET @@SESSION.SQL_LOG_BIN= 0; SET @@GLOBAL.GTID_PURGED=''; SET @@SESSION.SQL_LOG_BIN = @MYSQLDUMP_TEMP_LOG_BIN;

Erros comuns de conexão da entrada de administrador do servidor

Quando uma instância do Servidor Flexível do Banco de Dados do Azure para MySQL for criada, uma entrada de administrador do servidor será fornecida pelo usuário final durante a criação do servidor. A entrada de administrador do servidor permite que você crie bancos de dados, adicione novos usuários e conceda permissões. Se a entrada do administrador do servidor for excluído, suas permissões forem revogadas ou sua senha for alterada, você poderá começar a ver erros de conexão em seu aplicativo durante as conexões. Estes são alguns dos erros comuns.

ERRO 1045 (28000): Acesso negado para o usuário 'nome de usuário'@'endereço IP' (usando a senha: YES)

O erro acima ocorre se:

  • O nome de usuário não existe.
  • O nome de usuário foi excluído.
  • a senha foi alterada ou redefinida.

Resolução:

  • confirme se o "nome de usuário" existe como um usuário válido no servidor ou se ele foi excluído acidentalmente. Para executar a seguinte consulta, faça logon no usuário do Servidor Flexível do Banco de Dados do Azure para MySQL.

    select user from mysql.user;