Problemas conhecidos com migrações para o banco de dados do Azure para MySQL
Os problemas conhecidos associados às migrações para o Banco de Dados do Azure para MySQL são descritos nas seçõ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 a versão do mecanismo 8.0.30 ou superior pode falhar quando o recurso para gerar chaves primárias invisíveis para tabelas InnoDB está habilitado (confira MySQL :: Manual de Referência do MySQL 8.0 :: 13.1.20.11 Chaves Primárias Invisíveis Geradas). 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 uma migração novamente ou ao migrar para um destino em que o esquema tenha sido migrado de forma manual.
Mensagem de erro potencial:
- "Erro desconhecido."
- "Falha ao gerar a 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 Servidor Flexível do MySQL, no qual sql_generate_invisible_primary_key está habilitado, não é compatível com o DMS.
Solução alternativa: Defina o parâmetro do servidor sql_generate_invisible_primary_key como OFF no Servidor Flexível MySQL de destino. O parâmetro do servidor pode ser encontrado no painel de parâmetros do servidor, na guia Todos, para o Servidor Flexível MySQL de destino. Além disso, solte o banco de dados de destino e inicie novamente a migração do DMS para não ter esquemas incompatíveis.
Modo SQL incompatível
Um ou mais modos SQL incompatíveis podem causar muitos erros diferentes. Abaixo está um exemplo de erro, juntamente com os modos do servidor que devem ser examinados, se esse erro ocorrer.
Error: 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, essa tabela não será migrada.
Limitação: esse erro ocorre quando um dos modos SQL abaixo está configurado em um servidor, mas não no outro.
Solução alternativa:
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 estiver com o modo SQL NO_ZERO_DATE ativado, a migração do esquema e/ou dos dados falhará. Há duas soluções alternativas possíveis. A primeira é alterar os valores padrão das colunas para NULO 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 estejam fazendo a migração de esquema de rotinas, ele encontrará erros se o modo SQL no_auto_create_user estiver definido no servidor de origem MySQL 5.7.
Problemas de retenção do binlog
Erro: Erro fatal ao ler o binlog. Esse erro pode indicar que o nome de arquivo binlog e/ou a posição inicial foram especificados incorretamente.
Limitação: Esse erro ocorre se o período de retenção do binlog for muito curto.
Solução alternativa: Existem 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 de binlogs pode ser totalmente evitada ao definir binlog_expire_logs_auto_purge como desativado. O MySQL 5.7 preteriu a variável do sistema expire_logs_days.
Tempo limite ao obter bloqueios de tabela
Erro: Ocorreu uma exceção ao tentar adquirir um bloqueio de leitura no servidor '{server}' para a criação de uma exibição consistente.
Limitação: esse erro ocorre quando há um tempo limite na obtenção de bloqueios em todas as tabelas quando a consistência transacional estiver habilitada.
Solução alternativa: Certifique-se de que as tabelas selecionadas não estejam bloqueadas ou de que não haja transações de execução prolongada sendo executadas nelas.
Gravação de 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: Esse erro provavelmente ocorre quando há muitas tabelas para migrar (>10 mil). Há um limite de 4 MB para cada chamada no 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 é frequentemente um sintoma de tempos limite, problemas de rede ou escalonamento do destino.
Mensagem de erro potencial: Um lote não pôde ser gravado 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: Esse erro pode ser causado por tempo limite ou conexão interrompida com o destino, resultando em chaves primárias duplicadas. Ele também pode estar relacionado a várias migrações para o destino em execução ao mesmo tempo, ou ao usuário que executa cargas de trabalho de teste no destino enquanto a migração está em execução. Além disso, o destino poderá exigir que as chaves primárias sejam exclusivas, mesmo que elas não precisem ser exclusivas na origem.
Solução alternativa: Para resolver esse problema, certifique-se de que não há migrações duplicadas em execução e que as chaves primárias da 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 apresentou um 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 no servidor de destino que foram lidos do log binário do servidor de origem. As alterações iniciaram 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 registros no servidor de origem antes da posição “{position}” no log binário “{mysql-bin.log}” foram confirmados no destino.
Limitação: Na origem, houve instruções de inserção e exclusão em uma tabela, e as exclusões foram feitas por um índice exclusivo aparente.
Solução alternativa: Recomendamos migrar a tabela manualmente.
Erro truncado de dados da tabela
Erro: A coluna Enumeração possui um valor nulo em uma ou mais linhas, e o modo SQL de destino está configurado 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 sejam muito grandes para o tipo de dados da coluna da tabela MySQL. Se o tipo de coluna for uma enumeração, verifique se o Modo SQL não está configurado como TRADITIONAL, STRICT_TRANS_TABLES ou STRICT_ALL_TABLES e que seja o mesmo na origem e no destino.
Limitação: o erro ocorre quando os dados históricos foram gravados no servidor de origem com determinadas configurações, mas, ao serem alterados, os dados não podem ser movidos.
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 valores válidos.
Falha na criação do objeto
Erro: Ocorreu um erro após a falha na validação da exibição.
Limitação: o erro ocorre ao tentar migrar uma visualização e a tabela à qual a visualização deveria estar fazendo referência não pode ser encontrada.
Solução alternativa: Recomendamos migrar as exibições manualmente.
Não é possível localizar a tabela
Erro: Ocorreu um erro, pois a tabela de referência não pôde ser encontrada.
Mensagem de erro potencial: O pipeline não conseguiu 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 a exibição estiver se referindo a uma tabela que foi excluída ou renomeada, ou quando a exibição foi criada 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 as exibições 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 em pool interrompidas
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 forem perdidas devido à reinicialização do servidor, problemas de rede, tráfego intenso no servidor de origem ou outros problemas transitórios. Esse erro não é recuperável. Além disso, esse erro ocorre se uma tentativa de migrar um servidor for 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 eliminam conexões de longa duração, o que impede que esses scripts funcionem.
Instantâneo consistente interrompido
Limitação: O erro ocorre quando o cliente executa a DDL durante a carga 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 da tabela.
Mensagem de erro potencial: A coluna de referência '{pk column 1}' e a coluna referenciada '{fk column 1}' na restrição de chave estrangeira '{key}' são incompatíveis.
Limitação: o erro pode causar falha na migração do esquema de uma tabela, 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 excluir a chave estrangeira e recriá-la após a conclusão do processo de migração.