Solucionar erros comumente encontrados durante ou após a migração para o Banco de Dados do Azure para MySQL - Servidor Flexível
O Banco de Dados do Azure para MySQL Flexible Server é um serviço totalmente gerenciado alimentado pela versão comunitária do MySQL. A experiência do 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 Banco de Dados do Azure para o Servidor Flexível MySQL pela primeira vez.
Erros comuns de conexão
ERRO 1184 (08S01): Conexão abortada 22 para db: usuário 'db-name': host 'user': 'hostIP' (comando init_connect falhou)
O erro acima ocorre após a entrada bem-sucedida, mas antes de executar qualquer comando quando a sessão é estabelecida. A mensagem acima indica que você definiu um valor incorreto do parâmetro server, o que está fazendo com que a inicialização da init_connect
sessão falhe.
Há alguns parâmetros de servidor como require_secure_transport
esses que 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 no Erro 1184 ao se conectar à instância do Servidor Flexível do Banco de Dados do Azure para MySQL, conforme mostrado abaixo:
mysql> mostrar bancos de dados; ERRO 2006 (HY000): O servidor MySQL desapareceu Sem conexão. Tentando se reconectar... ID de conexão: 64897 Base de dados atual: ** NONE ** ERRO 1184 (08S01): Ligação abortada 22 a db: 'db-name' utilizador: 'utilizador' anfitrião: 'hostIP' (init_connect comando falhou)
Resolução: redefina init_connect
o valor na guia Parâmetros do servidor no portal do Azure e defina apenas os parâmetros do servidor com suporte usando init_connect parâmetro.
Erros devido à falta de privilégio SUPER e função DBA
O privilégio SUPER e a função DBA não são suportados 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 log_bin_trust_function_creators menos segura)
O erro acima pode ocorrer durante a criação de uma função, gatilho como abaixo ou importação de um esquema. As instruções DDL como CREATE FUNCTION ou CREATE TRIGGER são gravadas no log binário, para que a réplica secundária possa executá-las. O thread SQL de réplica tem privilégios completos, que podem ser explorados para elevar os privilégios. Para se proteger contra esse perigo para servidores que têm o log binário habilitado, o mecanismo MySQL requer que os criadores de funções armazenadas tenham o privilégio SUPER, além do habitual privilégio 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, execute as instruções DDL ou importe o esquema para criar os objetos desejados. Você pode continuar a manter log_bin_trust_function_creators
para 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 do MySQL é mínimo no Banco de Dados do Azure para o Servidor Flexível MySQL, pois o bin log não está exposto a nenhuma ameaça.
ERRO 1227 (42000) na linha 101: Acesso negado; você precisa (pelo menos um dos) privilégio(s) SUPER para esta 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 criar um procedimento que contém definers.
Resolução: para resolver esse erro, o usuário administrador pode conceder privilégios para criar ou executar 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 definers 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 instruções CREATE VIEW com 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 a nenhum usuário.
Resolução:
- Use o usuário definer para executar CREATE VIEW, se possível. É provável que existam muitas visualizações com diferentes definidores com permissões diferentes, então isso pode não ser 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 definer por usuário com permissões de administrador que está executando a importação ou executar o arquivo de script.
Gorjeta
Use sed ou perl para modificar um arquivo de despejo ou script SQL para substituir a instrução DEFINER=
ERRO 1227 (42000) na linha 18: Acesso negado; você precisa (pelo menos um dos) privilégio(s) SUPER para esta operação
O erro acima pode ocorrer se você estiver tentando importar o arquivo de despejo de uma instância do Banco de Dados do Azure para Servidor Flexível MySQL com GTID habilitado para a instância de destino do Banco de Dados do Azure para Servidor Flexível MySQL. Mysqldump adiciona a instrução SET @@SESSION.sql_log_bin=0 a um arquivo de despejo de um servidor onde 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 em seu arquivo mysqldump e execute a importação novamente para garantir que seja bem-sucedida.
SET @MYSQLDUMP_TEMP_LOG_BIN = @@SESSION. SQL_LOG_BIN;
DEFINIR @@SESSION. SQL_LOG_BIN= 0; DEFINIR @@GLOBAL. GTID_PURGED=''; DEFINIR @@SESSION. SQL_LOG_BIN = @MYSQLDUMP_TEMP_LOG_BIN;
Erros comuns de conexão para entrada do administrador do servidor
Quando uma instância do Banco de Dados do Azure para Servidor Flexível MySQL é criada, uma entrada de administrador do servidor é fornecida pelo usuário final durante a criação do servidor. O início de sessão do administrador do servidor permite-lhe criar novas bases de dados, adicionar novos utilizadores e conceder permissões. Se o login 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ões em seu aplicativo durante as conexões. A seguir estão alguns dos erros comuns.
ERRO 1045 (28000): Acesso negado para o usuário 'username'@'IP address' (usando senha: YES)
O erro acima ocorre se:
- O nome de usuário não existe.
- O nome de usuário do usuário foi excluído.
- sua senha é alterada ou redefinida.
Resolução:
Valide se "username" existe como um usuário válido no servidor ou se foi excluído acidentalmente. Você pode executar a seguinte consulta fazendo logon no Banco de Dados do Azure para o usuário do Servidor Flexível MySQL:
select user from mysql.user;