Partilhar via


Problemas conhecidos com migrações para o Banco de Dados do Azure para MySQL

Problemas conhecidos associados a migrações para o Banco de Dados do Azure para MySQL são descritos nas secções a seguir.

Problema de migração de esquema para o destino do servidor flexível MySQL v8.0

  • Erro: Uma migração para um servidor flexível MySQL com motor versão 8.0.30 ou superior pode falhar quando o recurso para gerar chaves primárias invisíveis para tabelas InnoDB está ativado (consulte MySQL :: MySQL 8.0 Reference Manual :: 13.1.20.11 Generated Invisible Primary Keys). A falha pode ocorrer ao migrar o esquema de tabela da origem para o destino, ao aplicar alterações durante a fase de replicação de migrações online, ao tentar novamente uma migração ou ao migrar para um destino onde o esquema foi migrado manualmente.

    Mensagem de erro potencial:

    • "Erro desconhecido."
    • "Falha ao gerar chave primária invisível. A coluna de incremento automático já existe."
    • "A coluna 'my_row_id' na tabela de destino 'nome da tabela' no banco de dados 'banco de dados' não existe na tabela de origem."

    Limitação: A migração para a instância do MySQL Flexible Server onde o sql_generate_invisible_primary_key está ativado não é suportada pelo DMS.

    Solução alternativa: defina o sql_generate_invisible_primary_key do parâmetro do servidor para o MySQL Flexible Server de destino como OFF. O parâmetro server pode ser encontrado no painel Parâmetros do servidor na guia Todos para o MySQL Flexible Server de destino. Além disso, elimine a base de dados de destino e recomece a migração do DMS para que não haja esquemas incompatíveis.

Modo SQL incompatível

Um ou mais modos SQL incompatíveis podem causar muitos erros diferentes. A seguir está um exemplo de erro, juntamente com os modos de servidor que devem ser examinados se esse erro ocorrer.

  • Erro: Ocorreu um erro ao preparar a tabela '{table}' no banco de dados '{database}' no servidor '{server}' para migração durante a atividade '{activity}'. Como resultado, esta tabela não será migrada.

    Limitação: Este erro ocorre quando um dos seguintes modos SQL é definido em um servidor, mas não no outro servidor.

    Solução:

    • NO_ZERO_DATE

      Quando o valor padrão para uma data em uma tabela ou os dados é 0000-00-00 na origem e o servidor de destino tem o modo NO_ZERO_DATE SQL definido, o esquema e/ou a migração de dados falham. Há duas soluções possíveis. A primeira é alterar os valores padrão das colunas para NULL ou uma data válida. A segunda opção é remover o modo SQL NO_ZERO_DATE da variável de modo SQL global.

    • NO_AUTO_CREATE_USER

      Ao executar migrações do servidor de origem MySQL 5.7 para o servidor de destino MySQL 8.0 que estão fazendo a migração de esquema de rotinas, ele corre em erros se no_auto_create_user modo SQL estiver definido no servidor de origem MySQL 5.7.

Problemas de retenção do Binlog

  • Erro: Erro fatal ao ler binlog. Este erro pode indicar que o nome do arquivo binlog e/ou a posição inicial foram especificados incorretamente.

    Limitação: Este erro ocorre se o período de retenção do binlog for muito curto.

    Solução alternativa: Há várias variáveis que podem ser configuradas neste caso: binlog_expire_logs_seconds determina o período de retenção e a exclusão do binlog pode ser evitada completamente definindo binlog_expire_logs_auto_purge desativado. O MySQL 5.7 preteriu a variável de sistema expire_logs_days.

Tempo limite de obtenção de bloqueios de tabela

  • Erro: Ocorreu uma exceção ao tentar adquirir um bloqueio de leitura no servidor '{server}' para criação de exibição consistente.

    Limitação: Este erro ocorre quando há um tempo limite ao obter bloqueios em todas as tabelas quando a consistência transacional está ativada.

    Solução alternativa: verifique se as tabelas selecionadas não estão bloqueadas ou se não há transações de longa execução nelas.

Gravar mais de 4 MB de dados no Armazenamento do Azure

  • Erro: O corpo da solicitação é muito grande e excede o limite máximo permitido.

    Limitação: Este erro provavelmente ocorre quando há muitas tabelas para migrar (>10k). Há um limite de 4 MB para cada chamada para o serviço de Armazenamento do Azure.

    Solução alternativa: entre em contato com o suporte criando uma solicitação de suporte e podemos fornecer scripts personalizados para acessar nossas APIs REST diretamente.

Problema de entrada de chave duplicada

  • Erro: O erro geralmente é um sintoma de tempos limites, problemas de rede ou dimensionamento de destino.

    Mensagem de erro potencial: Não foi possível gravar um lote na tabela '{table}' devido a um erro SQL gerado pelo servidor de destino. Para contextualizar, o lote continha um subconjunto de linhas retornadas pela seguinte consulta de origem.

    Limitação: Este erro pode ser causado por tempo limite ou conexão quebrada com o destino, resultando em chaves primárias duplicadas. Também pode estar relacionado a várias migrações para o destino em execução ao mesmo tempo ou ao usuário com cargas de trabalho de teste em execução no destino enquanto a migração está em execução. Além disso, o destino pode exigir que as chaves primárias sejam exclusivas, mesmo que elas não sejam obrigadas a sê-lo na origem.

    Solução alternativa: para resolver esse problema, verifique se não há migrações duplicadas em execução e se as chaves primárias de origem são exclusivas. Se o erro persistir, entre em contato com o suporte criando uma solicitação de suporte e podemos fornecer scripts personalizados para acessar nossas APIs REST diretamente.

A operação replicada tinha erro de linhas incompatíveis

  • Erro: A migração online não consegue replicar o número esperado de alterações.

    Mensagem de erro potencial: Ocorreu um erro ao aplicar registros ao servidor de destino que foram lidos do log binário do servidor de origem. As alterações começaram no log binário '{mysql-bin.log}' e na posição '{position}' e terminaram no log binário '{mysql-bin.log}' e na posição '{position}'. Todos os registos no servidor de origem antes da posição '{position}' no log binário '{mysql-bin.log}' foram confirmados no destino.

    Limitação: Na fonte, havia instruções de inserção e exclusão em uma tabela, e as exclusões eram por um índice único aparente.

    Solução alternativa: recomendamos migrar a tabela manualmente.

Erro truncado de dados da tabela

  • Erro: A coluna Enum tem um valor nulo em uma ou mais linhas e o modo SQL de destino é definido como estrito.

    Mensagem de erro potencial: Um lote não pôde ser gravado na tabela '{table}' devido a um erro de truncamento de dados. Certifique-se de que os dados não são muito grandes para o tipo de dados da coluna da tabela MySQL. Se o tipo de coluna for um enum, verifique se o Modo SQL não está definido como TRADICIONAL, STRICT_TRANS_TABLES ou STRICT_ALL_TABLES e é o mesmo na origem e no destino.

    Limitação: O erro ocorre quando os dados históricos foram gravados no servidor de origem quando eles tinham determinada configuração, mas quando eles são alterados, os dados não podem se mover.

    Solução alternativa: Para resolver o problema, recomendamos alterar o modo SQL de destino para não estrito ou alterar todos os valores nulos para serem valores válidos.

Criar falha de objeto

  • Erro: Ocorreu um erro após a falha na validação da exibição.

    Limitação: O erro ocorre ao tentar migrar um modo de exibição e a tabela à qual o modo de exibição deveria estar referenciando não pode ser encontrada.

    Solução alternativa: recomendamos migrar modos de exibição manualmente.

Não é possível encontrar a tabela

  • Erro: Ocorreu um erro quando a tabela de referência não pôde ser encontrada.

    Mensagem de erro potencial: O pipeline não pôde criar o esquema do objeto '{object}' para a atividade '{activity}' usando a estratégia MySqlSchemaMigrationViewUsingTableStrategy devido a uma execução de consulta.

    Limitação: O erro pode ocorrer quando o modo de exibição está se referindo a uma tabela que foi excluída ou renomeada, ou quando o modo de exibição foi criado com informações incorretas ou incompletas. Esse erro pode acontecer se um subconjunto de tabelas for migrado, mas as tabelas das quais elas dependem não forem.

    Solução alternativa: recomendamos migrar modos de exibição manualmente. Verifique se todas as tabelas referenciadas em chaves estrangeiras e instruções CREATE VIEW estão selecionadas para migração.

Todas as conexões agrupadas quebradas

  • Erro: Todas as conexões no servidor de origem foram interrompidas.

    Limitação: O erro ocorre quando todas as conexões adquiridas no início da carga inicial são perdidas devido à reinicialização do servidor, problemas de rede, tráfego pesado no servidor de origem ou outros problemas transitórios. Este erro não é recuperável. Além disso, este erro ocorre se uma tentativa de migrar um servidor é feita durante a janela de manutenção.

    Solução alternativa: a migração deve ser reiniciada e recomendamos aumentar o desempenho do servidor de origem. Outro problema são os scripts que matam conexões de longa duração, impedindo que esses scripts funcionem.

Snapshot consistente quebrado

Limitação: O erro ocorre quando o cliente executa DDL durante o carregamento inicial da instância de migração.

Solução alternativa: Para resolver esse problema, recomendamos evitar fazer alterações DDL durante a carga inicial.

Restrição de chave estrangeira

  • Erro: O erro ocorre quando há uma alteração no tipo de chave estrangeira referenciada na tabela.

    Mensagem de erro potencial: A referência à coluna '{pk column 1}' e à coluna referenciada '{fk column 1}' na restrição de chave estrangeira '{key}' são incompatíveis.

    Limitação: O erro pode fazer com que a migração de esquema de uma tabela falhe, pois a coluna PK na tabela 1 pode não ser compatível com a coluna FK na tabela 2.

    Solução alternativa: para resolver esse problema, recomendamos descartar a chave estrangeira e recriá-la após a conclusão do processo de migração.