Solucionar erros comumente encontrados durante ou após a migração para o Banco de Dados do Azure para MySQL - Servidor Flexível

APLICA-SE A:Banco de Dados do Azure para MySQL – Servidor Único Banco de Dados do Azure para MySQL – Servidor Flexível

Importante

O Banco de Dados do Azure para servidor único MySQL está no caminho de desativação. É altamente recomendável que você atualize para o Banco de Dados do Azure para o servidor flexível MySQL. Para obter mais informações sobre como migrar para o Banco de Dados do Azure para servidor flexível MySQL, consulte O que está acontecendo com o Banco de Dados do Azure para Servidor Único MySQL?

O servidor flexível do Banco de Dados do Azure para MySQL é um serviço totalmente gerenciado alimentado pela versão de comunidade do MySQL. A experiência do MySQL em um ambiente de serviço gerenciado pode ser diferente da execução do MySQL no próprio ambiente. Neste artigo, você verá alguns dos erros comuns que os usuários podem encontrar ao migrar ou desenvolver no Banco de Dados do Azure para o servidor flexível 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 de servidor como require_secure_transport esse não são suportados no nível da sessão e, portanto, tentar alterar os valores desses parâmetros usando init_connect pode resultar em Erro 1184 ao se conectar à instância de 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. Trying to reconnect... Connection id: 64897 Current database: *** NONE *** ERROR 1184 (08S01): Aborted connection 22 to db: 'db-name' user: 'user' host: 'hostIP' (init_connect command failed)

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ê poderá receber alguns erros comuns listados abaixo:

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

O erro acima pode ocorrer durante a criação de uma função ou um gatilho, conforme mostrado abaixo, ou durante a importação de 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, defina log_bin_trust_function_creators como 1 na folha Parâmetros do servidor no portal, 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 como o risco de segurança destacado na documentação da comunidade MySQL é mínimo no Banco de Dados do Azure para servidor flexível MySQL, pois o log de 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 durante a importação de um arquivo de despejo ou a criação de 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ê precisará ter (pelo menos um dos) privilégios SUPER ou SET_USER_ID para executar essa operação

O erro acima poderá ocorrer durante a execução de CREATE VIEW com instruções DEFINER como parte da importação de um arquivo de despejo ou da execução de um script. O Banco de Dados do Azure para servidor flexível MySQL não permite privilégios SUPER ou o privilégio 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 tendo permissões diferentes. Portanto, talvez isso não seja viável. OU
  • 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 de 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 de servidor flexível do Banco de Dados do Azure para MySQL é criada, uma entrada de administrador do servidor é 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 de administrador do servidor for excluída, suas permissões forem revogadas ou sua senha for alterada, você poderá começar a ver erros de conexões no aplicativo durante as conexões. A seguir estã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. Você pode executar a seguinte consulta fazendo logon no usuário do servidor flexível do Banco de Dados do Azure para MySQL:

    select user from mysql.user;
    
  • Se você não conseguir entrar na instância do servidor flexível do Banco de Dados do Azure para MySQL para executar a própria consulta acima, recomendamos que você redefina a senha de administrador usando o portal do Azure. A opção de redefinição de senha do portal do Azure ajudará a recriar o usuário, redefinir a senha e restaurar as permissões de administrador, o que permitirá que você entre usando o administrador do servidor e execute outras operações.

Próximas etapas

Se você não encontrou a resposta procurada, considere as seguintes opções: