

# Realizar a atualização da versão principal de um cluster de bancos de dados do Amazon Aurora MySQL
<a name="AuroraMySQL.Updates.MajorVersionUpgrade"></a><a name="mvu"></a>

Em um número de versão do Aurora MySQL, como 3.04.1, o 3 representa a versão principal. O Aurora MySQL versão 2 é compatível com o MySQL 5.7. O Aurora MySQL versão 3 é compatível com o MySQL 8.0.

A atualização entre versões principais requer planejamento e teste mais extensos do que para uma versão secundária. O processo pode levar um tempo relevante. Após a conclusão da atualização, também pode ser necessário fazer um trabalho de acompanhamento. Por exemplo, isso pode ocorrer devido a diferenças na compatibilidade de SQL ou da forma que determinados recursos relacionados ao MySQL funcionam. Ou isso pode ocorrer devido às diferentes configurações de parâmetros entre as versões antiga e nova.

**Contents**
+ [Atualizar o Aurora MySQL versão 2 para a versão 3](#AuroraMySQL.Updates.MajorVersionUpgrade.2to3)
+ [Processo de atualização da versão principal de Aurora MySQL](#AuroraMySQL.Upgrading.Compatibility)
+ [Como funciona a atualização da versão principal no local Aurora MySQL](#AuroraMySQL.Upgrading.Sequence)
+ [Planejando uma atualização de versão principal para um cluster de Aurora MySQL](#AuroraMySQL.Upgrading.Planning)
  + [Simular a atualização clonando o cluster de banco de dados](#AuroraMySQL.Upgrading.Planning.clone)
  + [Implantações azul/verde](#AuroraMySQL.UpgradingMajor.BlueGreen)
+ [Verificações prévias de atualização da versão principal do Aurora MySQL](AuroraMySQL.upgrade-prechecks.md)
  + [Processo de pré-verificação do Aurora MySQL](AuroraMySQL.upgrade-prechecks.md#AuroraMySQL.upgrade-prechecks.process)
  + [Formato de log da pré-verificação do Aurora MySQL](AuroraMySQL.upgrade-prechecks.md#AuroraMySQL.upgrade-prechecks.log-format)
  + [Exemplos de saída do log da pré-verificação do Aurora MySQL](AuroraMySQL.upgrade-prechecks.md#AuroraMySQL.upgrade-prechecks.log-examples)
  + [Desempenho da pré-verificação do Aurora MySQL](AuroraMySQL.upgrade-prechecks.md#AuroraMySQL.upgrade-prechecks.performance)
  + [Resumo das pré-verificações de atualização do MySQL Community](AuroraMySQL.upgrade-prechecks.md#AuroraMySQL.upgrade-prechecks.community)
  + [Resumo das pré-verificações de atualização do Aurora MySQL](AuroraMySQL.upgrade-prechecks.md#AuroraMySQL.upgrade-prechecks.ams)
  + [Referência de descrições da pré-verificação do Aurora MySQL](AuroraMySQL.upgrade-prechecks.descriptions.md)
    + [Erros](AuroraMySQL.upgrade-prechecks.descriptions.md#precheck-descriptions-errors)
      + [Pré-verificações do MySQL que relatam erros](AuroraMySQL.upgrade-prechecks.descriptions.md#precheck-descriptions-errors.mysql)
      + [Pré-verificações do Aurora MySQL que relatam erros](AuroraMySQL.upgrade-prechecks.descriptions.md#precheck-descriptions-errors.aurora)
    + [Avisos](AuroraMySQL.upgrade-prechecks.descriptions.md#precheck-descriptions-warnings)
      + [Pré-verificações do MySQL que exibem avisos](AuroraMySQL.upgrade-prechecks.descriptions.md#precheck-descriptions-warnings.mysql)
      + [Pré-verificações do Aurora MySQL que exibem avisos](AuroraMySQL.upgrade-prechecks.descriptions.md#precheck-descriptions-warnings.aurora)
    + [Avisos](AuroraMySQL.upgrade-prechecks.descriptions.md#precheck-descriptions-notices)
    + [Erros, avisos ou alertas](AuroraMySQL.upgrade-prechecks.descriptions.md#precheck-descriptions-all)
+ [Como realizar uma atualização local](AuroraMySQL.Upgrading.Procedure.md)
  + [Como as atualizações locais afetam os grupos de parâmetros de um cluster](AuroraMySQL.Upgrading.Procedure.md#AuroraMySQL.Upgrading.ParamGroups)
  + [Alterações nas propriedades do cluster entre as versões do Aurora MySQL](AuroraMySQL.Upgrading.Procedure.md#AuroraMySQL.Upgrading.Attrs)
  + [Principais atualizações no local para bancos de dados globais](AuroraMySQL.Upgrading.Procedure.md#AuroraMySQL.Upgrading.GlobalDB)
  + [Considerações sobre retrocesso](AuroraMySQL.Upgrading.Procedure.md#AuroraMySQL.Upgrading.Backtrack)
+ [Tutorial de atualização no local de Aurora MySQL](AuroraMySQL.Upgrading.Tutorial.md)
+ [Descobrir os motivos das falhas de atualização da versão principal do Aurora MySQL](AuroraMySQL.Upgrading.failure-events.md)
+ [Solução de problemas para atualização no local de Aurora MySQL](AuroraMySQL.Upgrading.Troubleshooting.md)
+ [Limpeza pós-upgrade do Aurora MySQL versão 3](AuroraMySQL.mysql80-post-upgrade.md)
  + [Índices espaciais](AuroraMySQL.mysql80-post-upgrade.md#AuroraMySQL.mysql80-spatial)

## Atualizar o Aurora MySQL versão 2 para a versão 3
<a name="AuroraMySQL.Updates.MajorVersionUpgrade.2to3"></a>

Se você tiver um cluster compatível com o MySQL 5.7 e quiser atualizá-lo para um cluster compatível com o MySQL 8.0, você poderá realizar um processo de atualização no próprio cluster. Esse tipo de atualização é uma *atualização in-loco*, em comparação com as atualizações que você faz criando um novo cluster. Esta técnica mantém o mesmo endpoint e outras características do cluster. A atualização é relativamente rápida porque não requer a cópia de todos os seus dados para um novo volume de cluster. Essa estabilidade ajuda a minimizar quaisquer alterações de configuração em seus aplicativos. Ele também ajuda a reduzir a quantidade de testes para o cluster atualizado. Isso ocorre porque o número de instâncias de banco de dados e suas classes de instância permanecem iguais.

O mecanismo de atualização no local envolve encerrar o cluster de banco de dados enquanto a operação é realizada. O Aurora executa um desligamento limpo e conclui as operações pendentes, como reverter transação e desfazer limpeza. Para ter mais informações, consulte [Como funciona a atualização da versão principal no local Aurora MySQL](#AuroraMySQL.Upgrading.Sequence).

O método de atualização no local é conveniente, porque é simples de executar e minimiza as alterações de configuração para aplicações associadas. Por exemplo, uma atualização no local preserva os endpoints e o conjunto de instâncias de banco de dados para o cluster. No entanto, o tempo necessário para uma atualização local pode variar dependendo das propriedades do esquema e a ocupação do cluster. Portanto, dependendo das necessidades do cluster, é possível escolher entre as técnicas de atualização:
+ [Atualização no local](AuroraMySQL.Upgrading.Procedure.md)
+ [Implantação azul/verde](#AuroraMySQL.UpgradingMajor.BlueGreen)
+ [Restauração por snapshot](aurora-restore-snapshot.md)
**nota**  
Se você usar a AWS CLI ou a API do RDS para o método de atualização de restauração de snapshot, deverá executar uma operação subsequente para criar uma instância de banco de dados do gravador no cluster de banco de dados restaurado.

Para obter informações gerais sobre o Aurora MySQL versão 3 e os novos recursos, consulte [Aurora MySQL versão 3 compatível com o MySQL 8.0](AuroraMySQL.MySQL80.md).

Para obter detalhes sobre o planejamento de uma atualização, consulte [Planejando uma atualização de versão principal para um cluster de Aurora MySQL](#AuroraMySQL.Upgrading.Planning) e [Como realizar uma atualização local](AuroraMySQL.Upgrading.Procedure.md).

## Processo de atualização da versão principal de Aurora MySQL
<a name="AuroraMySQL.Upgrading.Compatibility"></a>

Nem todos os tipos ou versões de clusters do Aurora MySQL podem usar o mecanismo de atualização local. Você pode aprender o caminho de atualização apropriado para cada cluster de Aurora MySQL com base na tabela a seguir.


|  Tipo de cluster de banco de dados de Aurora MySQL  | Pode usar a atualização no local?  |  Ação  | 
| --- | --- | --- | 
|   Cluster provisionado do Aurora MySQL, versão 2  |  Sim  |  A atualização no local é compatível com clusters do Aurora MySQL compatíveis com o MySQL 5.7. Para obter informações sobre o upgrade para o Aurora MySQL versão 3, consulte [Planejando uma atualização de versão principal para um cluster de Aurora MySQL](#AuroraMySQL.Upgrading.Planning) e [Como realizar uma atualização local](AuroraMySQL.Upgrading.Procedure.md).  | 
|   Cluster provisionado do Aurora MySQL, versão 3  |  Não aplicável  |  Use um procedimento de atualização de versão secundária para atualizar entre as versões 3 do Aurora MySQL.  | 
|  Aurora Serverless v1Cluster do   |  Não aplicável  |  O Aurora Serverless v1 só é compatível com o Aurora MySQL na versão 2.  | 
|  Aurora Serverless v2Cluster do   |  Não aplicável  | O Aurora Serverless v2 só é compatível com o Aurora MySQL na versão 3. | 
|  Cluster em um banco de dados Aurora global  |  Sim  |  Para fazer upgrade do Aurora MySQL versão 2 para a versão 3, siga o [procedimento para fazer um upgrade no local](AuroraMySQL.Upgrading.Procedure.md) para clusters em um banco de dados Aurora global. Execute o upgrade no cluster global. O Aurora atualiza automaticamente todos os clusters secundários no banco de dados global ao mesmo tempo. Se você usar AWS CLI ou a API do RDS, chame o comando `modify-global-cluster` ou a operação `ModifyGlobalCluster` em vez de `modify-db-cluster` ou `ModifyDBCluster`. Será possível realizar um upgrade no local do Aurora MySQL versão 2 para a versão 3 somente se o parâmetro `lower_case_table_names` estiver definido como padrão e você reinicializar o banco de dados global. Para obter mais informações, consulte [Atualizações de versão principal](aurora-global-database-upgrade.md#aurora-global-database-upgrade.major).  | 
|  Cluster de consulta paralela  |  Sim  |  Você pode executar um upgrade no local.  | 
|  Cluster que é o destino da replicação de log binário  |  Talvez  |  Se a replicação de log binário for de um cluster do Aurora MySQL, você poderá executar um upgrade no local. Você não poderá executar o upgrade se a replicação de log binário for de uma instância de banco de dados do RDS para MySQL ou de uma instância de banco de dados MySQL on-premises. Nesse caso, você pode atualizar usando o mecanismo de recuperação de snapshot.  | 
|  Cluster com zero instâncias de banco de dados  |  Não  |  Com a AWS CLI ou a API do RDS, você pode criar um cluster de Aurora MySQL sem nenhuma instância de banco de dados anexa. Da mesma forma, você também pode remover todas as instâncias de banco de dados de um cluster do Aurora MySQL, deixando os dados no volume do cluster intactos. Embora um cluster tenha zero instâncias de banco de dados, você não pode executar uma atualização no local. O mecanismo de atualização requer uma instância de gravador no cluster para realizar conversões nas tabelas do sistema, arquivos de dados e assim por diante. Nesse caso, use a AWS CLI ou a API do RDS para criar uma instância de gravador para o cluster. Em seguida, você pode executar uma atualização no local.  | 
|  Cluster com retrocesso habilitado  |  Sim  |  É possível executar uma atualização no local para um cluster do Aurora MySQL que usa o recurso de retrocesso. No entanto, após a atualização, você não pode retroceder o cluster para um momento anterior à atualização.  | 

## Como funciona a atualização da versão principal no local Aurora MySQL
<a name="AuroraMySQL.Upgrading.Sequence"></a>

 Aurora MySQL executa uma atualização de versão principal como um processo de vários estágios. Você pode verificar o status atual de uma atualização. Algumas das etapas de atualização também fornecem informações sobre o progresso. Conforme cada etapa começa, Aurora MySQL registra um evento. Você pode analisar eventos conforme ocorrem na página **Events (Eventos)** no console do RDS. Para ter mais informações sobre como trabalhar com eventos, consulte [Trabalhar com a notificação de eventos do Amazon RDS](USER_Events.md). 

**Importante**  
 Uma vez que o processo começa, é executado até que a atualização seja bem-sucedida ou ocorra uma falha. Você não pode cancelar a atualização enquanto está em andamento. Se houver falha na atualização, Aurora retorna todas as alterações e seu cluster tem a mesma versão do mecanismo, metadados e outros como anteriormente. 

 O processo de atualização consiste em três etapas: 

1.  O Aurora realiza uma série de [verificações prévias](AuroraMySQL.upgrade-prechecks.md) antes de iniciar o processo de atualização. Seu cluster continua em execução enquanto Aurora faz essas verificações. Por exemplo, o cluster não pode ter nenhuma transação XA no estado preparado ou estar processando qualquer instrução DDL (Data Definition Language, linguagem de definição de dados). Por exemplo, você pode precisar desligar aplicativos que estão enviando alguns tipos de instruções SQL. Ou você pode simplesmente esperar até que algumas instruções de longa duração sejam concluídas. Em seguida, tente a atualização novamente. Algumas verificações testam condições que não impedem a atualização, mas podem fazer a atualização demorar muito tempo. 

    Se Aurora detectar que quaisquer condições necessárias não foram atendidas, altere as condições identificadas nos detalhes do evento. Siga as orientações em [Solução de problemas para atualização no local de Aurora MySQL](AuroraMySQL.Upgrading.Troubleshooting.md). Se Aurora detectar condições que podem causar uma atualização lenta, planeje monitorar a atualização durante um período prolongado. 

1.  Aurora torna o cluster offline. Em seguida, Aurora executa um conjunto semelhante de testes como no estágio anterior, para confirmar que não surgiram novos problemas durante o processo de desligamento. Se nesse momento o Aurora detectar condições que impediriam o upgrade, o Aurora cancelará o upgrade e colocará o cluster de volta online. Neste caso, confirme quando as condições já não se aplicam e comece a atualização novamente. 

1.  Aurora cria um snapshot do volume do cluster. Suponha que você descubra compatibilidade ou outros tipos de problemas após a conclusão da atualização. Ou suponha que você deseja realizar testes usando os clusters original e atualizado. Nesses casos, você pode restaurar a partir deste snapshot para criar um novo cluster com a versão original do mecanismo e os dados originais. 
**dica**  
Este snapshot é um snapshot manual. No entanto, Aurora pode criar e continuar com o processo de atualização, mesmo que você tenha atingido sua cota para snapshots manuais. Este snapshot permanece estável (se necessário) até que você o exclua. Depois de concluir todos os testes após a atualização, você pode excluir esse snapshot para minimizar as cobranças de armazenamento.

1.  Aurora clona o volume do cluster. A clonagem é uma operação rápida que não envolve copiar os dados reais da tabela. Se Aurora encontrar um problema durante a atualização, retornará para os dados originais do volume de cluster clonado e coloca o cluster novamente online. O volume clonado temporário durante a atualização não está sujeito ao limite usual do número de clones para um único volume de cluster. 

1.  Aurora executa um desligamento limpo para a instância de banco de dados do gravador. Durante o desligamento limpo, os eventos de progresso são registrados a cada 15 minutos para as seguintes operações. Você pode analisar eventos conforme ocorrem na página **Events (Eventos)** no console do RDS. 
   +  Aurora limpa os registros de desfazer para versões antigas de linhas. 
   +  Aurora reverte quaisquer transações não confirmadas. 

1.  Aurora atualiza a versão do mecanismo na instância de banco de dados do gravador: 
   +  Aurora instala o binário para a nova versão do mecanismo na instância de banco de dados do gravador. 
   +  Aurora usa a instância de banco de dados do gravador para atualizar seus dados para o formato compatível com o MySQL 5.7. Durante esse estágio, Aurora modifica as tabelas do sistema e executa outras conversões que afetam os dados no volume do cluster. Em particular, Aurora atualiza os metadados de partição nas tabelas do sistema para serem compatíveis com o formato de partição MySQL 5.7. Esse estágio pode levar muito tempo se as tabelas em seu cluster tiverem muitas partições. 

      Se algum erro ocorrer durante este estágio, você pode encontrar os detalhes nos logs de erros do MySQL. Depois de iniciar esse estágio, se o processo de atualização falhar por qualquer motivo, Aurora restaura os dados originais do volume de cluster clonado. 

1.  Aurora atualiza a versão do mecanismo nas instâncias de banco de dados do leitor. 

1.  O processo de atualização está concluído. O Aurora registra um evento final para indicar que o processo de atualização foi concluído corretamente. Agora seu cluster de banco de dados está executando a nova versão principal. 

## Planejando uma atualização de versão principal para um cluster de Aurora MySQL
<a name="AuroraMySQL.Upgrading.Planning"></a>

Para ajudar você a decidir o momento certo e a abordagem apropriada para atualização, conheça as diferenças entre o Aurora MySQL versão 3 e o ambiente atual:
+ Se estiver convertendo do RDS para o MySQL 8.0 ou do MySQL 8.0 Community Edition, consulte [Comparar o Aurora MySQL versão 3 e o MySQL 8.0 Community Edition](AuroraMySQL.Compare-80-v3.md).
+ Se estiver realizando a atualização do Aurora MySQL versão 2, do RDS para MySQL 5.7 ou do MySQL Community Edition 5.7, consulte [Comparar o Aurora MySQL versão 2 e o Aurora MySQL versão 3](AuroraMySQL.Compare-v2-v3.md). 
+ Crie novas versões compatíveis com o MySQL 8.0 de qualquer grupo de parâmetros personalizado. Aplique todos os valores de parâmetros personalizados necessários aos novos grupos de parâmetros. Consulte [Alterações de parâmetros do Aurora MySQL versão 3](AuroraMySQL.Compare-v2-v3.md#AuroraMySQL.mysql80-parameter-changes) para saber mais sobre as alterações nos parâmetros.
+ Analise o esquema de banco de dados e as definições de objetos do Aurora MySQL versão 2 para saber sobre o uso das novas palavras-chave reservadas introduzidas no MySQL 8.0 Community Edition. Faça isso antes de fazer a atualização. Para obter mais informações, consulte [Novas palavras-chave e palavras reservadas no MySQL 8.0](https://dev.mysql.com/doc/mysqld-version-reference/en/keywords-8-0.html#keywords-new-in-8-0) na documentação do MySQL.

Você também pode encontrar mais dicas e considerações de upgrade específicas do MySQL em [Alterações no MySQL 8.0](https://dev.mysql.com/doc/refman/8.0/en/upgrading-from-previous-series.html), no *Guia de referência do MySQL*. Por exemplo, você pode utilizar o comando `mysqlcheck --check-upgrade` para analisar seus bancos de dados existentes do Aurora MySQL e identificar possíveis problemas de upgrade.

**nota**  
Recomendamos o uso de classes maiores de instâncias de banco de dados ao atualizar para o Aurora MySQL versão 3 utilizando a atualização no local ou a técnica de restauração de snapshot. Os exemplos são db.r5.24xlarge e db.r6g.16xlarge. Isso ajuda o processo de atualização a ser concluído mais rapidamente usando a maior parte da capacidade de CPU disponível na instância de banco de dados. Você pode mudar para a classe da instância de banco de dados que deseja após a conclusão da atualização da versão principal.

Depois de concluir a atualização em si, você pode seguir os procedimentos pós-upgrade no [Limpeza pós-upgrade do Aurora MySQL versão 3](AuroraMySQL.mysql80-post-upgrade.md). Por fim, teste a funcionalidade e a performance da aplicação. 

Se você estiver convertendo do RDS do MySQL ou MySQL Community Edition, siga o procedimento de migração explicado em [Migrar dados para um cluster de banco de dados do Amazon Aurora MySQL](AuroraMySQL.Migrating.md). Em alguns casos, é possível utilizar a replicação de logs binários para sincronizar seus dados com um cluster do Aurora MySQL versão 3 como parte da migração. Nesse caso, o sistema de origem deve executar uma versão compatível com o cluster de banco de dados de destino.

Para garantir que suas aplicações e procedimentos administrativos funcionem sem problemas após a atualização de um cluster entre versões principais, faça um planejamento e preparação antecipados. Para visualizar os tipos de código de gerenciamento para atualizar seus scripts da AWS CLI ou aplicações com base na API do RDS, consulte [Como as atualizações locais afetam os grupos de parâmetros de um cluster](AuroraMySQL.Upgrading.Procedure.md#AuroraMySQL.Upgrading.ParamGroups). Consulte também [Alterações nas propriedades do cluster entre as versões do Aurora MySQL](AuroraMySQL.Upgrading.Procedure.md#AuroraMySQL.Upgrading.Attrs).

Para conhecer os problemas que você pode encontrar durante a atualização, consulte [Solução de problemas para atualização no local de Aurora MySQL](AuroraMySQL.Upgrading.Troubleshooting.md). Para problemas que levem mais tempo para atualização, você pode testar essas condições com antecedência e corrigi-las.

**nota**  
A atualização no local requer que o cluster de banco de dados fique desligado enquanto a operação é realizada. O Aurora MySQL executa um encerramento limpo e conclui as operações pendentes, como uma limpeza do tipo desfazer. Uma atualização poderá levar muito tempo se houver necessidade de limpar muitos registros de desfazer. Recomendamos realizar a atualização somente após a redução do tamanho da lista de histórico (HLL). Um valor geralmente aceitável para o HLL é 100 mil ou menos. Veja este [post de blog](https://aws.amazon.com/blogs/database/amazon-aurora-mysql-version-2-with-mysql-5-7-compatibility-to-version-3-with-mysql-8-0-compatibility-upgrade-checklist-part-2) para obter mais informações.

### Simular a atualização clonando o cluster de banco de dados
<a name="AuroraMySQL.Upgrading.Planning.clone"></a>

Você pode conferir a compatibilidade da aplicação, a performance, procedimentos de manutenção e considerações semelhantes para o cluster atualizado. Para fazer isso, você pode realizar uma simulação da atualização antes do procedimento real. Esta técnica pode ser especialmente útil para clusters de produção. Aqui, é importante minimizar o tempo de inatividade e ter o cluster atualizado pronto para funcionar assim que a atualização for concluída.

Use as seguintes etapas:

1. Crie um clone do cluster original. Siga o procedimento em [Clonar um volume para um cluster de banco de dados do Amazon Aurora](Aurora.Managing.Clone.md).

1. Configure um conjunto semelhante de instâncias de banco de dados de gravador e leitor como no cluster original.

1. Execute uma atualização no local do cluster clonado. Siga o procedimento em [Como realizar uma atualização local](AuroraMySQL.Upgrading.Procedure.md).

   Inicie a atualização imediatamente após criar o clone. Dessa forma, o volume do cluster ainda é idêntico ao estado do cluster original. Se o clone ficar ocioso antes de fazer a atualização, Aurora executa processos de limpeza do banco de dados em segundo plano. Nesse caso, a atualização do clone não é uma simulação precisa de atualizar o cluster original.

1. Teste a compatibilidade de aplicações, performance, procedimentos de administração e assim por diante usando o cluster clonado.

1. Se você encontrar algum problema, ajuste seus planos de atualização para contabilizá-los. Por exemplo, adapte qualquer código de aplicação para ser compatível com o conjunto de recursos da versão posterior. Faça uma estimativa da atualização que provavelmente demorará com base na quantidade de dados no cluster. Você também pode optar por agendar a atualização para um momento em que o cluster não está ocupado.

1. Quando suas aplicações e workloads funcionarem corretamente com o cluster de teste, você poderá realizar a atualização no local para o cluster de produção.

1. Trabalhe para minimizar o tempo de inatividade total do cluster durante uma atualização de versão principal. Para fazer isso, a workload no cluster deve ser baixa ou zero no momento da atualização. Em particular, certifique-se de que não há transações de longa duração em andamento quando iniciar a atualização.

### Implantações azul/verde
<a name="AuroraMySQL.UpgradingMajor.BlueGreen"></a>

Em algumas situações, a prioridade é executar um switchover imediato do cluster antigo para um atualizado. Nessas situações, você pode seguir um processo de várias etapas que executa clusters antigos e novos lado a lado. Nesse caso, você replica dados do cluster antigo para o novo até que esteja pronto para que o novo cluster assuma o controle. Para obter mais detalhes, consulte [Usar implantações azul/verde do Amazon Aurora para atualizações de banco de dados](blue-green-deployments.md).

# Verificações prévias de atualização da versão principal do Aurora MySQL
<a name="AuroraMySQL.upgrade-prechecks"></a>

A atualização do MySQL de uma versão principal para outra, como passar do MySQL 5.7 para o MySQL 8.0, envolve algumas mudanças de arquitetura significativas que exigem planejamento e preparação cuidadosos. Ao contrário de atualizações de versões secundárias, nos quais o foco está principalmente na atualização do software do mecanismo de banco de dados e, em alguns casos, das tabelas do sistema, as atualizações do MySQL principal geralmente introduzem mudanças fundamentais na forma como o banco de dados armazena e gerencia os metadados.

Para ajudar você a identificar essas incompatibilidades, ao atualizar o Aurora MySQL versão 2 para a versão 3, o Aurora executa automaticamente verificações de compatibilidade de atualização (pré-verificações) para examinar objetos no cluster de banco de dados e identificar incompatibilidades conhecidas que podem impedir que a atualização continue. Consulte detalhes sobre as pré-verificações do Aurora MySQL em [Referência de descrições da pré-verificação do Aurora MySQL](AuroraMySQL.upgrade-prechecks.descriptions.md). As pré-verificações do Aurora são executadas complementarmente àquelas executadas pelo [utilitário de verificação de atualização](https://dev.mysql.com/doc/mysql-shell/8.0/en/mysql-shell-utilities-upgrade.html) do MySQL Community.

Essas pré-verificações são obrigatórias. Você não pode optar por ignorá-las. As pré-verificações oferecem os seguintes benefícios:
+ Elas podem reduzir a possibilidade de falhas de atualização capazes de prolongar o tempo de inatividade.
+ Se houver incompatibilidades, o Amazon Aurora impedirá que a atualização continue e fornecerá um log para que você saiba mais sobre elas. Você pode então resolver essas incompatibilidades usando o log para preparar o banco de dados para a atualização para a versão 3. Consulte informações detalhadas sobre como resolver incompatibilidades em [Preparing Your Installation for Upgrade](https://dev.mysql.com/doc/refman/8.0/en/upgrade-prerequisites.html) na documentação do MySQL e em [Upgrading to MySQL 8.0? Here is what you need to know...](https://dev.mysql.com/blog-archive/upgrading-to-mysql-8-0-here-is-what-you-need-to-know/) no blog do MySQL Server.

  Para ter informações sobre como atualizar para o MySQL 8.0, consulte [Upgrading MySQL](https://dev.mysql.com/doc/refman/8.0/en/upgrading.html) na documentação do MySQL.

As pré-verificações são executadas antes que o cluster de banco de dados fique off-line para a atualização da versão principal. Se as verificações prévias encontrarem uma incompatibilidade, o Aurora cancelará automaticamente a atualização antes que a instância de banco de dados seja interrompida. O Aurora também gera um evento para a incompatibilidade. Para ter mais informações sobre eventos do Amazon Aurora, consulte [Trabalhar com a notificação de eventos do Amazon RDS](USER_Events.md).

Após a conclusão das pré-verificações, o Aurora registra informações detalhadas sobre cada incompatibilidade no arquivo `upgrade-prechecks.log`. Na maioria dos casos, a entrada de log inclui um link para a documentação do MySQL para corrigir a incompatibilidade. Para obter mais informações sobre como exibir arquivos de log, consulte [Como visualizar e listar arquivos de log do banco de dados](USER_LogAccess.Procedural.Viewing.md).

**nota**  
Devido à natureza das pré-verificações, eles analisam os objetos do seu banco de dados. Essa análise resulta no consumo do recurso e aumenta o tempo para que a atualização seja concluída. Consulte mais informações sobre as considerações de desempenho da pré-verificação em [Processo de pré-verificação do Aurora MySQL](#AuroraMySQL.upgrade-prechecks.process).

**Contents**
+ [Processo de pré-verificação do Aurora MySQL](#AuroraMySQL.upgrade-prechecks.process)
+ [Formato de log da pré-verificação do Aurora MySQL](#AuroraMySQL.upgrade-prechecks.log-format)
+ [Exemplos de saída do log da pré-verificação do Aurora MySQL](#AuroraMySQL.upgrade-prechecks.log-examples)
+ [Desempenho da pré-verificação do Aurora MySQL](#AuroraMySQL.upgrade-prechecks.performance)
+ [Resumo das pré-verificações de atualização do MySQL Community](#AuroraMySQL.upgrade-prechecks.community)
+ [Resumo das pré-verificações de atualização do Aurora MySQL](#AuroraMySQL.upgrade-prechecks.ams)
+ [Referência de descrições da pré-verificação do Aurora MySQL](AuroraMySQL.upgrade-prechecks.descriptions.md)
  + [Erros](AuroraMySQL.upgrade-prechecks.descriptions.md#precheck-descriptions-errors)
    + [Pré-verificações do MySQL que relatam erros](AuroraMySQL.upgrade-prechecks.descriptions.md#precheck-descriptions-errors.mysql)
    + [Pré-verificações do Aurora MySQL que relatam erros](AuroraMySQL.upgrade-prechecks.descriptions.md#precheck-descriptions-errors.aurora)
  + [Avisos](AuroraMySQL.upgrade-prechecks.descriptions.md#precheck-descriptions-warnings)
    + [Pré-verificações do MySQL que exibem avisos](AuroraMySQL.upgrade-prechecks.descriptions.md#precheck-descriptions-warnings.mysql)
    + [Pré-verificações do Aurora MySQL que exibem avisos](AuroraMySQL.upgrade-prechecks.descriptions.md#precheck-descriptions-warnings.aurora)
  + [Avisos](AuroraMySQL.upgrade-prechecks.descriptions.md#precheck-descriptions-notices)
  + [Erros, avisos ou alertas](AuroraMySQL.upgrade-prechecks.descriptions.md#precheck-descriptions-all)

## Processo de pré-verificação do Aurora MySQL
<a name="AuroraMySQL.upgrade-prechecks.process"></a>

Conforme descrito anteriormente, o processo de atualização do Aurora MySQL exige a execução de verificações de compatibilidade (pré-verificações) no banco de dados para que a atualização da versão principal possa continuar.

Para atualizações no local, as pré-verificações são executadas na instância de banco de dados do gravador enquanto ela está on-line. Se a pré-verificação for bem-sucedida, a atualização prosseguirá. Se forem encontrados erros, eles serão registrados no arquivo `upgrade-prechecks.log` e a atualização será cancelada. Antes de tentar fazer a atualização novamente, resolva os erros exibidos no arquivo `upgrade-prechecks.log`.

Quanto a atualizações de restauração de snapshots, a pré-verificação é executada durante o processo de restauração. Se ela for bem-sucedida, o banco de dados será atualizado para a nova versão do Aurora MySQL. Se forem encontrados erros, eles serão registrados no arquivo `upgrade-prechecks.log` e a atualização será cancelada. Antes de tentar fazer a atualização novamente, resolva os erros exibidos no arquivo `upgrade-prechecks.log`.

Para obter mais informações, consulte [Descobrir os motivos das falhas de atualização da versão principal do Aurora MySQL](AuroraMySQL.Upgrading.failure-events.md) e [Referência de descrições da pré-verificação do Aurora MySQL](AuroraMySQL.upgrade-prechecks.descriptions.md).

Para monitorar o status da pré-verificação, é possível visualizar os eventos a seguir no cluster de banco de dados.


| Status da pré-verificação | Mensagem do evento | Ação | 
| --- | --- | --- | 
|  Started  |  Preparação da atualização em andamento: iniciando pré-verificações de atualização on-line.  | Nenhum | 
|  Failed  |  O cluster de banco de dados está em um estado que não permite atualização: as pré-verificações de atualização falharam. Consulte mais detalhes no arquivo upgrade-prechecks.log. Consulte mais informações sobre a solução de problemas da causa da falha na atualização em [https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/AuroraMySQL.Upgrading.Troubleshooting.html](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/AuroraMySQL.Upgrading.Troubleshooting.html)  |  Verifique `upgrade-prechecks.log` para ver se há erros.  Corrija os erros. Tente fazer a atualização novamente.  | 
|  Bem-sucedida  |  Preparação da atualização em andamento: pré-verificações de atualização on-line concluídas.  |  A pré-verificação foi bem-sucedida sem exibir nenhum erro. Examine os avisos e alertas em `upgrade-prechecks.log`.  | 

Consulte mais informações sobre a visualização de eventos em [Visualizar eventos do Amazon RDS](USER_ListEvents.md).

## Formato de log da pré-verificação do Aurora MySQL
<a name="AuroraMySQL.upgrade-prechecks.log-format"></a>

Depois que as verificações de compatibilidade da atualização (pré-verificações) forem concluídas, você poderá examinar o arquivo `upgrade-prechecks.log`. O arquivo de log contém os resultados, os objetos afetados e as informações de correção de cada pré-verificação.

Os erros impedem a atualização. Você deve resolvê-los antes de tentar fazer a atualização novamente.

Os avisos e alertas são menos importantes, mas ainda assim recomendamos que você os examine cuidadosamente para garantir que não haja problemas de compatibilidade com a workload da aplicação. Resolva todos os problemas identificados o quanto antes.

O arquivo de log tem o seguinte formato:
+ `targetVersion`: a versão compatível com MySQL da atualização do Aurora MySQL.
+ `auroraServerVersion`: a versão do Aurora MySQL na qual a pré-verificação foi executada.
+ `auroraTargetVersion`: a versão do Aurora MySQL para a qual você está fazendo a atualização.
+ `checksPerformed`: contém a lista de pré-verificações realizadas.
+ `id`: o nome da pré-verificação que está sendo executada.
+ `title`: uma descrição da pré-verificação que está sendo executada.
+ `status`: isso não indica se a pré-verificação foi bem-sucedida ou falhou, mas mostra o status da consulta de pré-verificação:
  + `OK`: a consulta de pré-verificação foi executada e concluída com êxito.
  + `ERROR`: a consulta de pré-verificação falhou ao ser executada. Isso pode ocorrer devido a problemas como restrições de recursos, reinicializações inesperadas da instância ou interrupção da consulta de pré-verificação de compatibilidade.

    Consulte mais informações [neste exemplo](#precheck-query-failed).
+ `description`: uma descrição geral da incompatibilidade e informações de como corrigir o problema.
+ `documentationLink`: quando aplicável, um link para a documentação relevante do Aurora MySQL ou do MySQL é indicado aqui. Para obter mais informações, consulte [Referência de descrições da pré-verificação do Aurora MySQL](AuroraMySQL.upgrade-prechecks.descriptions.md).
+ `detectedProblems`: se a pré-verificação exibir um erro, aviso ou alerta, isso mostrará os detalhes da incompatibilidade e os objetos incompatíveis, quando aplicável:
  + `level`: o nível da incompatibilidade detectado pela pré-verificação. Os níveis válidos são os seguintes:
    + `Error`: a atualização não poderá continuar enquanto você não resolver a incompatibilidade.
    + `Warning`: a atualização pode continuar, mas um objeto, uma sintaxe ou uma configuração obsoletos foram detectados. Examine os avisos cuidadosamente e resolva-os o quanto antes para evitar problemas em versões futuras. 
    + `Notice`: a atualização pode continuar, mas um objeto, uma sintaxe ou uma configuração obsoletos foram detectados. Examine os alertas cuidadosamente e resolva-os o quanto antes para evitar problemas em versões futuras. 
  + `dbObject`: o nome do objeto do banco de dados no qual a incompatibilidade foi detectada.
  + `description`: uma descrição detalhada da incompatibilidade e informações de como corrigir o problema.
+ `errorCount`: o número de erros de incompatibilidade detectados. Eles impedem a atualização.
+ `warningCount`: o número de avisos de incompatibilidade detectados. Eles não impedem a atualização, mas resolva-os o quanto antes para evitar problemas em versões futuras.
+ `noticeCount`: o número de alertas de incompatibilidade detectados. Eles não impedem a atualização, mas resolva-os o quanto antes para evitar problemas em versões futuras.
+ `Summary`: um resumo da contagem de erros, avisos e alertas de compatibilidade da pré-verificação.

## Exemplos de saída do log da pré-verificação do Aurora MySQL
<a name="AuroraMySQL.upgrade-prechecks.log-examples"></a>

Os exemplos a seguir mostram a saída do log de pré-verificação que provavelmente você verá. Consulte detalhes sobre as pré-verificações que são executadas em [Referência de descrições da pré-verificação do Aurora MySQL](AuroraMySQL.upgrade-prechecks.descriptions.md).

**Status da pré-verificação OK, sem incompatibilidades detectadas**  
A consulta de pré-verificação foi concluída com êxito. Nenhuma incompatibilidade foi detectada.  

```
{
  "id": "auroraUpgradeCheckIndexLengthLimitOnTinytext",
  "title": "Check for the tables with indexes defined with prefix length greater than 255 bytes on tiny text columns",
  "status": "OK",
  "detectedProblems": []
},
```

**Status da pré-verificação OK, sem erros detectados**  
A consulta de pré-verificação foi concluída com êxito. Um erro foi detectado.  

```
{
  "id": "auroraUpgradeCheckForPrefixIndexOnGeometryColumns",
  "title": "Check for geometry columns on prefix indexes",
  "status": "OK",
  "description": "Consider dropping the prefix indexes of geometry columns and restart the upgrade.",
  "detectedProblems": [
      {
        "level": "Error",
        "dbObject": "test25.sbtest1",
        "description": "Table `test25`.`sbtest1` has an index `idx_t1` on geometry column/s. Mysql 8.0 does not support this type of index on a geometry column https://dev.mysql.com/worklog/task/?id=11808. To upgrade to MySQL 8.0, Run 'DROP INDEX `idx_t1` ON `test25`.`sbtest1`;"
      },
 }
```

**Status da pré-verificação OK, aviso detectado**  
Podem ser exibidos avisos quando uma pré-verificação é bem-sucedida ou malsucedida.  
Aqui, a consulta de pré-verificação foi concluída com êxito. Dois avisos foram detectados.  

```
{
  "id": "zeroDatesCheck",
  "title": "Zero Date, Datetime, and Timestamp values",
  "status": "OK",
  "description": "Warning: By default zero date/datetime/timestamp values are no longer allowed in MySQL, as of 5.7.8 NO_ZERO_IN_DATE and NO_ZERO_DATE are included in SQL_MODE by default. These modes should be used with strict mode as they will be merged with strict mode in a future release. If you do not include these modes in your SQL_MODE setting, you are able to insert date/datetime/timestamp values that contain zeros. It is strongly advised to replace zero values with valid ones, as they may not work correctly in the future.",
  "documentationLink": "https://lefred.be/content/mysql-8-0-and-wrong-dates/",
  "detectedProblems": [
      {
        "level": "Warning",
        "dbObject": "global.sql_mode",
        "description": "does not contain either NO_ZERO_DATE or NO_ZERO_IN_DATE which allows insertion of zero dates"
      },
      {
        "level": "Warning",
        "dbObject": "session.sql_mode",
        "description": " of 10 session(s) does not contain either NO_ZERO_DATE or NO_ZERO_IN_DATE which allows insertion of zero dates"
      }
    ]
}
```

**Status da pré-verificação ERROR, sem incompatibilidades informadas**  
A consulta de pré-verificação falhou e exibiu um erro; portanto, não foi possível verificar as incompatibilidades.  

```
{
  "id": "auroraUpgradeCheckForDatafilePathInconsistency",
  "title": "Check for inconsistency related to ibd file path.",
  "status": "ERROR",
  "description": "Can't connect to MySQL server on 'localhost:3306' (111) at 13/08/2024 12:22:20 UTC. This failure can occur due to low memory available on the instance for executing upgrade prechecks. Please check 'FreeableMemory' Cloudwatch metric to verify the available memory on the instance while executing prechecks. If instance ran out of memory, we recommend to retry the upgrade on a higher instance class."
}
```
Essa falha pode ocorrer devido à reinicialização inesperada da instância ou à interrupção de uma consulta de pré-verificação de compatibilidade no banco de dados durante a execução. Por exemplo, em classes menores de instâncias de banco de dados, isso pode ocorrer quando a memória disponível na instância está baixa.  
É possível usar a métrica `FreeableMemory` do Amazon CloudWatch para verificar a memória disponível na instância ao executar pré-verificações. Se a instância ficar sem memória, recomendamos tentar fazer a atualização novamente em uma classe maior de instância de banco de dados. Em alguns casos, você pode usar uma [implantação azul/verde](blue-green-deployments-overview.md). Isso permite que as pré-verificações e atualizações sejam executadas no cluster de banco de dados “verde”, independentemente da workload de produção, que também consome recursos do sistema.  
Para obter mais informações, consulte [Solução de problemas de uso de memória para bancos de dados Aurora MySQL](ams-workload-memory.md).

**Resumo da pré-verificação, um erro e três avisos detectados**  
As pré-verificações de compatibilidade também contêm informações sobre as versões de origem e destino do Aurora MySQL e um resumo das contagens de erros, avisos e alertas no final da saída da pré-verificação.  
Por exemplo, o resultado a seguir mostra que foi feita uma tentativa de atualização do Aurora MySQL 2.11.6 para o Aurora MySQL 3.07.1. A atualização exibiu um erro, três avisos e nenhum alerta. Como as atualizações não podem continuar quando é exibido um erro, você deve resolver o problema de compatibilidade [routineSyntaxCheck](AuroraMySQL.upgrade-prechecks.descriptions.md#routineSyntaxCheck) e tentar fazer a atualização novamente.  

```
{
  "serverAddress": "/tmp%2Fmysql.sock",
  "serverVersion": "5.7.12 - MySQL Community Server (GPL)",
  "targetVersion": "8.0.36",
  "auroraServerVersion": "2.11.6",
  "auroraTargetVersion": "3.07.1",
  "outfilePath": "/rdsdbdata/tmp/PreChecker.log",
  "checksPerformed": [{
      ... output for each individual precheck ...
      .
      .
      {
        "id": "oldTemporalCheck",
        "title": "Usage of old temporal type",
        "status": "OK",
          "detectedProblems": []
      },
      {
        "id": "routinesSyntaxCheck",
        "title": "MySQL 8.0 syntax check for routine-like objects",
        "status": "OK",
        "description": "The following objects did not pass a syntax check with the latest MySQL 8.0 grammar. A common reason is that they reference names that conflict with new reserved keywords. You must update these routine definitions and `quote` any such references before upgrading.",
        "documentationLink": "https://dev.mysql.com/doc/refman/en/keywords.html",
        "detectedProblems": [{
            "level": "Error",
            "dbObject": "test.select_res_word",
            "description": "at line 2,18: unexpected token 'except'"
        }]
      },
      .
      .
      .
      {
        "id": "zeroDatesCheck",
        "title": "Zero Date, Datetime, and Timestamp values",
        "status": "OK",
        "description": "Warning: By default zero date/datetime/timestamp values are no longer allowed in MySQL, as of 5.7.8 NO_ZERO_IN_DATE and NO_ZERO_DATE are included in SQL_MODE by default. These modes should be used with strict mode as they will be merged with strict mode in a future release. If you do not include these modes in your SQL_MODE setting, you are able to insert date/datetime/timestamp values that contain zeros. It is strongly advised to replace zero values with valid ones, as they may not work correctly in the future.",
        "documentationLink": "https://lefred.be/content/mysql-8-0-and-wrong-dates/",
        "detectedProblems": [{
            "level": "Warning",
            "dbObject": "global.sql_mode",
            "description": "does not contain either NO_ZERO_DATE or NO_ZERO_IN_DATE which allows insertion of zero dates"
            },
            {
            "level": "Warning",
            "dbObject": "session.sql_mode",
            "description": " of 8 session(s) does not contain either NO_ZERO_DATE or NO_ZERO_IN_DATE which allows insertion of zero dates"
            }
          ]
       },
       .
       .
       .
  }],
  "errorCount": 1,
  "warningCount": 3,
  "noticeCount": 0,
  "Summary": "1 errors were found. Please correct these issues before upgrading to avoid compatibility issues."
}
```

## Desempenho da pré-verificação do Aurora MySQL
<a name="AuroraMySQL.upgrade-prechecks.performance"></a>

As pré-verificações de compatibilidade são executadas antes que a instância de banco de dados fique off-line para a atualização. Portanto, em circunstâncias normais, elas não causam tempo de inatividade na instância de banco de dados durante a execução. No entanto, elas podem afetar a workload da aplicação em execução na instância de banco de dados do gravador. As pré-verificações acessam o dicionário de dados por meio de tabelas [information\$1schema](https://dev.mysql.com/doc/mysql-infoschema-excerpt/5.7/en/information-schema-introduction.html), que podem ser lentas se houver muitos objetos de banco de dados. Considere os seguintes fatores:
+ A duração da pré-verificação varia de acordo com o número de objetos do banco de dados, como tabelas, colunas, rotinas e restrições. Clusters de banco de dados com um grande número de objetos podem levar mais tempo para serem executados.

  Por exemplo, [removedFunctionsCheck](AuroraMySQL.upgrade-prechecks.descriptions.md#removedFunctionsCheck) pode levar mais tempo e usar mais recursos com base no número de [objetos armazenados](https://dev.mysql.com/doc/refman/5.7/en/stored-objects.html).
+ Para atualizações no local, o uso de uma classe de instância de banco de dados maior (por exemplo, db.r5.24xlarge ou db.r6g.16xlarge) pode ajudar a concluir a atualização mais rapidamente usando mais CPU. Você pode reduzir o tamanho após a atualização.
+ As consultas em `information_schema` em vários bancos de dados podem ser lentas, principalmente quando há muitos objetos e em instâncias de banco de dados menores. Nesses casos, considere usar clonagem, restauração de snapshots ou uma [implantação azul/verde](blue-green-deployments-overview.md) para atualizações.
+ O uso de recursos (CPU, memória) da pré-verificação pode aumentar com mais objetos, resultando em tempos de execução mais longos em instâncias de banco de dados menores. Nesses casos, considere testar o uso de clonagem, restauração de snapshots ou uma implantação azul/verde para atualizações.

  Se as pré-verificações falharem devido à falta de recursos, você poderá detectar isso no log de pré-verificação usando a saída de status:

  ```
  "status": "ERROR",
  ```

Para obter mais informações, consulte [Como funciona a atualização da versão principal no local Aurora MySQL](AuroraMySQL.Updates.MajorVersionUpgrade.md#AuroraMySQL.Upgrading.Sequence) e [Planejando uma atualização de versão principal para um cluster de Aurora MySQL](AuroraMySQL.Updates.MajorVersionUpgrade.md#AuroraMySQL.Upgrading.Planning).

## Resumo das pré-verificações de atualização do MySQL Community
<a name="AuroraMySQL.upgrade-prechecks.community"></a>

Veja a seguir uma lista geral de incompatibilidades entre o MySQL 5.7 e 8.0:
+ O cluster de banco de dados compatível com o MySQL 5.7 não deve usar recursos incompatíveis com o MySQL 8.0.

  Para obter mais informações, consulte [ Recursos removidos no MySQL 8.0](https://dev.mysql.com/doc/refman/8.0/en/mysql-nutshell.html#mysql-nutshell-removals) na documentação do MySQL.
+ Não deve haver violações de palavra-chave ou palavra reservada. Algumas palavras-chave podem ser reservadas no MySQL 8.0 que não eram reservadas anteriormente.

  Para obter mais informações, consulte [Palavras-chave e palavras reservadas](https://dev.mysql.com/doc/refman/8.0/en/keywords.html) na documentação do MySQL.
+ Para suporte melhorado do Unicode, considere a conversão de objetos que usam o conjunto de caracteres `utf8mb3` para que usem o conjunto de caracteres `utf8mb4`. O conjunto de caracteres `utf8mb3` está obsoleto. Além disso, considere o uso de `utf8mb4` para referências de conjuntos de caracteres em vez de `utf8`, pois, no momento, `utf8` é um alias para o conjunto de caracteres `utf8mb3`.

  Para obter mais informações, consulte [ The utf8mb3 character set (3-byte UTF-8 unicode encoding)](https://dev.mysql.com/doc/refman/8.0/en/charset-unicode-utf8mb3.html) na documentação do MySQL.
+ Não deve haver tabelas do InnoDB com um formato de linha não padrão.
+ Não deve haver atributos de tipo de tamanho `ZEROFILL` ou `display`.
+ Não deve haver tabela particionada que usa um mecanismo de armazenamento que não tem suporte para particionamento nativo,
+ Não deve haver tabelas no banco de dados do sistema `mysql` do MySQL 5.7 com o mesmo nome de uma tabela usada pelo dicionário de dados do MySQL 8.0.
+ Não deve haver tabelas que usam funções ou tipos de dados obsoletos.
+ Não deve haver nomes de restrição de chave externa maiores que 64 caracteres.
+ Não deve haver modos obsoletos do SQL definidos na configuração de variável do sistema `sql_mode`.
+ Não deve haver tabelas nem procedimentos armazenados com elementos de coluna `ENUM` ou `SET` individuais que excedam 255 caracteres.
+ Não deve haver partições de tabela que residam em espaços de tabela compartilhados do InnoDB.
+ Não deve haver referências circulares nos caminhos do arquivo de dados do espaço de tabela.
+ Não deve haver consultas e definições de programa armazenadas que usem qualificadores `ASC` ou `DESC` para cláusulas `GROUP BY`.
+ Não deve haver variáveis do sistema removidas, e as variáveis do sistema devem usar os novos valores padrão para o MySQL 8.0.
+ Não deve haver valores zero (`0`) de data, data e hora ou carimbo de data e hora.
+ Não deve haver inconsistências em esquemas resultantes da remoção ou da corrupção de arquivos.
+ Não deve haver nomes de tabela que contenham a string de caracteres `FTS`.
+ Não deve haver tabelas do InnoDB que pertençam a um mecanismo diferente.
+ Não deve haver nomes de tabelas ou esquemas inválidos para o MySQL 5.7.

Consulte detalhes sobre as pré-verificações que são executadas em [Referência de descrições da pré-verificação do Aurora MySQL](AuroraMySQL.upgrade-prechecks.descriptions.md).

Para ter informações sobre como atualizar para o MySQL 8.0, consulte [Upgrading MySQL](https://dev.mysql.com/doc/refman/8.0/en/upgrading.html) na documentação do MySQL. Consulte uma descrição geral das alterações feitas no MySQL 8.0 em [What Is New in MySQL 8.0](https://dev.mysql.com/doc/refman/8.0/en/mysql-nutshell.html) na documentação do MySQL.

## Resumo das pré-verificações de atualização do Aurora MySQL
<a name="AuroraMySQL.upgrade-prechecks.ams"></a>

O Aurora MySQL tem requisitos específicos quanto à atualização da versão 2 para a versão 3, incluindo o seguinte:
+ Não deve haver nenhuma sintaxe SQL obsoleta, como `SQL_CACHE`, `SQL_NO_CACHE` e `QUERY_CACHE`, em visualizações, rotinas, gatilhos e eventos.
+ Não deve haver colunas `FTS_DOC_ID` presentes em nenhuma tabela sem o índice `FTS`.
+ Não deve haver nenhuma incompatibilidade de definição de coluna entre o dicionário de dados do InnoDB e a definição real da tabela.
+ Todos os nomes de bancos de dados e tabelas devem estar em minúsculas quando o parâmetro `lower_case_table_names` é definido como `1`.
+ Eventos e gatilhos não devem ter um definidor vazio ou ausente ou um contexto de criação inválido.
+ Todos os nomes de gatilhos em um banco de dados devem ser exclusivos.
+ A recuperação de DDL e o DDL rápido não são compatíveis com o Aurora MySQL versão 3. Não deve haver artefatos nos bancos de dados relacionados a esses recursos.
+ Tabelas com o formato de linha `REDUNDANT` ou `COMPACT` não podem ter índices maiores que 767 bytes.
+ O tamanho do prefixo dos índices definidos nas colunas de texto `tiny` não pode exceder 255 bytes. Com o conjunto de caracteres `utf8mb4`, isso limita o tamanho do prefixo aceito a 63 caracteres.

  Uma extensão maior de prefixo era permitida no MySQL 5.7 usando o parâmetro `innodb_large_prefix`. Esse parâmetro está obsoleto no MySQL 8.0.
+ Não deve haver nenhuma inconsistência de metadados do InnoDB na tabela `mysql.host`.
+ Não deve haver incompatibilidade do tipo de dados da coluna nas tabelas do sistema.
+ Não deve haver transações XA no estado `prepared`.
+ Os nomes das colunas nas visualizações não podem exceder 64 caracteres.
+ Caracteres especiais em procedimentos armazenados não podem ser inconsistentes.
+ As tabelas não podem ter inconsistência no caminho do arquivo de dados.

Consulte detalhes sobre as pré-verificações que são executadas em [Referência de descrições da pré-verificação do Aurora MySQL](AuroraMySQL.upgrade-prechecks.descriptions.md).

# Referência de descrições da pré-verificação do Aurora MySQL
<a name="AuroraMySQL.upgrade-prechecks.descriptions"></a>

As pré-verificações de atualização do Aurora MySQL são descritas detalhadamente aqui.

**Contents**
+ [Erros](#precheck-descriptions-errors)
  + [Pré-verificações do MySQL que relatam erros](#precheck-descriptions-errors.mysql)
  + [Pré-verificações do Aurora MySQL que relatam erros](#precheck-descriptions-errors.aurora)
+ [Avisos](#precheck-descriptions-warnings)
  + [Pré-verificações do MySQL que exibem avisos](#precheck-descriptions-warnings.mysql)
  + [Pré-verificações do Aurora MySQL que exibem avisos](#precheck-descriptions-warnings.aurora)
+ [Avisos](#precheck-descriptions-notices)
+ [Erros, avisos ou alertas](#precheck-descriptions-all)

## Erros
<a name="precheck-descriptions-errors"></a>

As pré-verificações a seguir geram erros quando a pré-verificação falha e impede que a atualização continue.

**Topics**
+ [Pré-verificações do MySQL que relatam erros](#precheck-descriptions-errors.mysql)
+ [Pré-verificações do Aurora MySQL que relatam erros](#precheck-descriptions-errors.aurora)

### Pré-verificações do MySQL que relatam erros
<a name="precheck-descriptions-errors.mysql"></a>

As seguintes pré-verificações são do MySQL Community:
+ [checkTableMysqlSchema](#checkTableMysqlSchema)
+ [circularDirectoryCheck](#circularDirectoryCheck)
+ [columnsWhichCannotHaveDefaultsCheck](#columnsWhichCannotHaveDefaultsCheck)
+ [depreciatedSyntaxCheck](#depreciatedSyntaxCheck)
+ [engineMixupCheck](#engineMixupCheck)
+ [enumSetElementLengthCheck](#enumSetElementLengthCheck)
+ [foreignKeyLengthCheck](#foreignKeyLengthCheck)
+ [getDuplicateTriggers](#getDuplicateTriggers)
+ [getEventsWithNullDefiner](#getEventsWithNullDefiner)
+ [getMismatchedMetadata](#getMismatchedMetadata)
+ [getTriggersWithNullDefiner](#getTriggersWithNullDefiner)
+ [getValueOfVariablelower\$1case\$1table\$1names](#getValueOfVariable)
+ [groupByAscSyntaxCheck](#groupByAscSyntaxCheck)
+ [mysqlEmptyDotTableSyntaxCheck](#mysqlEmptyDotTableSyntaxCheck)
+ [mysqlIndexTooLargeCheck](#mysqlIndexTooLargeCheck)
+ [mysqlInvalid57NamesCheck](#mysqlInvalid57NamesCheck)
+ [mysqlOrphanedRoutinesCheck](#mysqlOrphanedRoutinesCheck)
+ [mysqlSchemaCheck](#mysqlSchemaCheck)
+ [nonNativePartitioningCheck](#nonNativePartitioningCheck)
+ [oldTemporalCheck](#oldTemporalCheck)
+ [partitionedTablesInSharedTablespaceCheck](#partitionedTablesInSharedTablespace)
+ [removedFunctionsCheck](#removedFunctionsCheck)
+ [routineSyntaxCheck](#routineSyntaxCheck)
+ [schemaInconsistencyCheck](#schemaInconsistencyCheck)

**checkTableMysqlSchema**  
**Nível de pré-verificação: erro**  
**Problemas relatados pelo comando `check table x for upgrade` para o esquema `mysql`**  
Antes de iniciar a atualização para o Aurora MySQL versão 3, `check table for upgrade` é executado em cada tabela no esquema `mysql` na instância de banco de dados. O comando `check table for upgrade` examina as tabelas em busca de possíveis problemas que possam surgir durante uma atualização para uma versão mais recente do MySQL. Executar esse comando antes de tentar fazer a atualização pode ajudar a identificar e resolver quaisquer incompatibilidades com antecedência, facilitando o respectivo processo.  
Esse comando executa várias verificações em cada tabela, como as seguintes:  
+ Verificar se os metadados e a estrutura da tabela são compatíveis com a versão de destino do MySQL
+ Verificar se há algum recurso obsoleto ou removido usado pela tabela
+ Garantir que a atualização da tabela seja feito adequadamente sem perda de dados
Consulte mais informações em [CHECK TABLE Statement](https://dev.mysql.com/doc/refman/5.7/en/check-table.html) na documentação do MySQL.  
**Exemplos de resultado:**  

```
{
  "id": "checkTableMysqlSchema",
  "title": "Issues reported by 'check table x for upgrade' command for mysql schema.",
  "status": "OK",
  "detectedProblems": []
}
```
A saída dessa pré-verificação depende do erro encontrado e de quando ele foi encontrado, pois `check table for upgrade` executa várias verificações.  
Se você encontrar algum erro nessa pré-verificação, abra um caso no [AWS Support](https://aws.amazon.com/support) para solicitar que a inconsistência de metadados seja resolvida. Ou você pode tentar fazer a atualização novamente executando um despejo lógico e, depois, restaurando para um novo cluster de banco de dados do Aurora MySQL versão 3.

**circularDirectoryCheck**  
**Nível de pré-verificação: erro**  
**Referências circulares a diretórios nos caminhos de arquivo de dados do espaço de tabela**  
Desde o [MySQL 8.0.17](https://dev.mysql.com/doc/relnotes/mysql/8.0/en/news-8-0-17.html), a cláusula `CREATE TABLESPACE ... ADD DATAFILE` não permite mais referências circulares a diretórios. Para evitar problemas de atualização, remova todas as referências circulares a diretórios dos caminhos de arquivo de dados do espaço de tabela antes de fazer a atualização para o Aurora MySQL versão 3.  
**Exemplos de resultado:**  

```
{
  "id": "circularDirectory",
  "title": "Circular directory references in tablespace data file paths",
  "status": "OK",
  "description": "Error: Following tablespaces contain circular directory references (e.g. the reference '/../') in data file paths which as of MySQL 8.0.17 are not permitted by the CREATE TABLESPACE ... ADD DATAFILE clause. An exception to the restriction exists on Linux, where a circular directory reference is permitted if the preceding directory is a symbolic link. To avoid upgrade issues, remove any circular directory references from tablespace data file paths before upgrading.",
  "documentationLink": "https://dev.mysql.com/doc/refman/8.0/en/upgrading-from-previous-series.html#upgrade-innodb-changes",
  "detectedProblems": [
      {
        "level": "Error",
        "dbObject": "ts2",
        "description": "circular reference in datafile path: '/home/ec2-user/dbdata/mysql_5_7_44/../ts2.ibd'",
        "dbObjectType": "Tablespace"
      }
  ]
}
```
Se você receber esse erro, recrie suas tabelas usando um [espaço de tabela de arquivo por tabela](https://dev.mysql.com/doc/refman/8.0/en/innodb-file-per-table-tablespaces.html). Use caminhos de arquivo padrão para todos os espaços e definições de tabela.  
O Aurora MySQL não é compatível com espaços de tabela gerais ou comandos `CREATE TABLESPACE`.  
Antes de recriar espaços de tabela, consulte [Online DDL Operations](https://dev.mysql.com/doc/refman/5.7/en/innodb-online-ddl-operations.html) na documentação do MySQL para entender os efeitos do bloqueio e da movimentação de dados nas transações em primeiro plano.
Após a recriação, a pré-verificação é concluída com êxito, permitindo que a atualização prossiga.  

```
{
  "id": "circularDirectoryCheck",
  "title": "Circular directory references in tablespace data file paths",
  "status": "OK",
  "detectedProblems": []
},
```

**columnsWhichCannotHaveDefaultsCheck**  
**Nível de pré-verificação: erro**  
**Colunas que não podem ter valores padrão**  
Nas versões anteriores ao MySQL 8.0.13, as colunas `BLOB`, `TEXT`, `GEOMETRY` e `JSON` não podem ter [valores padrão](https://dev.mysql.com/doc/refman/5.7/en/data-type-defaults.html). Remova todas as cláusulas padrão dessas colunas antes de fazer a atualização para o Aurora MySQL versão 3. Consulte mais informações sobre alterações no tratamento padrão desses tipos de dados em [Data Type Default Values](https://dev.mysql.com/doc/refman/8.0/en/data-type-defaults.html) na documentação do MySQL.  
**Exemplos de resultado:**  

```
{
  "id": "columnsWhichCannotHaveDefaultsCheck",
  "title": "Columns which cannot have default values",
  "status": "OK",
  "description": "Error: The following columns are defined as either BLOB, TEXT, GEOMETRY or JSON and have a default value set. These data types cannot have default values in MySQL versions prior to 8.0.13, while starting with 8.0.13, the default value must be specified as an expression. In order to fix this issue, please use the ALTER TABLE ... ALTER COLUMN ... DROP DEFAULT statement.",
  "documentationLink": "https://dev.mysql.com/doc/refman/8.0/en/data-type-defaults.html#data-type-defaults-explicit",
  "detectedProblems": [
      {
        "level": "Error",
        "dbObject": "test.test_blob_default.geo_col",
        "description": "geometry"
      }
  ]
},
```
A pré-verificação retorna um erro porque a coluna `geo_col` na tabela `test.test_blob_default` está usando um tipo de dados `BLOB`, `TEXT`, `GEOMETRY` ou `JSON` com um valor padrão especificado.  
Observando a definição da tabela, podemos ver que a coluna `geo_col` é definida como `geo_col geometry NOT NULL default ''`.  

```
mysql> show create table test_blob_default\G
*************************** 1. row ***************************
       Table: test_blob_default
Create Table: CREATE TABLE `test_blob_default` (
  `geo_col` geometry NOT NULL DEFAULT ''
) ENGINE=InnoDB DEFAULT CHARSET=latin1
```
Remova essa cláusula padrão para permitir que a pré-verificação seja bem-sucedida.  
Antes de executar instruções `ALTER TABLE` ou recriar espaços de tabela, consulte [Online DDL Operations](https://dev.mysql.com/doc/refman/5.7/en/innodb-online-ddl-operations.html) na documentação do MySQL para entender os efeitos do bloqueio e da movimentação de dados nas transações em primeiro plano.

```
mysql> ALTER TABLE test_blob_default modify COLUMN geo_col geometry NOT NULL;
Query OK, 0 rows affected (0.02 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> show create table test_blob_default\G
*************************** 1. row ***************************
       Table: test_blob_default
Create Table: CREATE TABLE `test_blob_default` (
  `geo_col` geometry NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1
1 row in set (0.00 sec)
```
A pré-verificação é concluída com êxito e você pode tentar fazer a atualização novamente.  

```
{
  "id": "columnsWhichCannotHaveDefaultsCheck",
  "title": "Columns which cannot have default values",
  "status": "OK",
  "detectedProblems": []
},
```

**depreciatedSyntaxCheck**  
**Nível de pré-verificação: erro**  
**Uso de palavras-chave obsoletas na definição**  
O MySQL 8.0 removeu o [cache de consultas](https://dev.mysql.com/doc/refman/5.7/en/query-cache.html). Por isso, algumas sintaxes de SQL específicas de cache de consultas foram removidas. Se algum dos objetos do banco de dados contiver as palavras-chave `QUERY CACHE`, `SQL_CACHE` ou `SQL_NO_CACHE`, um erro de pré-verificação será exibido. Para resolver esse problema, recrie esses objetos removendo as palavras-chave mencionadas.  
**Exemplos de resultado:**  

```
{
  "id": "depreciatedSyntaxCheck",
  "title": "Usage of depreciated keywords in definition",
  "status": "OK",
  "description": "Error: The following DB objects contain keywords like 'QUERY CACHE', 'SQL_CACHE', 'SQL_NO_CACHE' which are not supported in major version 8.0. It is recommended to drop these DB objects or rebuild without any of the above keywords before upgrade.",
  "detectedProblems": [
      {
"level": "Error",
"dbObject": "test.no_query_cache_check",
"description": "PROCEDURE uses depreciated words in definition"
      }
  ]
}
```
A pré-verificação informa que o procedimento armazenado `test.no_query_cache_check` está usando uma das palavras-chave removidas. Observando a definição do procedimento, podemos ver que ele usa `SQL_NO_CACHE`.  

```
mysql> show create procedure test.no_query_cache_check\G
*************************** 1. row ***************************
           Procedure: no_query_cache_check
            sql_mode:
    Create Procedure: CREATE DEFINER=`reinvent`@`%` PROCEDURE `no_query_cache_check`()
BEGIN
    SELECT SQL_NO_CACHE k from sbtest1 where id > 10 and id < 20 group by k asc;
END
character_set_client: utf8mb4
collation_connection: utf8mb4_0900_ai_ci
  Database Collation: latin1_swedish_ci
1 row in set (0.00 sec)
```
Remova a palavra-chave.  

```
mysql> drop procedure test.no_query_cache_check;
Query OK, 0 rows affected (0.01 sec)

mysql> delimiter //

mysql> CREATE DEFINER=`reinvent`@`%` PROCEDURE `no_query_cache_check`() BEGIN     SELECT k from sbtest1 where id > 10 and id < 20 group by k asc; END//
Query OK, 0 rows affected (0.00 sec)

mysql> delimiter ;
```
Após a remoção da palavra-chave, a pré-verificação é concluída com êxito.  

```
{
  "id": "depreciatedSyntaxCheck",
  "title": "Usage of depreciated keywords in definition",
  "status": "OK",
  "detectedProblems": []
}
```

**engineMixupCheck**  
**Nível de pré-verificação: erro**  
**Tabela reconhecida pelo InnoDB que pertence a um mecanismo diferente**  
De modo semelhante a [schemaInconsistencyCheck](#schemaInconsistencyCheck), essa pré-verificação verifica se os metadados da tabela no MySQL são consistentes antes de prosseguir com a atualização.   
Se você encontrar algum erro nessa pré-verificação, abra um caso no [AWS Support](https://aws.amazon.com/support) para solicitar que a inconsistência de metadados seja resolvida. Ou você pode tentar fazer a atualização novamente executando um despejo lógico e, depois, restaurando para um novo cluster de banco de dados do Aurora MySQL versão 3.  
**Exemplos de resultado:**  

```
{
  "id": "engineMixupCheck",
  "title": "Tables recognized by InnoDB that belong to a different engine",
  "status": "OK",
  "description": "Error: Following tables are recognized by InnoDB engine while the SQL layer believes they belong to a different engine. Such situation may happen when one removes InnoDB table files manually from the disk and creates e.g. a MyISAM table with the same name.\n\nA possible way to solve this situation is to e.g. in case of MyISAM table:\n\n1. Rename the MyISAM table to a temporary name (RENAME TABLE).\n2. Create some dummy InnoDB table (its definition does not need to match), then copy (copy, not move) and rename the dummy .frm and .ibd files to the orphan name using OS file commands.\n3. The orphan table can be then dropped (DROP TABLE), as well as the dummy table.\n4. Finally the MyISAM table can be renamed back to its original name.",
  "detectedProblems": [
      {
        "level": "Error",
        "dbObject": "mysql.general_log_backup",
        "description": "recognized by the InnoDB engine but belongs to CSV"
      }
  ]
}
```

**enumSetElementLengthCheck**  
**Nível de pré-verificação: erro**  
**Definições de coluna `ENUM` e `SET` contendo elementos com tamanho superior a 255 caracteres**  
Tabelas e procedimentos armazenados não devem ter elementos de coluna `ENUM` ou `SET` que excedam 255 caracteres ou 1.020 bytes. Antes do MySQL 8.0, o tamanho máximo combinado era de 64 K, mas o 8.0 limita elementos individuais a 255 caracteres ou 1.020 bytes (com suporte a multibyte). Se houver uma falha na pré-verificação referente a `enumSetElementLengthCheck`, modifique os elementos que excedam esses novos limites antes de tentar fazer a atualização novamente.  
**Exemplos de resultado:**  

```
{
  "id": "enumSetElementLengthCheck",
  "title": "ENUM/SET column definitions containing elements longer than 255 characters",
  "status": "OK",
  "description": "Error: The following columns are defined as either ENUM or SET and contain at least one element longer that 255 characters. They need to be altered so that all elements fit into the 255 characters limit.",
  "documentationLink": "https://dev.mysql.com/doc/refman/8.0/en/string-type-overview.html",
  "detectedProblems": [
      {
        "level": "Error",
        "dbObject": "test.large_set.s",
        "description": "SET contains element longer than 255 characters"
      }
  ]
},
```
A pré-verificação relata um erro porque a coluna `s` na tabela `test.large_set` contém um elemento `SET` com mais de 255 caracteres.  
Após a redução do tamanho de `SET` dessa coluna, a pré-verificação é concluída com êxito, permitindo que a atualização prossiga.  

```
{
  "id": "enumSetElementLenghtCheck",
  "title": "ENUM/SET column definitions containing elements longer than 255 characters",
  "status": "OK",
  "detectedProblems": []
},
```

**foreignKeyLengthCheck**  
**Nível de pré-verificação: erro**  
**Nomes de restrição de chave externa com mais de 64 caracteres**  
No MySQL, o tamanho dos identificadores é limitado a 64 caracteres, conforme descrito na [documentação do MySQL](https://dev.mysql.com/doc/refman/8.0/en/identifier-length.html). Tendo em vista os [problemas](https://bugs.mysql.com/bug.php?id=88118) identificados, em que as extensões das chaves externas podiam se igualar ou exceder esse valor, causando falhas de atualização, essa pré-verificação foi implementada. Se você encontrar erros com essa pré-verificação, [altere ou renomeie](https://dev.mysql.com/doc/refman/8.0/en/alter-table.html) a restrição para que ela tenha menos de 64 caracteres, antes de tentar fazer a atualização novamente.  
**Exemplos de resultado:**  

```
{
  "id": "foreignKeyLength",
  "title": "Foreign key constraint names longer than 64 characters",
  "status": "OK",
  "detectedProblems": []
}
```

**getDuplicateTriggers**  
**Nível de pré-verificação: erro**  
**Todos os nomes de gatilho em um banco de dados devem ser exclusivos.**  
Devido a mudanças na implementação do dicionário de dados, o MySQL 8.0 não permite gatilhos com distinção entre letras maiúsculas e minúsculas em um banco de dados. Essa pré-verificação confirma que o cluster de banco de dados não tem um ou mais bancos de dados com gatilhos duplicados. Consulte mais informações em [Identifier Case Sensitivity](https://dev.mysql.com/doc/refman/8.0/en/identifier-case-sensitivity.html) na documentação do MySQL.  
**Exemplos de resultado:**  

```
{
  "id": "getDuplicateTriggers",
  "title": "MySQL pre-checks that all trigger names in a database are unique or not.",
  "status": "OK",
  "description": "Error: You have one or more database containing duplicate triggers. Mysql 8.0 does not support case sensitive triggers within a database https://dev.mysql.com/doc/refman/8.0/en/identifier-case-sensitivity.html. To upgrade to MySQL 8.0, drop the triggers with case-insensitive duplicate names and recreate with distinct names.",
  "detectedProblems": [
      {
        "level": "Error",
        "dbObject": "test",
        "description": "before_insert_product"
      },
      {
        "level": "Error",
        "dbObject": "test",
        "description": "before_insert_PRODUCT"
      }
  ]
}
```
A pré-verificação relata o erro de que o cluster de banco de dados tem dois gatilhos com o mesmo nome, mas com grafia diferente de maiúscula e minúscula: `test.before_insert_product` e `test.before_insert_PRODUCT`.  
Antes de fazer a atualização, renomeie os gatilhos ou descarte-os e recrie-os com um novo nome.  
Depois de renomear `test.before_insert_PRODUCT` para `test.before_insert_product_2`, a pré-verificação é bem-sucedida.  

```
{
  "id": "getDuplicateTriggers",
  "title": "MySQL pre-checks that all trigger names in a database are unique or not.",
  "status": "OK",
  "detectedProblems": []
}
```

**getEventsWithNullDefiner**  
**Nível de pré-verificação: erro**  
**A coluna de definidor referente a `mysql.event` não pode ser nula nem estar em branco.**  
O atributo `DEFINER` especifica a conta do MySQL que possui uma definição de objeto armazenado, como um gatilho, um procedimento armazenado ou um evento. Esse atributo é útil principalmente em situações em que você quer controlar o contexto de segurança no qual o objeto armazenado é executado. Ao criar um objeto armazenado, se não for especificado um `DEFINER`, o padrão será o usuário que criou o objeto.  
Ao fazer atualização para o MySQL 8.0, você não pode ter nenhum objeto armazenado que tenha um definidor `null` ou em branco no dicionário de dados do MySQL. Se você tiver esses objetos armazenados, será gerado um erro de pré-verificação. Você deve corrigi-lo antes de prosseguir com a atualização.  
Exemplo de erro:  

```
{
  "id": "getEventsWithNullDefiner",
  "title": "The definer column for mysql.event cannot be null or blank.",
  "status": "OK",
  "description": "Error: Set definer column in mysql.event to a valid non-null definer.",
  "detectedProblems": [
      {
        "level": "Error",
        "dbObject": "test.get_version",
        "description": "Set definer for event get_version in Schema test"
      }
  ]
}
```
A pré-verificação exibe um erro para o [evento](https://dev.mysql.com/doc/refman/5.7/en/events-overview.html) `test.get_version` porque ele tem um definidor `null`.  
Para resolver isso, você pode verificar a definição do evento. Como você pode ver, o definidor é `null` ou está em branco.  

```
mysql> select db,name,definer from mysql.event where name='get_version';
+------+-------------+---------+
| db   | name        | definer |
+------+-------------+---------+
| test | get_version |         |
+------+-------------+---------+
1 row in set (0.00 sec)
```
Descarte ou recrie o evento com um definidor válido.  
Antes de descartar ou redefinir um `DEFINER`, analise e verifique cuidadosamente os requisitos da aplicação e de privilégios. Consulte mais informações em [Stored Object Access Control](https://dev.mysql.com/doc/refman/5.7/en/stored-objects-security.html) na documentação do MySQL.

```
mysql> drop event test.get_version;
Query OK, 0 rows affected (0.00 sec)

mysql> DELIMITER ;
mysql> delimiter $$
mysql> CREATE EVENT get_version
    ->     ON SCHEDULE
    ->       EVERY 1 DAY
    ->     DO
    ->      ///DO SOMETHING //
    -> $$
Query OK, 0 rows affected (0.01 sec)

mysql> DELIMITER ;

mysql> select db,name,definer from mysql.event where name='get_version';
+------+-------------+------------+
| db   | name        | definer    |
+------+-------------+------------+
| test | get_version | reinvent@% |
+------+-------------+------------+
1 row in set (0.00 sec)
```
Agora a pré-verificação é concluída com êxito.  

```
{
  "id": "getEventsWithNullDefiner",
  "title": "The definer column for mysql.event cannot be null or blank.",
  "status": "OK",
  "detectedProblems": []},
```

**getMismatchedMetadata**  
**Nível de pré-verificação: erro**  
**Incompatibilidade de definição de coluna entre o dicionário de dados do InnoDB e a definição real da tabela**  
De modo semelhante a [schemaInconsistencyCheck](#schemaInconsistencyCheck), essa pré-verificação verifica se os metadados da tabela no MySQL são consistentes antes de prosseguir com a atualização. Nesse caso, a pré-verificação confere se as definições de coluna são correspondentes entre o dicionário de dados do InnoDB e a definição de tabela do MySQL. Se for detectada uma incompatibilidade, a atualização não prosseguirá.  
Se você encontrar algum erro nessa pré-verificação, abra um caso no [AWS Support](https://aws.amazon.com/support) para solicitar que a inconsistência de metadados seja resolvida. Ou você pode tentar fazer a atualização novamente executando um despejo lógico e, depois, restaurando para um novo cluster de banco de dados do Aurora MySQL versão 3.  
**Exemplos de resultado:**  

```
{
  "id": "getMismatchedMetadata",
  "title": "Column definition mismatch between InnoDB Data Dictionary and actual table definition.",
  "status": "OK",
  "description": "Error: Your database has mismatched metadata. The upgrade to mysql 8.0 will not succeed until this is fixed.",
  "detectedProblems": [
      {
        "level": "Error",
        "dbObject": "test.mismatchTable",
        "description": "Table `test/mismatchTable` column names mismatch with InnoDb dictionary column names: iD <> id"
      }
  ]
}
```
A pré-verificação relata uma incompatibilidade nos metadados da coluna `id` na tabela `test.mismatchTable`. Especificamente, os metadados do MySQL têm o nome de coluna `iD`, enquanto o InnoDB tem o nome `id`.

**getTriggersWithNullDefiner**  
**Nível de pré-verificação: erro**  
**A coluna de definidor referente a `information_schema.triggers` não pode ser `null` nem estar em branco.**  
A pré-verificação confere se o banco de dados não tem gatilhos definidos com definidores `null` ou em branco. Consulte mais informações sobre os requisitos de definidores para objetos armazenados em [getEventsWithNullDefiner](#getEventsWithNullDefiner).  
**Exemplos de resultado:**  

```
{
  "id": "getTriggersWithNullDefiner",
  "title": "The definer column for information_schema.triggers cannot be null or blank.",
  "status": "OK",
  "detectedProblems": [
      {
        "level": "Error",
        "dbObject": "test.example_trigger",
        "description": "Set definer for trigger example_trigger in Schema test"
      }
  ]
}
```
A pré-verificação exibe um erro porque o gatilho `example_trigger` no esquema `test` tem um definidor `null`. Para corrigir esse problema, ajuste o definidor recriando o gatilho com um usuário válido ou descarte o gatilho. Consulte mais informações no exemplo em [getEventsWithNullDefiner](#getEventsWithNullDefiner).  
Antes de descartar ou redefinir um `DEFINER`, analise e verifique cuidadosamente os requisitos da aplicação e de privilégios. Consulte mais informações em [Stored Object Access Control](https://dev.mysql.com/doc/refman/5.7/en/stored-objects-security.html) na documentação do MySQL.

**getValueOfVariablelower\$1case\$1table\$1names**  
**Nível de pré-verificação: erro**  
**Todos os nomes de bancos de dados ou tabelas devem estar em minúsculas quando o parâmetro `lower_case_table_names` é definido como `1`.**  
Antes do MySQL 8.0, os nomes de banco de dados, os nomes de tabela e outros objetos correspondiam a arquivos no diretório de dados, como metadados baseados em arquivos (.frm). A variável de sistema [lower\$1case\$1table\$1names](https://dev.mysql.com/doc/refman/5.7/en/identifier-case-sensitivity.html) permite que os usuários controlem como o servidor lida com a distinção entre letras maiúsculas e minúsculas do identificador para objetos de banco de dados e o armazenamento desses objetos de metadados. Esse parâmetro podia ser alterado em um servidor já inicializado após uma reinicialização.  
No entanto, no MySQL 8.0, embora esse parâmetro ainda controle como o servidor lida com a distinção entre letras maiúsculas e minúsculas do identificador, ele não pode ser alterado após a inicialização do dicionário de dados. Ao fazer a atualização ou criar um banco de dados do MySQL 8.0, o valor definido como `lower_case_table_names` na primeira vez em que o dicionário de dados é iniciado no MySQL é usado durante o ciclo de vida desse banco de dados. Essa restrição foi implementada como parte da implementação do [Atomic Data Dictionary](https://dev.mysql.com/doc/refman/8.0/en/data-dictionary-file-removal.html), em que objetos de banco de dados são migrados de metadados baseados em arquivos para tabelas internas do InnoDB no esquema `mysql`.  
Consulte mais informações em [Data Dictionary Changes](https://dev.mysql.com/doc/refman/8.0/en/upgrading-from-previous-series.html#upgrade-data-dictionary-changes) na documentação do MySQL.  
Para evitar problemas durante a atualização de metadados baseados em arquivo para o novo Atomic Data Dictionary, essa pré-verificação confirma se, quando `lower_case_table_names = 1`, todas as tabelas são armazenadas em disco em letras minúsculas. Se não forem, um erro de pré-verificação será exibido e você deverá corrigir os metadados antes de prosseguir com a atualização.  
**Exemplos de resultado:**  

```
{
  "id": "getValueOfVariablelower_case_table_names",
  "title": "MySQL pre-checks that all database or table names are lowercase when the lower_case_table_names parameter is set to 1.",
  "status": "OK",
  "description": "Error: You have one or more databases or tables with uppercase letters in the names, but the lower_case_table_names parameter is set to 1. To upgrade to MySQL 8.0, either change all database or table names to lowercase, or set the parameter to 0.",
  "detectedProblems": [
      {
        "level": "Error",
        "dbObject": "test.TEST",
        "description": "Table test.TEST contains one or more capital letters in name while lower_case_table_names = 1"
      }
  ]
}
```
Um erro é exibido porque a tabela `test.TEST` contém letras maiúsculas, mas `lower_case_table_names` está definido como `1`.  
Para resolver esse problema, você pode renomear a tabela com letras minúsculas ou modificar o parâmetro `lower_case_table_names` no cluster de banco de dados antes de iniciar a atualização.  
Teste e examine cuidadosamente a documentação sobre a [distinção entre letras maiúsculas e minúsculas](https://dev.mysql.com/doc/refman/5.7/en/identifier-case-sensitivity.html) no MySQL e como essas alterações podem afetar sua aplicação.  
Consulte também a documentação do MySQL 8.0 sobre como [lower\$1case\$1table\$1names](https://dev.mysql.com/doc/refman/8.0/en/server-system-variables.html#sysvar_lower_case_table_names) são tratados de forma diferente no MySQL 8.0.

**groupByAscSyntaxCheck**  
**Nível de pré-verificação: erro**  
**Uso da sintaxe `GROUP BY ASC/DESC` removida**  
Desde o MySQL 8.0.13, a sintaxe obsoleta `ASC` ou `DESC` para cláusulas `GROUP BY` foi removida. As consultas que dependem da classificação `GROUP BY` agora podem produzir resultados diferentes. Para ter uma ordem de classificação específica, use uma cláusula `ORDER BY`. Se algum objeto no banco de dados estiver usando essa sintaxe, você deverá recriá-lo por meio de uma cláusula `ORDER BY` antes de tentar fazer a atualização novamente. Consulte mais informações em [SQL Changes](https://dev.mysql.com/doc/refman/8.0/en/upgrading-from-previous-series.html#upgrade-sql-changes) na documentação do MySQL.  
**Exemplos de resultado:**  

```
{
  "id": "groupbyAscSyntaxCheck",
  "title": "Usage of removed GROUP BY ASC/DESC syntax",
  "status": "OK",
  "description": "Error: The following DB objects use removed GROUP BY ASC/DESC syntax. They need to be altered so that ASC/DESC keyword is removed from GROUP BY clause and placed in appropriate ORDER BY clause.",
  "documentationLink": "https://dev.mysql.com/doc/relnotes/mysql/8.0/en/news-8-0-13.html#mysqld-8-0-13-sql-syntax",
  "detectedProblems": [
      {
        "level": "Error",
        "dbObject": "test.groupbyasc",
        "description": "PROCEDURE uses removed GROUP BY ASC syntax",
        "dbObjectType": "Routine"
      }
  ]
}
```

**mysqlEmptyDotTableSyntaxCheck**  
**Nível de pré-verificação: erro**  
**Verifique a sintaxe obsoleta `.<table>` usada nas rotinas.**  
No MySQL 8.0, as rotinas não podem mais conter a sintaxe obsoleta do identificador (`\".<table>\"`). Se alguma rotina ou gatilho armazenado tiver esses identificadores, a atualização falhará. Por exemplo, a seguinte referência a `.dot_table` não é mais permitida:  

```
mysql> show create procedure incorrect_procedure\G
*************************** 1. row ***************************
           Procedure: incorrect_procedure
            sql_mode:
    Create Procedure: CREATE DEFINER=`reinvent`@`%` PROCEDURE `incorrect_procedure`()
BEGIN delete FROM .dot_table; select * from .dot_table where 1=1; END
character_set_client: utf8mb4
collation_connection: utf8mb4_0900_ai_ci
  Database Collation: latin1_swedish_ci
1 row in set (0.00 sec)
```
Depois que você recria as rotinas e os gatilhos para usar o escape e a sintaxe correta do identificador, a pré-verificação é concluída com êxito e a atualização pode prosseguir. Consulte mais informações sobre identificadores em [Schema Object Names](https://dev.mysql.com/doc/refman/8.0/en/identifiers.html) na documentação do MySQL.  
**Exemplos de resultado:**  

```
{
  "id": "mysqlEmptyDotTableSyntaxCheck",
  "title": "Check for deprecated '.<table>' syntax used in routines.",
  "status": "OK",
  "description": "Error: The following routines contain identifiers in deprecated identifier syntax (\".<table>\"), and should be corrected before upgrade:\n",
  "detectedProblems": [
      {
        "level": "Error",
        "dbObject": "test.incorrect_procedure",
        "description": " routine body contains deprecated identifiers."
      }
  ]
}
```
A pré-verificação exibe um erro referente à rotina `incorrect_procedure` no banco de dados `test` porque ela contém uma sintaxe obsoleta.  
Depois que você corrige a rotina, a pré-verificação é bem-sucedida e você pode tentar fazer a atualização novamente.

**mysqlIndexTooLargeCheck**  
**Nível de pré-verificação: erro**  
**Verifique se há índices que são muito grandes para funcionar em versões do MySQL posteriores à 5.7**  
Com relação a formatos de linha compactos ou redundantes, não deveria ser possível criar um índice com um prefixo com mais de 767 bytes. No entanto, antes do MySQL versão 5.7.35, isso era possível. Consulte mais informações em [MySQL 5.7.35 Release Notes](https://dev.mysql.com/doc/relnotes/mysql/5.7/en/news-5-7-35.html).  
Todos os índices afetados por esse erro ficarão inacessíveis após a atualização para o MySQL 8.0. Essa pré-verificação identifica índices incorretos que precisam ser recriados antes que a atualização possa prosseguir.  

```
 {
  "id": "mysqlIndexTooLargeCheck",
  "title": "Check for indexes that are too large to work on higher versions of MySQL Server than 5.7",
  "status": "OK",
  "description": "Error: The following indexes ware made too large for their format in an older version of MySQL (older than 5.7.34). Normally those indexes within tables with compact or redundant row formats shouldn't be larger than 767 bytes. To fix this problem those indexes should be dropped before upgrading or those tables will be inaccessible.",
  "detectedProblems": [
      {
        "level": "Error",
        "dbObject": "test.table_with_large_idx",
        "description": "IDX_2"
      }
  ]
}
```
A pré-verificação exibe um erro porque a tabela `test.table_with_large_idx` contém um índice em uma tabela que usa um formato de linha compacto ou redundante com mais de 767 bytes. Essas tabelas ficariam inacessíveis depois da atualização para o MySQL 8.0. Antes de prosseguir com a atualização, execute uma destas ações:  
+ Elimine o índice mencionado na pré-verificação.
+ Adicione um índice mencionado na pré-verificação.
+ Altere o formato da linha usado pela tabela.
Aqui, nós recriamos a tabela para resolver a falha de pré-verificação. Antes de recriar a tabela, verifique se o [innodb\$1file\$1format](https://dev.mysql.com/doc/refman/5.7/en/innodb-parameters.html#sysvar_innodb_file_format) está definido como `Barracuda` e o [innodb\$1default\$1row\$1format](https://dev.mysql.com/doc/refman/5.7/en/innodb-parameters.html#sysvar_innodb_default_row_format) está definido como `dynamic`. Esses são os padrões no MySQL 5.7. Consulte mais informações em [InnoDB Row Formats](https://dev.mysql.com/doc/refman/5.7/en/innodb-row-format.html) e em [InnoDB File-Format Management](https://dev.mysql.com/doc/refman/5.7/en/innodb-file-format.html) na documentação do MySQL.  
Antes de recriar espaços de tabela, consulte [Online DDL Operations](https://dev.mysql.com/doc/refman/5.7/en/innodb-online-ddl-operations.html) na documentação do MySQL para entender os efeitos do bloqueio e da movimentação de dados nas transações em primeiro plano.

```
mysql > select @@innodb_file_format,@@innodb_default_row_format;
+----------------------+-----------------------------+
| @@innodb_file_format | @@innodb_default_row_format |
+----------------------+-----------------------------+
| Barracuda            | dynamic                     |
+----------------------+-----------------------------+
1 row in set (0.00 sec)

mysql> optimize table table_with_large_idx;
+---------------------------+----------+----------+-------------------------------------------------------------------+
| Table                     | Op       | Msg_type | Msg_text                                                          |
+---------------------------+----------+----------+-------------------------------------------------------------------+
| test.table_with_large_idx | optimize | note     | Table does not support optimize, doing recreate + analyze instead |
| test.table_with_large_idx | optimize | status   | OK                                                                |
+---------------------------+----------+----------+-------------------------------------------------------------------+
2 rows in set (0.02 sec)

# Verify FILE_FORMAT and ROW_FORMAT
mysql>  select * from information_schema.innodb_sys_tables where name like 'test/table_with_large_idx';
+----------+---------------------------+------+--------+-------+-------------+------------+---------------+------------+
| TABLE_ID | NAME                      | FLAG | N_COLS | SPACE | FILE_FORMAT | ROW_FORMAT | ZIP_PAGE_SIZE | SPACE_TYPE |
+----------+---------------------------+------+--------+-------+-------------+------------+---------------+------------+
|       43 | test/table_with_large_idx |   33 |      4 |    26 | Barracuda   | Dynamic    |             0 | Single     |
+----------+---------------------------+------+--------+-------+-------------+------------+---------------+------------+
1 row in set (0.00 sec)
```
Após a recriação da tabela, a pré-verificação é concluída com êxito e a atualização pode prosseguir.  

```
{
  "id": "mysqlIndexTooLargeCheck",
  "title": "Check for indexes that are too large to work on higher versions of MySQL Server than 5.7",
  "status": "OK",
  "detectedProblems": []
},
```

**mysqlInvalid57NamesCheck**  
**Nível de pré-verificação: erro**  
**Verifique se há nomes inválidos de tabelas e esquemas usados no MySQL 5.7**  
Ao migrar para o novo dicionário de dados no MySQL 8.0, a instância de banco de dados não pode conter esquemas ou tabelas com o prefixo `#mysql50#`. Se algum desses objetos existir, a atualização falhará. Para resolver esse problema, execute [mysqlcheck](https://dev.mysql.com/doc/refman/8.0/en/mysqlcheck.html) nos esquemas e tabelas exibidos.  
Você deve usar uma [versão do MySQL 5.7](https://downloads.mysql.com/archives/community/) de `mysqlcheck`, pois [--fix-db-names](https://dev.mysql.com/doc/refman/5.7/en/mysqlcheck.html#option_mysqlcheck_fix-db-names) e [--fix-table-names](https://dev.mysql.com/doc/refman/5.7/en/mysqlcheck.html#option_mysqlcheck_fix-table-names) foram removidos do [MySQL 8.0](https://dev.mysql.com/doc/refman/8.0/en/mysql-nutshell.html).
**Exemplos de resultado:**  

```
{
  "id": "mysqlInvalid57NamesCheck",
  "title": "Check for invalid table names and schema names used in 5.7",
  "status": "OK",
  "description": "The following tables and/or schemas have invalid names. In order to fix them use the mysqlcheck utility as follows:\n\n  $ mysqlcheck --check-upgrade --all-databases\n  $ mysqlcheck --fix-db-names --fix-table-names --all-databases\n\nOR via mysql client, for eg:\n\n  ALTER DATABASE `#mysql50#lost+found` UPGRADE DATA DIRECTORY NAME;",
  "documentationLink": "https://dev.mysql.com/doc/refman/5.7/en/identifier-mapping.html https://dev.mysql.com/doc/refman/5.7/en/alter-database.html https://dev.mysql.com/doc/refman/8.0/en/mysql-nutshell.html#mysql-nutshell-removals",
  "detectedProblems": [
      {
        "level": "Error",
        "dbObject": "#mysql50#fix_db_names",
        "description": "Schema name"
      }
  ]
}
```
A pré-verificação informa que o esquema `#mysql50#fix_db_names` tem um nome inválido.  
Após a correção do nome do esquema, a pré-verificação é concluída com êxito, permitindo que a atualização prossiga.  

```
{
  "id": "mysqlInvalid57NamesCheck",
  "title": "Check for invalid table names and schema names used in 5.7",
  "status": "OK",
  "detectedProblems": []
},
```

**mysqlOrphanedRoutinesCheck**  
**Nível de pré-verificação: erro**  
**Verifique se há rotinas órfãs na versão 5.7**  
Ao migrar para o novo dicionário de dados no MySQL 8.0, se houver algum procedimento armazenado no banco de dados em que o esquema não exista mais, a atualização falhará. Essa pré-verificação confere se todos os esquemas referidos nos procedimentos armazenados na instância de banco de dados ainda existem. Para permitir que a atualização prossiga, descarte esses procedimentos armazenados.  
**Exemplos de resultado:**  

```
{
  "id": "mysqlOrphanedRoutinesCheck",
  "title": "Check for orphaned routines in 5.7",
  "status": "OK",
  "description": "Error: The following routines have been orphaned. Schemas that they are referencing no longer exists.\nThey have to be cleaned up or the upgrade will fail.",
  "detectedProblems": [
      {
        "level": "Error",
        "dbObject": "dropped_db.get_version",
        "description": "is orphaned"
      }
  ]
},
```
A pré-verificação informa que o procedimento armazenado `get_version` no banco de dados `dropped_db` é órfão.  
Para limpar esse procedimento, você pode recriar o esquema ausente.  

```
mysql> create database dropped_db;
Query OK, 1 row affected (0.01 sec)
```
Depois que o esquema for recriado, você poderá descartar o procedimento para permitir que a atualização prossiga.  

```
{
  "id": "mysqlOrphanedRoutinesCheck",
  "title": "Check for orphaned routines in 5.7",
  "status": "OK",
  "detectedProblems": []
},
```

**mysqlSchemaCheck**  
**Nível de pré-verificação: erro**  
**Nomes de tabela no esquema `mysql` conflitantes com novas tabelas no MySQL 8.0**  
O novo [Atomic Data Dictionary](https://dev.mysql.com/doc/refman/8.0/en/data-dictionary-file-removal.html), introduzido no MySQL 8.0, armazena todos os metadados em um conjunto de tabelas internas do InnoDB no esquema `mysql`. Durante a atualização, as novas [tabelas do dicionário de dados interno](https://dev.mysql.com/doc/refman/8.0/en/data-dictionary-schema.html) são criadas no esquema `mysql`. Para evitar conflitos de nomenclatura, que resultariam em falhas de atualização, a pré-verificação examina todos os nomes de tabela no esquema `mysql` para garantir que nenhum dos novos nomes já esteja em uso. Se estiverem, um erro será exibido, e a atualização não poderá prosseguir.  
**Exemplos de resultado:**  

```
{
  "id": "mysqlSchema",
  "title": "Table names in the mysql schema conflicting with new tables in the latest MySQL.",
  "status": "OK",
  "description": "Error: The following tables in mysql schema have names that will conflict with the ones introduced in the latest version. They must be renamed or removed before upgrading (use RENAME TABLE command). This may also entail changes to applications that use the affected tables.",
  "documentationLink": "https://dev.mysql.com/doc/refman/8.0/en/upgrade-before-you-begin.html",
  "detectedProblems": [
      {
        "level": "Error",
        "dbObject": "mysql.tablespaces",
        "description": "Table name used in mysql schema.",
        "dbObjectType": "Table"
      }
  ]
}
```
Um erro é exibido porque há uma tabela chamada `tablespaces` no esquema `mysql`. Esse é um dos novos nomes de tabela do dicionário de dados interno no MySQL 8.0. Você deve renomear ou remover essas tabelas antes da atualização usando o comando `RENAME TABLE`.

**nonNativePartitioningCheck**  
**Nível de pré-verificação: erro**  
**Tabelas particionadas usando mecanismos com particionamento não nativo**  
De acordo com a [documentação do MySQL 8.0](https://dev.mysql.com/doc/refman/8.0/en/mysql-nutshell.html), no momento, dois mecanismos de armazenamento fornecem suporte nativo ao particionamento: [InnoDB](https://dev.mysql.com/doc/refman/8.0/en/innodb-storage-engine.html) e [NDB](https://dev.mysql.com/doc/refman/8.0/en/mysql-cluster.html). Dentre eles, somente o InnoDB é compatível com o Aurora MySQL versão 3 compatível com o MySQL 8.0. Qualquer tentativa de criar tabelas particionadas no MySQL 8.0 usando qualquer outro mecanismo de armazenamento apresenta falha. Essa pré-verificação procura tabelas no cluster de banco de dados que estão usando particionamento não nativo. Se encontrar algum resultado, você deverá remover o particionamento ou realizar a conversão do mecanismo de armazenamento para o InnoDB.  
**Exemplos de resultado:**  

```
{
  "id": "nonNativePartitioning",
  "title": "Partitioned tables using engines with non native partitioning",
  "status": "OK",
  "description": "Error: In the latest MySQL storage engine is responsible for providing its own partitioning handler, and the MySQL server no longer provides generic partitioning support. InnoDB and NDB are the only storage engines that provide a native partitioning handler that is supported in the latest MySQL. A partitioned table using any other storage engine must be altered—either to convert it to InnoDB or NDB, or to remove its partitioning—before upgrading the server, else it cannot be used afterwards.",
  "documentationLink": "https://dev.mysql.com/doc/refman/8.0/en/upgrading-from-previous-series.html#upgrade-configuration-changes",
  "detectedProblems": [
      {
        "level": "Error",
        "dbObject": "test.partMyisamTable",
         "description": "MyISAM engine does not support native partitioning",
         "dbObjectType": "Table"
      }
  ]
}
```
Aqui, uma tabela MyISAM está usando particionamento, o que requer uma ação para que a atualização possa prosseguir.

**oldTemporalCheck**  
**Nível de pré-verificação: erro**  
**Uso do tipo temporal antigo**  
“Temporais antigos” referem-se às colunas do tipo temporal (como `TIMESTAMP` e`DATETIME`) criadas no MySQL versões 5.5 e anteriores. No MySQL 8.0, a compatibilidade com esses tipos de dados temporais antigos foi removida, o que significa que as atualizações no local do MySQL 5.7 para 8.0 não serão possíveis se o banco de dados tiver esses tipos temporais antigos. Para corrigir isso, você deve [recriar](https://dev.mysql.com/doc/refman/5.7/en/rebuilding-tables.html) todas as tabelas que contenham esses tipos de dados temporais antigos antes de prosseguir com a atualização.  
Consulte mais informações sobre a descontinuação de tipos de dados temporais antigos no MySQL 5.7 neste [blog](https://dev.mysql.com/blog-archive/how-to-easily-identify-tables-with-temporal-types-in-old-format/). Consulte mais informações sobre a remoção de tipos de dados temporais antigos no MySQL 8.0 neste [blog](https://dev.mysql.com/blog-archive/mysql-8-0-removing-support-for-old-temporal-datatypes/).  
Antes de recriar espaços de tabela, consulte [Online DDL Operations](https://dev.mysql.com/doc/refman/5.7/en/innodb-online-ddl-operations.html) na documentação do MySQL para entender os efeitos do bloqueio e da movimentação de dados nas transações em primeiro plano.
**Exemplos de resultado:**  

```
{
  "id": "oldTemporalCheck",
  "title": "Usage of old temporal type",
  "status": "OK",
  "description": "Error: Following table columns use a deprecated and no longer supported temporal disk storage format. They must be converted to the new format before upgrading. It can by done by rebuilding the table using 'ALTER TABLE <table_name> FORCE' command",
  "documentationLink": "https://dev.mysql.com/blog-archive/mysql-8-0-removing-support-for-old-temporal-datatypes/",
  "detectedProblems": [
      {
        "level": "Error",
        "dbObject": "test.55_temporal_table.timestamp_column",
        "description": "timestamp /* 5.5 binary format */",
        "dbObjectType": "Column"
      }
  ]
},
```
Um erro é relatado para a coluna `timestamp_column` na tabela `test.55_temporal_table`, porque ela usa um formato de armazenamento em disco temporal antigo que não é mais compatível.  
Para resolver esse problema e permitir que a atualização prossiga, recrie a tabela para converter o formato de armazenamento em disco temporal antigo no novo apresentado no MySQL 5.6. Antes de fazer isso, consulte mais informações e pré-requisitos em [Converting Between 3-Byte And 4-Byte Unicode Character Sets](https://dev.mysql.com/doc/refman/8.0/en/charset-unicode-conversion.html) na documentação do MySQL.  
A execução do comando a seguir para recriar as tabelas mencionadas nessa pré-verificação converte os tipos temporais antigos no formato mais novo com precisão de fração de segundos.  

```
ALTER TABLE ... ENGINE=InnoDB;
```
Consulte mais informações sobre como recriar tabelas em [ALTER TABLE Statement](https://dev.mysql.com/doc/refman/8.0/en/alter-table.html) na documentação do MySQL.  
Depois que você recria a tabela em questão e reinicia a atualização, a verificação de compatibilidade é concluída com êxito, permitindo que a atualização prossiga.  

```
{
  "id": "oldTemporalCheck",
  "title": "Usage of old temporal type",
  "status": "OK",
  "detectedProblems": []
}
```

**partitionedTablesInSharedTablespaceCheck**  
**Nível de pré-verificação: erro**  
**Uso de tabelas particionadas em espaços de tabela compartilhados**  
Desde o [MySQL 8.0.13](https://dev.mysql.com/doc/relnotes/mysql/8.0/en/news-8-0-13.html), não é mais possível colocar partições de tabela em espaços de tabela compartilhados. Antes da atualização, mova essas tabelas de espaços de tabela compartilhados para espaços de tabela de arquivo por tabela.  
Antes de recriar espaços de tabela, consulte [Partitioning Operations](https://dev.mysql.com/doc/refman/5.7/en/innodb-online-ddl-operations.html#online-ddl-partitioning) na documentação do MySQL para entender os efeitos do bloqueio e da movimentação de dados nas transações em primeiro plano.
**Exemplos de resultado:**  

```
{
  "id": "partitionedTablesInSharedTablespaceCheck",
  "title": "Usage of partitioned tables in shared tablespaces",
  "status": "OK",
  "description": "Error: The following tables have partitions in shared tablespaces. They need to be moved to file-per-table tablespace before upgrading. You can do this by running query like 'ALTER TABLE table_name REORGANIZE PARTITION X INTO (PARTITION X VALUES LESS THAN (30) TABLESPACE=innodb_file_per_table);'",
  "documentationLink": "https://dev.mysql.com/doc/refman/8.0/en/mysql-nutshell.html#mysql-nutshell-removals",
  "detectedProblems": [
      {
        "level": "Error",
        "dbObject": "test.partInnoDBTable",
        "description": "Partition p1 is in shared tablespace innodb",
        "dbObjectType": "Table"
      }
  ]
}
```
A pré-verificação falha porque a partição `p1` da tabela `test.partInnoDBTable` está no espaço de tabela do sistema.  
Para resolver esse problema, recrie a tabela `test.partInnodbTable`, colocando a partição incorreta `p1` em um espaço de tabela de arquivo por tabela.  

```
mysql > ALTER TABLE partInnodbTable REORGANIZE PARTITION p1
    ->   INTO (PARTITION p1 VALUES LESS THAN ('2014-01-01') TABLESPACE=innodb_file_per_table);
Query OK, 0 rows affected, 1 warning (0.02 sec)
Records: 0  Duplicates: 0  Warnings: 0
```
Depois disso, a pré-verificação é concluída com êxito.  

```
{
  "id": "partitionedTablesInSharedTablespaceCheck",
  "title": "Usage of partitioned tables in shared tablespaces",
  "status": "OK",
  "detectedProblems": []
}
```

**removedFunctionsCheck**  
**Nível de pré-verificação: erro**  
**Uso de funções que foram removidas da versão mais recente do MySQL**  
No MySQL 8.0, várias funções integradas foram removidas. Essa pré-verificação examina o banco de dados em busca de objetos que possam usar essas funções. Se algo for encontrado, será exibido um erro. Você deve resolver os problemas antes de tentar fazer a atualização novamente.  
As funções removidas são em sua maioria [funções espaciais](https://dev.mysql.com/doc/refman/5.7/en/gis-wkt-functions.html), que foram substituídas por funções `ST_*` equivalentes. Nesses casos, você modifica os objetos do banco de dados para usar a nova nomenclatura do procedimento. Para obter mais informações, consulte [ Recursos removidos no MySQL 8.0](https://dev.mysql.com/doc/refman/8.0/en/mysql-nutshell.html#mysql-nutshell-removals) na documentação do MySQL.  
**Exemplos de resultado:**  

```
{
  "id": "removedFunctionsCheck",
  "title": "Usage of removed functions",
  "status": "OK",
  "description": "Error: The following DB objects use functions that were removed in the latest MySQL version. Please make sure to update them to use supported alternatives before upgrade.",
  "documentationLink": "https://dev.mysql.com/doc/refman/8.0/en/mysql-nutshell.html#mysql-nutshell-removals",
  "detectedProblems": [
      {
        "level": "Error",
        "dbObject": "test.GetLocationsInPolygon",
        "description": "PROCEDURE uses removed function POLYGONFROMTEXT (consider using ST_POLYGONFROMTEXT instead)",
        "dbObjectType": "Routine"
      },
      {
        "level": "Error",
        "dbObject": "test.InsertLocation",
        "description": "PROCEDURE uses removed function POINTFROMTEXT (consider using ST_POINTFROMTEXT instead)",
        "dbObjectType": "Routine"
      }
  ]
},
```
A pré-verificação informa que o procedimento armazenado `test.GetLocationsInPolygon` está usando duas funções removidas: [POLYGONFROMTEXT](https://dev.mysql.com/doc/refman/5.7/en/gis-wkt-functions.html#function_polyfromtext) e [POINTFROMTEXT](https://dev.mysql.com/doc/refman/5.7/en/gis-wkt-functions.html#function_st-mpointfromtext). Ela também sugere que você use como substituição [ST\$1POLYGONFROMTEXT](https://dev.mysql.com/doc/refman/8.0/en/gis-wkt-functions.html#function_st-polyfromtext) e [ST\$1POINTFROMTEXT](https://dev.mysql.com/doc/refman/8.0/en/gis-wkt-functions.html#function_st-mpointfromtext) novos. Depois que você recria o procedimento usando as sugestões, a pré-verificação é concluída com êxito.  

```
{
  "id": "removedFunctionsCheck",
  "title": "Usage of removed functions",
  "status": "OK",
  "detectedProblems": []
},
```
Embora, na maioria dos casos, as funções obsoletas tenham substituições diretas, teste a aplicação e examine a documentação em busca de quaisquer mudanças de comportamento resultantes da alteração.

**routineSyntaxCheck**  
**Nível de pré-verificação: erro**  
**Verificação de sintaxe do MySQL para objetos de rotina**  
O MySQL 8.0 introduziu [palavras-chave reservadas](https://dev.mysql.com/doc/mysqld-version-reference/en/keywords-8-0.html#keywords-new-in-8-0) que não eram reservadas anteriormente. A pré-verificação de atualização avalia o uso de palavras-chave reservadas nos nomes de objeto de banco de dados e em suas definições e corpo. Se for detectado que estão sendo usadas palavras-chave reservadas em objetos de banco de dados, como procedimentos armazenados, funções, eventos e gatilhos, a atualização falhará e um erro será publicado no arquivo `upgrade-prechecks.log`. Para resolver o problema, você deve atualizar essas definições de objeto e colocar essas referências entre aspas simples (‘’) antes da atualização. Consulte mais informações sobre o escape de palavras reservadas no MySQL em [String Literals](https://dev.mysql.com/doc/refman/8.0/en/string-literals.html) na documentação do MySQL.  
Ou é possível alterar o nome para um nome diferente, o que pode exigir alterações na aplicação.  
**Exemplos de resultado:**  

```
{
  "id": "routineSyntaxCheck",
  "title": "MySQL syntax check for routine-like objects",
  "status": "OK",
  "description": "The following objects did not pass a syntax check with the latest MySQL grammar. A common reason is that they reference names that conflict with new reserved keywords. You must update these routine definitions and `quote` any such references before upgrading.",
  "documentationLink": "https://dev.mysql.com/doc/refman/en/keywords.html",
  "detectedProblems": [
      {
         "level": "Error",
         "dbObject": "test.select_res_word",
         "description": "at line 2,18: unexpected token 'except'",
         "dbObjectType": "Routine"
      }
  ]
}
```
Para corrigir esse problema, confira a definição da rotina.  

```
SHOW CREATE PROCEDURE test.select_res_word\G

*************************** 1. row ***************************
           Procedure: select_res_word
            sql_mode: ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
    Create Procedure: CREATE PROCEDURE 'select_res_word'()
BEGIN
    SELECT * FROM except;
END
character_set_client: utf8
collation_connection: utf8_general_ci
  Database Collation: latin1_swedish_ci
1 row in set (0.00 sec)
```
O procedimento usa uma tabela chamada `except`, que é uma nova palavra-chave no MySQL 8.0. Recrie o procedimento fazendo o escape do literal da string.  

```
> drop procedure if exists select_res_word;
Query OK, 0 rows affected (0.00 sec)

> DELIMITER $$
 > CREATE PROCEDURE select_res_word()
    -> BEGIN
    ->     SELECT * FROM 'except';
    -> END$$
Query OK, 0 rows affected (0.00 sec)

 > DELIMITER ;
```
A pré-verificação agora é concluída com êxito.  

```
{
  "id": "routineSyntaxCheck",
  "title": "MySQL syntax check for routine-like objects",
  "status": "OK",
  "detectedProblems": []
}
```

**schemaInconsistencyCheck**  
**Nível de pré-verificação: erro**  
**Inconsistências em esquemas resultantes da remoção ou corrupção de arquivos**  
Como descrito anteriormente, o MySQL 8.0 introduziu o [Atomic Data Dictionary](https://dev.mysql.com/doc/refman/8.0/en/data-dictionary-file-removal.html), que armazena todos os metadados em um conjunto de tabelas internas do InnoDB no esquema `mysql`. Essa nova arquitetura oferece uma forma transacional compatível com [ACID](https://en.wikipedia.org/wiki/ACID) de gerenciar metadados de banco de dados, resolvendo o problema de “DDL atômica” com a antiga abordagem baseada em arquivos. Antes do MySQL 8.0, era possível que objetos de esquema ficassem órfãos se uma operação de DDL fosse interrompida inesperadamente. A migração de metadados baseados em arquivos para as novas tabelas do Atomic Data Dictionary durante a atualização garante que não existam esses objetos de esquema órfãos na instância de banco de dados. Se algum objeto órfão for encontrado, a atualização falhará.  
Para ajudar a detectar esses objetos órfãos antes de iniciar a atualização, a `schemaInconsistencyCheck` pré-verificação é executada para garantir que todos os objetos de metadados do dicionário de dados estejam sincronizados. Se algum objeto de metadados órfão for detectado, a atualização não prosseguirá. Para continuar com a a atualização, limpe esses objetos de metadados órfãos.  
Se você encontrar algum erro nessa pré-verificação, abra um caso no [AWS Support](https://aws.amazon.com/support) para solicitar que a inconsistência de metadados seja resolvida. Ou você pode tentar fazer a atualização novamente executando um despejo lógico e, depois, restaurando para um novo cluster de banco de dados do Aurora MySQL versão 3.  
**Exemplos de resultado:**  

```
{
  "id": "schemaInconsistencyCheck",
  "title": "Schema inconsistencies resulting from file removal or corruption",
  "status": "OK",
  "description": "Error: Following tables show signs that either table datadir directory or frm file was removed/corrupted. Please check server logs, examine datadir to detect the issue and fix it before upgrade",
  "detectedProblems": [
      {
        "level": "Error",
        "dbObject": "test.schemaInconsistencyCheck_failure",
        "description": "present in INFORMATION_SCHEMA's INNODB_SYS_TABLES table but missing from TABLES table"
      }
  ]
}
```
A pré-verificação informa que a tabela `test.schemaInconsistencyCheck_failure` tem metadados inconsistentes. Nesse caso, a tabela existe nos metadados do mecanismo de armazenamento do InnoDB (`information_schema.INNODB_SYS_TABLES`), mas não nos metadados do MySQL (`information_schema.TABLES`).

### Pré-verificações do Aurora MySQL que relatam erros
<a name="precheck-descriptions-errors.aurora"></a>

As pré-verificações a seguir são específicas do Aurora MySQL:
+ [auroraCheckDDLRecovery](#auroraCheckDDLRecovery)
+ [auroraCheckRdsUpgradePrechecksTable](#auroraCheckRdsUpgradePrechecksTable)
+ [auroraFODUpgradeCheck](#auroraFODUpgradeCheck)
+ [auroraGetDanglingFulltextIndex](#auroraGetDanglingFulltextIndex)
+ [auroraUpgradeCheckForDatafilePathInconsistency](#auroraUpgradeCheckForDatafilePathInconsistency)
+ [auroraUpgradeCheckForFtsSpaceIdZero](#auroraUpgradeCheckForFtsSpaceIdZero)
+ [auroraUpgradeCheckForIncompleteXATransactions](#auroraUpgradeCheckForIncompleteXATransactions)
+ [auroraUpgradeCheckForInstanceLimit](#auroraUpgradeCheckForInstanceLimit)
+ [auroraUpgradeCheckForInternalUsers](#auroraUpgradeCheckForInternalUsers)
+ [auroraUpgradeCheckForMasterUser](#auroraUpgradeCheckForMasterUser)
+ [auroraUpgradeCheckForPrefixIndexOnGeometryColumns](#auroraUpgradeCheckForPrefixIndexOnGeometryColumns)
+ [auroraUpgradeCheckForSpecialCharactersInProcedures](#auroraUpgradeCheckForSpecialCharactersInProcedures)
+ [auroraUpgradeCheckForSysSchemaObjectTypeMismatch](#auroraUpgradeCheckForSysSchemaObjectTypeMismatch)
+ [auroraUpgradeCheckForViewColumnNameLength](#auroraUpgradeCheckForViewColumnNameLength)
+ [auroraUpgradeCheckIndexLengthLimitOnTinyColumns](#auroraUpgradeCheckIndexLengthLimitOnTinyColumns)
+ [auroraUpgradeCheckMissingInnodbMetadataForMysqlHostTable](#auroraUpgradeCheckMissingInnodbMetadataForMysqlHostTable)
+ [auroraUpgradeCheckForInvalidUtf8mb3ColumnComments](#auroraUpgradeCheckForInvalidUtf8mb3ColumnComments)

**auroraCheckDDLRecovery**  
**Nível de pré-verificação: erro**  
**Verifique se há artefatos relacionados ao recurso de recuperação de DDL do Aurora**  
Como parte da implementação de recuperação da linguagem de definição de dados (DDL) no Aurora MySQL, os metadados nas instruções de DDL em trânsito são mantidos nas tabelas `ddl_log_md_table` e `ddl_log_table` no esquema `mysql`. A implementação da recuperação de DDL do Aurora não é compatível com a versão 3 em diante, porque a funcionalidade faz parte da nova implementação do [Atomic Data Dictionary](https://dev.mysql.com/doc/refman/8.0/en/data-dictionary-file-removal.html) no MySQL 8.0. Se você tiver alguma instrução de DDL em execução durante as verificações de compatibilidade, essa pré-verificação poderá falhar. Recomendamos tentar fazer a atualização quando nenhuma instrução de DDL estiver em execução.  
Se essa pré-verificação falhar sem que nenhuma instrução de DDL esteja em execução, abra um caso no [AWS Support](https://aws.amazon.com/support) para solicitar que a inconsistência de metadados seja resolvida. Ou você pode tentar fazer a atualização novamente executando um despejo lógico e, depois, restaurando para um novo cluster de banco de dados do Aurora MySQL versão 3.  
Se alguma instrução DDL estiver em execução, a saída da pré-verificação imprimirá a seguinte mensagem:  

```
“There are DDL statements in process. Please allow DDL statements to finish before upgrading.”
```
**Exemplos de resultado:**  

```
{
  "id": "auroraCheckDDLRecovery",
  "title": "Check for artifacts related to Aurora DDL recovery feature",
  "status": "OK",
  "description": "Aurora implementation of DDL recovery is not supported from 3.x onwards. This check verifies that the database do not have artifacts realted to the feature",
  "detectedProblems": [
      {
        "level": "Error",
        "dbObject": "mysql.ddl_log_md_table",
        "description": "Table mysql.ddl_log_md_table is not empty. Your database has pending DDL recovery operations. Reachout to AWS support for assistance."
      },
      {
        "level": "Error",
        "dbObject": "mysql.ddl_log_table",
        "description": "Table mysql.ddl_log_table is not empty. Your database has pending DDL recovery operations. Reachout to AWS support for assistance."
      },
      {
        "level": "Error",
        "dbObject": "information_schema.processlist",
        "description": "There are DDL statements in process. Please allow DDL statements to finish before upgrading."
      }
  ]
}
```
A pré-verificação exibiu um erro devido à execução simultânea de um DDL em trânsito com as verificações de compatibilidade. Recomendamos que você tente fazer a atualização novamente sem DDLs em execução.

**auroraCheckRdsUpgradePrechecksTable**  
**Nível de pré-verificação: erro**  
**Verifique a existência da tabela `mysql.rds_upgrade_prechecks`**  
Essa é uma pré-verificação somente interna realizada pelo serviço RDS. Os erros serão gerenciados automaticamente na atualização e podem ser ignorados com segurança.  
Se você encontrar algum erro nessa pré-verificação, abra um caso no [AWS Support](https://aws.amazon.com/support) para solicitar que a inconsistência de metadados seja resolvida. Ou você pode tentar fazer a atualização novamente executando um despejo lógico e, depois, restaurando para um novo cluster de banco de dados do Aurora MySQL versão 3.  

```
{
  "id": "auroraCheckRdsUpgradePrechecksTable",
  "title": "Check existence of mysql.rds_upgrade_prechecks table",
  "status": "OK",
  "detectedProblems": []
}
```

**auroraFODUpgradeCheck**  
**Nível de pré-verificação: erro**  
**Verifique se há artefatos relacionados ao recurso de DDL rápida do Aurora**  
A otimização da [DDL rápida](AuroraMySQL.Managing.FastDDL.md) foi introduzida no [modo de laboratório](AuroraMySQL.Updates.LabMode.md) no Aurora MySQL versão 2 para melhorar a eficiência de algumas operações de DDL. No Aurora MySQL versão 3, o modo de laboratório foi removido e a implementação da DDL rápida foi substituída pelo recurso do MySQL 8.0 chamado [DDL instantânea](https://dev.mysql.com/doc/refman/8.4/en/innodb-online-ddl-operations.html).  
Antes de fazer a atualização para o Aurora MySQL versão 3, todas as tabelas que usam a DDL rápida no modo de laboratório precisarão ser recriadas executando o comando `OPTIMIZE TABLE` ou `ALTER TABLE ... ENGINE=InnoDB` para garantir a compatibilidade com o Aurora MySQL versão 3.  
Essa pré-verificação exibe uma lista dessas tabelas. Depois que você recriar as tabelas exibidas, você poderá tentar fazer a atualização novamente.  
**Exemplos de resultado:**  

```
{
  "id": "auroraFODUpgradeCheck",
  "title": "Check for artifacts related to Aurora fast DDL feature",
  "status": "OK",
  "description": "Aurora fast DDL is not supported from 3.x onwards. This check verifies that the database does not have artifacts related to the feature",
  "documentationLink": "https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/AuroraMySQL.Managing.FastDDL.html#AuroraMySQL.Managing.FastDDL-v2",
  "detectedProblems": [
      {
        "level": "Error",
        "dbObject": "test.test",
        "description": "Your table has pending Aurora fast DDL operations. Run 'OPTIMIZE TABLE <table name>' for the table to apply all the pending DDL updates. Then try the upgrade again."
      }
  ]
}
```
A pré-verificação informa que a tabela `test.test` tem operações de DDL rápida pendentes.  
Para permitir que a atualização prossiga, você pode recriar a tabela e tentar fazer upload novamente.  
Antes de recriar espaços de tabela, consulte [Online DDL Operations](https://dev.mysql.com/doc/refman/5.7/en/innodb-online-ddl-operations.html) na documentação do MySQL para entender os efeitos do bloqueio e da movimentação de dados nas transações em primeiro plano.

```
mysql> optimize table test.test;
+-----------+----------+----------+-------------------------------------------------------------------+
| Table     | Op       | Msg_type | Msg_text                                                          |
+-----------+----------+----------+-------------------------------------------------------------------+
| test.test | optimize | note     | Table does not support optimize, doing recreate + analyze instead |
| test.test | optimize | status   | OK                                                                |
+-----------+----------+----------+-------------------------------------------------------------------+
2 rows in set (0.04 sec)
```
Depois que você recria a tabela, a pré-verificação é bem-sucedida.  

```
{
  "id": "auroraFODUpgradeCheck",
  "title": "Check for artifacts related to Aurora fast DDL feature",
  "status": "OK",
  "detectedProblems": []
}
```

**auroraGetDanglingFulltextIndex**  
**Nível de pré-verificação: erro**  
**Tabelas com referência de índice `FULLTEXT` pendente**  
Antes do MySQL 5.6.26, era possível que, após a eliminação de um índice de pesquisa de texto completo, as colunas ocultas `FTS_DOC_ID` e `FTS_DOC_ID_INDEX` ficassem órfãs. Consulte mais informações em [Bug \$176012](https://bugs.mysql.com/bug.php?id=76012).  
Se você tiver alguma tabela criada em versões anteriores do MySQL em que isso tenha ocorrido, as atualizações para o Aurora MySQL versão 3 poderão falhar. Essa pré-verificação confere se esses índices órfãos ou “pendentes” de texto completo não existem no cluster de banco de dados antes da atualização para o MySQL 8.0. Se essa pré-verificação falhar, recrie todas as tabelas que contenham esses índices de texto completo pendentes.  
**Exemplos de resultado:**  

```
{
  "id": "auroraGetDanglingFulltextIndex",
  "title": "Tables with dangling FULLTEXT index reference",
  "status": "OK",
  "description": "Error: The following tables contain dangling FULLTEXT index which is not supported. It is recommended to rebuild the table before upgrade.",
  "detectedProblems": [
      {
        "level": "Error",
        "dbObject": "test.table_with_fts_index",
        "description": "Table `test.table_with_fts_index` contains dangling FULLTEXT index. Kindly recreate the table before upgrade."
      }
  ]
},
```
A pré-verificação relata um erro na tabela `test.table_with_fts_index` porque ela contém um índice de texto completo pendente. Para permitir que a atualização prossiga, recrie a tabela para limpar as tabelas auxiliares de índice de texto completo. Use `OPTIMIZE TABLE test.table_with_fts_index` ou `ALTER TABLE test.table_with_fts_index, ENGINE=INNODB`.  
Depois que você recria a tabela, a pré-verificação é concluída com êxito.  

```
{
  "id": "auroraGetDanglingFulltextIndex",
  "title": "Tables with dangling FULLTEXT index reference",
  "status": "OK",
  "detectedProblems": []
},
```

**auroraUpgradeCheckForDatafilePathInconsistency**  
**Nível de pré-verificação: erro**  
**Verifique a inconsistência relacionada ao caminho do arquivo `ibd`**  
Essa pré-verificação se aplica apenas ao Aurora MySQL versão 3.03.0 e anterior. Se você encontrar um erro com essa pré-verificação, faça a atualização para o Aurora MySQL versão 3.04 ou posterior.  
**Exemplos de resultado:**  

```
{
  "id": "auroraUpgradeCheckForDatafilePathInconsistency",
  "title": "Check for inconsistency related to ibd file path.",
  "status": "OK",
  "detectedProblems": []
}
```

**auroraUpgradeCheckForFtsSpaceIdZero**  
**Nível de pré-verificação: erro**  
**Verifique o índice de texto completo com o ID do espaço como zero**  
No MySQL, quando você adiciona um [índice de texto completo](https://dev.mysql.com/doc/refman/5.7/en/innodb-fulltext-index.html) a uma tabela do InnoDB, vários espaços de tabela de índice auxiliares são criados. Devido a um [erro](https://bugs.mysql.com/bug.php?id=72132) nas versões anteriores do MySQL, que foi corrigido na versão 5.6.20, era possível que essas tabelas de índice auxiliares fossem criadas no [espaço de tabela do sistema](https://dev.mysql.com/doc/refman/5.7/en/glossary.html#glos_system_tablespace), em vez de em seu próprio espaço de tabela do InnoDB.  
Se existirem espaços de tabela auxiliares desse tipo, a atualização falhará. Recrie os índices de texto completo mencionados no erro de pré-verificação e tente fazer a atualização novamente.  
**Exemplos de resultado:**  

```
{
  "id": "auroraUpgradeCheckForFtsSpaceIdZero",
  "title": "Check for fulltext index with space id as zero",
  "status": "OK",
  "description": "The auxiliary tables of FTS indexes on the table are created in system table-space. Due to this DDL queries executed on MySQL8.0 shall cause database unavailability. To avoid that, drop and recreate all the FTS indexes on the table or rebuild the table using ALTER TABLE query before the upgrade.",
  "detectedProblems": [
      {
        "level": "Error",
        "dbObject": "test.fts_space_zero_check",
        "description": " The auxiliary tables of FTS indexes on the table 'test.fts_space_zero_check' are created in system table-space due to https://bugs.mysql.com/bug.php?id=72132. In MySQL8.0, DDL queries executed on this table shall cause database unavailability. To avoid that, drop and recreate all the FTS indexes on the table or rebuild the table using ALTER TABLE query before the upgrade."
      }
  ]
},
```
A pré-verificação relata um erro na tabela `test.fts_space_zero_check`, pois ela tem tabelas auxiliares de pesquisa de texto completo (FTS) no espaço de tabela do sistema.  
Depois que eliminar e recriar os índices de FTS associados a essa tabela, a pré-verificação será bem-sucedida.  
Antes de recriar espaços de tabela, consulte [Partitioning Operations](https://dev.mysql.com/doc/refman/5.7/en/innodb-online-ddl-operations.html#online-ddl-partitioning) na documentação do MySQL para entender os efeitos do bloqueio e da movimentação de dados nas transações em primeiro plano.

```
{
 "id": "auroraUpgradeCheckForFtsSpaceIdZero",
 "title": "Check for fulltext index with space id as zero",
 "status": "OK",
 "detectedProblems": []
}
```

**auroraUpgradeCheckForIncompleteXATransactions**  
**Nível de pré-verificação: erro**  
**Verifique se há transações XA no estado preparado**  
[Ao executar o processo de atualização da versão principal, é essencial que a instância de banco de dados do Aurora MySQL versão 2 passe por um desligamento limpo](https://dev.mysql.com/doc/refman/5.7/en/glossary.html#glos_slow_shutdown). Isso garante que todas as transações sejam confirmadas ou revertidas e que o InnoDB tenha eliminado todos os registros de logs undo. Como a reversão de transações é necessária, se o banco de dados tiver alguma transação [XA](https://dev.mysql.com/doc/refman/5.7/en/xa.html) em um estado preparado, ele poderá impedir que o desligamento limpo continue. Por esse motivo, se alguma transação XA preparada for detectada, a atualização não poderá continuar enquanto você não tomar medidas para confirmá-la ou revertê-la.  
Consulte mais informações sobre como encontrar transações de XA em um estado preparado usando `XA RECOVER` em [XA Transaction SQL Statements](https://dev.mysql.com/doc/refman/5.7/en/xa-statements.html) na documentação do MySQL. Consulte mais informações sobre estados de transações de XA em [XA Transaction States](https://dev.mysql.com/doc/refman/5.7/en/xa-states.html) na documentação do MySQL.  
**Exemplos de resultado:**  

```
{
  "id": "auroraUpgradeCheckForIncompleteXATransactions",
  "title": "Pre-checks for XA Transactions in prepared state.",
  "status": "OK",
  "description": "Your cluster currently has XA transactions in the prepared state. To proceed with the upgrade, commit or rollback these transactions.",
  "detectedProblems": [
      {
        "level": "Error",
        "dbObject": "all",
        "description": "Your cluster currently has XA transactions in the prepared state. To proceed with the upgrade, commit or rollback these transactions."
      }
  ]
}
```
Essa pré-verificação informa um erro porque há transações em um estado preparado que devem ser confirmadas ou revertidas.  
Depois de fazer login no banco de dados, você pode verificar mais informações na tabela [information\$1schema.innodb\$1trx](https://dev.mysql.com/doc/refman/5.7/en/information-schema-innodb-trx-table.html) e na saída `XA RECOVER`.  
Antes de confirmar ou reverter uma transação, recomendamos que você consulte a [documentação do MySQL](https://dev.mysql.com/doc/refman/5.7/en/xa-restrictions.html) e os requisitos da aplicação.

```
mysql> select trx_started,
    trx_mysql_thread_id,
    trx_id,trx_state,
    trx_operation_state,
    trx_rows_modified,
    trx_rows_locked 
from 
    information_schema.innodb_trx;
+---------------------+---------------------+---------+-----------+---------------------+-------------------+-----------------+
| trx_started         | trx_mysql_thread_id | trx_id  | trx_state | trx_operation_state | trx_rows_modified | trx_rows_locked |
+---------------------+---------------------+---------+-----------+---------------------+-------------------+-----------------+
| 2024-08-12 01:09:39 |                   0 | 2849470 | RUNNING   | NULL                |                 1 |               0 |
+---------------------+---------------------+---------+-----------+---------------------+-------------------+-----------------+
1 row in set (0.00 sec)

mysql> xa recover;
+----------+--------------+--------------+--------+
| formatID | gtrid_length | bqual_length | data   |
+----------+--------------+--------------+--------+
|        1 |            6 |            0 | xatest |
+----------+--------------+--------------+--------+
1 row in set (0.00 sec)
```
Nesse caso, revertemos a transação preparada.  

```
mysql> XA ROLLBACK 'xatest';
Query OK, 0 rows affected (0.00 sec)
v
mysql> xa recover;
Empty set (0.00 sec)
```
Depois que a transação XA for revertida, a pré-verificação será bem-sucedida.  

```
{
  "id": "auroraUpgradeCheckForIncompleteXATransactions",
  "title": "Pre-checks for XA Transactions in prepared state.",
  "status": "OK",
  "detectedProblems": []
}
```

**auroraUpgradeCheckForInstanceLimit**  
**Nível de pré-verificação: erro**  
**Verifique se a atualização é compatível com a classe de instância atual**  
No momento, não é possível fazer atualização no local do Aurora MySQL versão 2.12.0 ou 2.12.1, em que a [classe de instância de banco de dados](Concepts.DBInstanceClass.md) do gravador é db.r6i.32xlarge. Nesse caso, a pré-verificação exibe um erro. Para permitir que a atualização continue, você pode alterar a classe de instância de banco de dados para db.r6i.24xlarge ou menor. Ou você pode fazer a atualização para o Aurora MySQL versão 2.12.2 ou posterior, na qual a atualização no local para o Aurora MySQL versão 3 é compatível com db.r6i.32xlarge.  
**Exemplos de resultado:**  

```
{
  "id": "auroraUpgradeCheckForInstanceLimit",
  "title": "Checks if upgrade is supported on the current instance class",
  "status": "OK",
  "description": "Upgrade from Aurora Version 2.12.0 and 2.12.1 may fail for 32.xl and above instance class.",
  "detectedProblems": [
      {
        "level": "Error",
        "dbObject": "all",
        "description": "Upgrade is not supported on this instance size for Aurora MySql Version 2.12.1. Before upgrading to Aurora MySql 3, please consider either: 1. Changing the instance class to 24.xl or lower. -or- 2. Upgrading to patch version 2.12.2 or higher."
      }
  ]
},
```
A pré-verificação exibe um erro porque a instância de banco de dados do gravador está usando a classe de instância db.r6i.32xlarge e está sendo executada no Aurora MySQL versão 2.12.1.

**auroraUpgradeCheckForInternalUsers**  
**Nível de pré-verificação: erro**  
**Verifique se há usuários internos da versão 8.0**  
Essa pré-verificação se aplica apenas ao Aurora MySQL versão 3.03.0 e anterior. Se você encontrar um erro com essa pré-verificação, faça a atualização para o Aurora MySQL versão 3.04 ou posterior.  
**Exemplos de resultado:**  

```
{
  "id": "auroraUpgradeCheckForInternalUsers",
  "title": "Check for 8.0 internal users.",
  "status": "OK",
  "detectedProblems": []
}
```

**auroraUpgradeCheckForMasterUser**  
**Nível de pré-verificação: erro**  
**Verifique se o usuário principal do RDS existe**  
O MySQL 8 adicionou um novo modelo de privilégios com suporte para [perfil](https://dev.mysql.com/doc/refman/8.0/en/roles.html) e [privilégios dinâmicos](https://dev.mysql.com/doc/refman/8.0/en/privileges-provided.html#static-dynamic-privileges) a fim de tornar o gerenciamento de privilégios mais fácil e refinado. Como parte dessa mudança, o Aurora MySQL introduziu o novo `rds_superuser_role`, que é concedido automaticamente ao usuário principal do banco de dados na atualização do Aurora MySQL versão 2 para a versão 3.  
Consulte mais informações sobre os perfis e privilégios atribuídos ao usuário principal no Aurora MySQL em [Privilégios da conta de usuário mestre](UsingWithRDS.MasterAccounts.md). Consulte mais informações sobre o modelo de privilégio baseado em perfil do Aurora MySQL versão 3 em [Modelo de privilégios baseados em funções](AuroraMySQL.Compare-80-v3.md#AuroraMySQL.privilege-model).  
Essa pré-verificação confere se o usuário principal existe no banco de dados. Se o usuário principal não existir, a pré-verificação falhará. Para permitir que a atualização continue, recrie o usuário principal redefinindo a senha dele ou criando o usuário manualmente. Tente realizar a atualização novamente. Consulte mais informações sobre como redefinir a senha do usuário principal em [Alterar a senha do usuário mestre do banco de dados](Aurora.Modifying.md#Aurora.Modifying.Password).  
**Exemplos de resultado:**  

```
{
  "id": "auroraUpgradeCheckForMasterUser",
  "title": "Check if master user exists",
  "status": "OK",
  "description": "Throws error if master user has been dropped!",
  "documentationLink": "https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/UsingWithRDS.MasterAccounts.html",
  "detectedProblems": [
      {
        "level": "Error",
        "dbObject": "all",
        "description": "Your Master User on host '%' has been dropped. To proceed with the upgrade, recreate the master user `reinvent` on default host '%'"
      }
  ]
}
```
Depois de redefinir sua senha do usuário principal, a pré-verificação será concluída com êxito e você poderá tentar fazer a atualização novamente.  
O exemplo a seguir usa a AWS CLI para redefinir a senha. As alterações de senha são aplicadas imediatamente.  

```
aws rds modify-db-cluster \
    --db-cluster-identifier my-db-cluster \
    --master-user-password my-new-password
```
Depois, a pré-verificação é bem-sucedida.  

```
{
  "id": "auroraUpgradeCheckForMasterUser",
  title": "Check if master user exists",
  "status": "OK",
  "detectedProblems": []
}
```

**auroraUpgradeCheckForPrefixIndexOnGeometryColumns**  
**Nível de pré-verificação: erro**  
**Verifique as colunas de geometria nos índices de prefixo**  
Desde o [MySQL 8.0.12](https://dev.mysql.com/doc/relnotes/mysql/8.0/en/news-8-0-12.html#mysqld-8-0-12-spatial-support), você não pode mais criar um índice [prefixado](https://dev.mysql.com/doc/refman/5.7/en/column-indexes.html#column-indexes-prefix) em uma coluna usando o tipo de dados [GEOMETRY](https://dev.mysql.com/doc/refman/5.7/en/gis-data-formats.html). Consulte mais informações em [WL\$111808](https://dev.mysql.com/worklog/task/?id=11808).  
Se algum desses índices existir, a atualização falhará. Para resolver o problema, descarte os índices prefixados `GEOMETRY` nas tabelas mencionadas na falha de pré-verificação.  
**Exemplos de resultado:**  

```
{
  "id": "auroraUpgradeCheckForPrefixIndexOnGeometryColumns",
  "title": "Check for geometry columns on prefix indexs",
  "status": "OK",
  "description": "Consider dropping the prefix Indexes of geometry columns and restart the upgrade.",
  "detectedProblems": [
      {
        "level": "Error",
        "dbObject": "test.geom_index_prefix",
        "description": "Table `test`.`geom_index_prefix` has an index `LatLon` on geometry column/s. Mysql 8.0 does not support this type of index on a geometry column https://dev.mysql.com/worklog/task/?id=11808. To upgrade to MySQL 8.0, Run 'DROP INDEX `LatLon` ON `test`.`geom_index_prefix`;"
      }
  ]
}
```
A pré-verificação relata um erro porque a tabela `test.geom_index_prefix` contém um índice com um prefixo em uma coluna `GEOMETRY`.  
Depois que você descartar esse índice, a pré-verificação será bem-sucedida.  

```
{
  "id": "auroraUpgradeCheckForPrefixIndexOnGeometryColumns",
  "title": "Check for geometry columns on prefix indexs",
  "status": "OK",
  "detectedProblems": []
}
```

**auroraUpgradeCheckForSpecialCharactersInProcedures**  
**Nível de pré-verificação: erro**  
**Verifique se há inconsistência relacionada a caracteres especiais em procedimentos armazenados**  
Antes do MySQL 8.0, nomes de bancos de dados, nomes de tabelas e outros objetos correspondiam a arquivos no diretório de dados, ou seja, metadados baseados em arquivos. Como parte da atualização para o MySQL 8.0, todos os objetos do banco de dados são migrados para as novas tabelas internas do dicionário de dados que são armazenadas no esquema `mysql` para dar suporte ao recém-implementado [Atomic Data Dictionary](https://dev.mysql.com/doc/refman/8.0/en/data-dictionary-file-removal.html). Como parte da migração de procedimentos armazenados, a definição e o corpo de cada procedimento são validados à medida que são inseridos no novo dicionário de dados.  
Antes do MySQL 8, em alguns casos era possível criar rotinas armazenadas ou inserir diretamente na tabela `mysql.proc` procedimentos que continham caracteres especiais. Por exemplo, você podia criar um procedimento armazenado que continha um comentário com o [caractere de espaço rígido](https://en.wikipedia.org/wiki/Non-breaking_space) incompatível `\xa0`. Se algum desses procedimentos for encontrado, a atualização falhará.  
Essa pré-verificação confirma se o corpo e a definição de seus procedimentos armazenados não contêm esses caracteres. Para que a atualização continue, recrie esses procedimentos armazenados sem nenhum caractere oculto ou especial.  
**Exemplos de resultado:**  

```
{
  "id": "auroraUpgradeCheckForSpecialCharactersInProcedures",
  "title": "Check for inconsistency related to special characters in stored procedures.",
  "status": "OK",
  "description": "Following procedure(s) has special characters inconsistency.",
  "detectedProblems": [
      {
        "level": "Error",
        "dbObject": "information_schema.routines",
        "description": "Data Dictionary Metadata is inconsistent for the procedure `get_version_proc` in the database `test` due to usage of special characters in procedure body. To avoid that, drop and recreate the procedure without any special characters before proceeding with the Upgrade."
      }
  ]
}
```
A pré-verificação informa que o cluster de banco de dados contém um procedimento chamado `get_version_proc` no banco de dados `test` que contém caracteres especiais no corpo do procedimento.  
Depois que você descarta e recria o procedimento armazenado, a pré-verificação é bem-sucedida, permitindo que a atualização continue.  

```
{
  "id": "auroraUpgradeCheckForSpecialCharactersInProcedures",
  "title": "Check for inconsistency related to special characters in stored procedures.",
  "status": "OK",
  "detectedProblems": []
},
```

**auroraUpgradeCheckForSysSchemaObjectTypeMismatch**  
**Nível de pré-verificação: erro**  
**Verifique a incompatibilidade do tipo de objeto para o esquema `sys`**  
O [esquema sys](https://dev.mysql.com/doc/refman/8.0/en/sys-schema.html) é um conjunto de objetos e visualizações em um banco de dados do MySQL que ajuda os usuários a solucionar problemas em instâncias de banco de dados, bem como a otimizá-las e monitorá-las. Quando é feita uma atualização de uma versão principal do Aurora MySQL versão 2 para a versão 3, as visualizações do esquema `sys` são recriadas e atualizadas para as novas definições do Aurora MySQL versão 3.  
Se, na atualização, algum objeto no esquema `sys` for definido usando mecanismos de armazenamento (`sys_config/BASE TABLE` em [INFORMATION\$1SCHEMA.TABLES](https://dev.mysql.com/doc/refman/5.7/en/information-schema-tables-table.html)), em vez de visualizações, a atualização falhará. Essas tabelas podem ser encontradas na tabela `information_schema.tables`. Esse não é um comportamento esperado, mas em alguns casos pode ocorrer devido a um erro do usuário.  
Essa pré-verificação valida todos os objetos do esquema `sys` para garantir que eles usem as definições de tabela corretas e que as visualizações não sejam definidas erroneamente como tabelas do InnoDB ou MyISAM. Para resolver o problema, corrija manualmente todos os objetos exibidos renomeando-os ou descartando-os. Tente realizar a atualização novamente.  
**Exemplos de resultado:**  

```
{
  "id": "auroraUpgradeCheckForSysSchemaObjectTypeMismatch",
  "title": "Check object type mismatch for sys schema.",
  "status": "OK",
  "description": "Database contains objects with type mismatch for sys schema.",
  "detectedProblems": [
      {
        "level": "Error",
        "dbObject": "sys.waits_global_by_latency",
        "description": "Your object sys.waits_global_by_latency has a type mismatch. To fix the inconsistency we recommend to rename or remove the object before upgrading (use RENAME TABLE command). "
      }
  ]
}
```
A pré-verificação informa que a visualização [sys.waits\$1global\$1by\$1latency](https://dev.mysql.com/doc/refman/5.7/en/sys-waits-global-by-latency.html) no esquema `sys` tem uma incompatibilidade de tipo que está impedindo que a atualização continue.  
Depois de fazer login na instância de banco de dados, você pode ver que esse objeto está definido como uma tabela do InnoDB, quando deveria ser uma visualização.  

```
mysql> show create table sys.waits_global_by_latency\G
*************************** 1. row ***************************
       Table: waits_global_by_latency
Create Table: CREATE TABLE `waits_global_by_latency` (
  `events` varchar(128) DEFAULT NULL,
  `total` bigint(20) unsigned DEFAULT NULL,
  `total_latency` text,
  `avg_latency` text,
  `max_latency` text
) ENGINE=InnoDB DEFAULT CHARSET=utf8
1 row in set (0.00 sec)
```
Para resolver esse problema, podemos descartar e recriar a visualização com a [definição correta](https://github.com/mysql/mysql-server/blob/mysql-5.7.44/scripts/sys_schema/views/p_s/waits_global_by_latency.sql) ou renomeá-la. Durante o processo de atualização, ela será criada automaticamente com a definição correta da tabela.  

```
mysql> RENAME TABLE sys.waits_global_by_latency to sys.waits_global_by_latency_old;
Query OK, 0 rows affected (0.01 sec)
```
Após isso, a pré-verificação é concluída com êxito.  

```
{
  "id": "auroraUpgradeCheckForSysSchemaObjectTypeMismatch",
  "title": "Check object type mismatch for sys schema.",
  "status": "OK",
  "detectedProblems": []
}
```

**auroraUpgradeCheckForViewColumnNameLength**  
**Nível de pré-verificação: erro**  
**Verifique o limite superior do nome da coluna na visualização**  
A [extensão máxima permitida para um nome de coluna](https://dev.mysql.com/doc/refman/5.7/en/identifier-length.html) no MySQL é 64 caracteres. Antes do MySQL 8.0, em alguns casos era possível criar uma visualização com um nome de coluna com mais de 64 caracteres. Se alguma dessas visualizações existir na instância de banco de dados, um erro de pré-verificação será retornado e a atualização falhará. Para que a atualização continue, você deve recriar as visualizações em questão, garantindo que as extensões de coluna tenham menos de 64 caracteres. Tente realizar a atualização novamente.  
**Exemplos de resultado:**  

```
{
  "id": "auroraUpgradeCheckForViewColumnNameLength",
  "title": "Check for upperbound limit related to column name in view.",
  "status": "OK",
  "description": "Following view(s) has column(s) with length greater than 64.",
  "detectedProblems": [
      {
        "level": "Error",
        "dbObject": "test.colname_view_test.col2_pad_pad_pad_pad_pad_pad_pad_pad_pad_pad_pad_pad_pad_pad_pad_pad_pad",
        "description": "View `test`.`colname_view_test`has column `col2_pad_pad_pad_pad_pad_pad_pad_pad_pad_pad_pad_pad_pad_pad_pad_pad_pad` with invalid column name length. To avoid Upgrade errors, view should be altered by renaming the column name so that its length is not 0 and doesn't exceed 64."
      }
  ]
}
```
A pré-verificação informa que a visualização `test.colname_view_test` contém uma coluna `col2_pad_pad_pad_pad_pad_pad_pad_pad_pad_pad_pad_pad_pad_pad_pad_pad_pad` que excede o tamanho máximo permitido de 64 caracteres.  
Observando a definição da visualização, podemos ver a coluna incorreta.  

```
mysql> desc `test`.`colname_view_test`;
+------------------------------------------------------------------+-------------+------+-----+---------+-------+
| Field                                                            | Type        | Null | Key | Default | Extra |
+------------------------------------------------------------------+-------------+------+-----+---------+-------+
| col1                                                             | varchar(20) | YES  |     | NULL    |       |
| col2_pad_pad_pad_pad_pad_pad_pad_pad_pad_pad_pad_pad_pad_pad_pad | int(11)     | YES  |     | NULL    |       |
+------------------------------------------------------------------+-------------+------+-----+---------+-------+
2 rows in set (0.00 sec)
```
Para que a atualização continue, recrie a visualização, garantindo que o tamanho da coluna não exceda 64 caracteres.  

```
mysql> drop view `test`.`colname_view_test`;
Query OK, 0 rows affected (0.01 sec)

mysql> create view `test`.`colname_view_test`(col1, col2_nopad) as select inf, fodcol from test;
Query OK, 0 rows affected (0.01 sec)

mysql> desc `test`.`colname_view_test`;
+------------+-------------+------+-----+---------+-------+
| Field      | Type        | Null | Key | Default | Extra |
+------------+-------------+------+-----+---------+-------+
| col1       | varchar(20) | YES  |     | NULL    |       |
| col2_nopad | int(11)     | YES  |     | NULL    |       |
+------------+-------------+------+-----+---------+-------+
2 rows in set (0.00 sec)
```
Após isso, a pré-verificação é bem-sucedida.  

```
{
  "id": "auroraUpgradeCheckForViewColumnNameLength",
  "title": "Check for upperbound limit related to column name in view.",
  "status": "OK",
  "detectedProblems": []
}
```

**auroraUpgradeCheckIndexLengthLimitOnTinyColumns**  
**Nível de pré-verificação: erro**  
**Verifique se há tabelas com índices definidos com uma extensão de prefixo com mais de 255 bytes em colunas minúsculas**  
Ao criar um índice em uma coluna usando um [tipo de dados binário](https://dev.mysql.com/doc/refman/5.7/en/binary-varbinary.html) no MySQL, você deve adicionar uma extensão de [prefixo](https://dev.mysql.com/doc/refman/5.7/en/column-indexes.html#column-indexes-prefix) na definição do índice. Antes do MySQL 8.0, em alguns casos era possível especificar uma extensão de prefixo superior ao tamanho máximo permitido desses tipos de dados. Um exemplo são as colunas `TINYTEXT` e `TINYBLOB`, em que o tamanho máximo de dados permitido é 255 bytes, mas prefixos de índice maiores eram permitidos. Consulte mais informações em [InnoDB Limits](https://dev.mysql.com/doc/refman/8.0/en/innodb-limits.html) na documentação do MySQL.  
Se essa pré-verificação falhar, descarte o índice incorreto ou reduza a extensão do prefixo das colunas `TINYTEXT` e `TINYBLOB` do índice para menos de 255 bytes. Tente realizar a atualização novamente.  
**Exemplos de resultado:**  

```
{
  "id": "auroraUpgradeCheckIndexLengthLimitOnTinyColumns",
  "title": "Check for the tables with indexes defined with prefix length greater than 255 bytes on tiny columns",
  "status": "OK",
  "description": "Prefix length of the indexes defined on tiny columns cannot exceed 255 bytes. With utf8mb4 char set, this limits the prefix length supported upto 63 characters only. A larger prefix length was allowed in MySQL5.7 using innodb_large_prefix parameter. This parameter is deprecated in MySQL 8.0.",
  "documentationLink": "https://dev.mysql.com/doc/refman/8.0/en/innodb-limits.html, https://dev.mysql.com/doc/refman/8.0/en/storage-requirements.html",
  "detectedProblems": [
      {
        "level": "Error",
        "dbObject": "test.tintxt_prefixed_index.col1",
        "description": "Index 'PRIMARY' on tinytext/tinyblob column `col1` of table `test.tintxt_prefixed_index` is defined with prefix length exceeding 255 bytes. Reduce the prefix length to <=255 bytes depending on character set used. For utf8mb4, it should be <=63."
      }
  ]
}
```
A pré-verificação relata um erro referente à tabela `test.tintxt_prefixed_index`, porque ela tem um índice `PRIMARY` com um prefixo com mais de 255 bytes em uma coluna TINYTEXT ou TINYBLOB.  
Observando a definição dessa tabela, podemos ver que a chave primária tem um prefixo de 65 na coluna `TINYTEXT` `col1`. Como a tabela é definida usando o conjunto de caracteres `utf8mb4`, que armazena 4 bytes por caractere, o prefixo excede o limite de 255 bytes.  

```
mysql> show create table `test`.`tintxt_prefixed_index`\G
*************************** 1. row ***************************
       Table: tintxt_prefixed_index
Create Table: CREATE TABLE `tintxt_prefixed_index` (
  `col1` tinytext NOT NULL,
  `col2` tinytext,
  `col_id` tinytext,
  PRIMARY KEY (`col1`(65))
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC
1 row in set (0.00 sec)
```
Modificar o prefixo do índice para 63 ao usar o conjunto de caracteres `utf8mb4` permitirá que a atualização continue.  

```
mysql> alter table `test`.`tintxt_prefixed_index` drop PRIMARY KEY, ADD  PRIMARY KEY (`col1`(63));
Query OK, 0 rows affected (0.04 sec)
Records: 0  Duplicates: 0  Warnings: 0
```
Após isso, a pré-verificação é bem-sucedida.  

```
{
  "id": "auroraUpgradeCheckIndexLengthLimitOnTinyColumns",
  "title": "Check for the tables with indexes defined with prefix length greater than 255 bytes on tiny columns",
  "status": "OK",
  "detectedProblems": []
}
```

**auroraUpgradeCheckMissingInnodbMetadataForMysqlHostTable**  
**Nível de pré-verificação: erro**  
**Verifique a inconsistência dos metadados do InnoDB ausentes na tabela `mysql.host`**  
Essa é uma pré-verificação somente interna realizada pelo serviço RDS. Os erros serão gerenciados automaticamente na atualização e podem ser ignorados com segurança.  
Se você encontrar algum erro nessa pré-verificação, abra um caso no [AWS Support](https://aws.amazon.com/support) para solicitar que a inconsistência de metadados seja resolvida. Ou você pode tentar fazer a atualização novamente executando um despejo lógico e, depois, restaurando para um novo cluster de banco de dados do Aurora MySQL versão 3.

**auroraUpgradeCheckForInvalidUtf8mb3ColumnComments**  
**Nível de pré-verificação: erro**  
**Verifique se há comentários de coluna utf8mb3 inválidos**  
Essa pré-verificação identifica tabelas que contêm comentários de coluna com codificação de caracteres utf8mb3 inválida. No MySQL 8.0, uma validação mais rigorosa é aplicada à codificação de caracteres nos metadados, incluindo comentários de coluna. Se algum comentário de coluna contiver caracteres que não sejam válidos no conjunto de caracteres utf8mb3, a atualização falhará.  
A causa mais comum desse problema é a presença de caracteres fora do plano multilíngue básico (BMP) nos comentários de coluna. Os caracteres fora do BMP exigem codificação UTF-8 de 4 bytes (utf8mb4), mas utf8mb3 aceita apenas sequências de 3 bytes, que não podem representar esses caracteres.  
Para resolver esse problema, antes de tentar fazer a atualização, você deve modificar os comentários de coluna para remover ou substituir quaisquer caracteres fora do BMP. Você pode usar a instrução `ALTER TABLE` para atualizar os comentários de coluna.  
**Exemplos de resultado:**  

```
{
  "id": "auroraUpgradeCheckForInvalidUtf8mb3ColumnComments",
  "title": "Check for invalid utf8mb3 column comments.",
  "status": "OK",
  "description": "Following table(s) has/have invalid utf8mb3 comments on the column/columns.",
  "detectedProblems": [
      {
        "level": "Error",
        "dbObject": "test.t2",
        "description": "Table test.t2 has invalid utf8mb3 comments in it's column/columns. This is due to non-BMP characters in the comment field. To fix the inconsistency, we recommend you to modify comment fields to not use non-BMP characters and try the upgrade again."
      }
  ]
}
```
A pré-verificação informa que a tabela `test.t2` contém caracteres utf8mb3 inválidos em um ou mais comentários de coluna, especificamente devido à presença de caracteres fora do BMP.  
Para resolver esse problema, você pode identificar as colunas problemáticas e atualizar os respectivos comentários. Primeiro, examine a estrutura da tabela para identificar colunas com comentários:  

```
mysql> SHOW CREATE TABLE test.t2\G
```
Depois de identificar as colunas com comentários problemáticos, atualize-as usando a instrução `ALTER TABLE`. Por exemplo:  

```
mysql> ALTER TABLE test.t2 MODIFY COLUMN column_name data_type COMMENT 'Updated comment without non-BMP characters';
```
Também é possível remover o comentário completamente:  

```
mysql> ALTER TABLE test.t2 MODIFY COLUMN column_name data_type COMMENT '';
```
Depois de atualizar todos os comentários problemáticos da coluna, a pré-verificação será aprovada e a atualização poderá prosseguir:  

```
{
  "id": "auroraUpgradeCheckForInvalidUtf8mb3ColumnComments",
  "title": "Check for invalid utf8mb3 column comments.",
  "status": "OK",
  "detectedProblems": []
}
```
Antes de modificar os comentários da coluna, você deve atualizar adequadamente qualquer código ou documentação da aplicação que dependa desses comentários. Considere migrar para o conjunto de caracteres utf8mb4 para obter melhor suporte a Unicode se sua aplicação exigir caracteres fora do BMP.

## Avisos
<a name="precheck-descriptions-warnings"></a>

As pré-verificações a seguir geram avisos quando a pré-verificação falha e a atualização pode continuar.

**Topics**
+ [Pré-verificações do MySQL que exibem avisos](#precheck-descriptions-warnings.mysql)
+ [Pré-verificações do Aurora MySQL que exibem avisos](#precheck-descriptions-warnings.aurora)

### Pré-verificações do MySQL que exibem avisos
<a name="precheck-descriptions-warnings.mysql"></a>

As seguintes pré-verificações são do MySQL Community:
+ [defaultAuthenticationPlugin](#defaultAuthenticationPlugin)
+ [maxdbFlagCheck](#maxdbFlagCheck)
+ [mysqlDollarSignNameCheck](#mysqlDollarSignNameCheck)
+ [reservedKeywordsCheck](#reservedKeywordsCheck)
+ [utf8mb3Check](#utf8mb3Check)
+ [zeroDatesCheck](#zeroDatesCheck)

**defaultAuthenticationPlugin**  
**Nível de pré-verificação: aviso**  
**Considerações sobre o novo plug-in de autenticação padrão**  
No MySQL 8.0, o plug-in de autenticação `caching_sha2_password` foi introduzido, fornecendo criptografia de senha mais segura e melhor desempenho do que o plug-in obsoleto `mysql_native_password`. No Aurora MySQL versão 3, o plug-in de autenticação padrão usado para usuários do banco de dados é o `mysql_native_password`.  
Essa pré-verificação avisa que esse plug-in será removido e o padrão alterado em uma futura versão principal. Considere avaliar a compatibilidade dos clientes e usuários da aplicação antes dessa mudança.  
Consulte mais informações em [caching\$1sha2\$1password Compatibility Issues and Solutions](https://dev.mysql.com/doc/refman/8.0/en/upgrading-from-previous-series.html#upgrade-caching-sha2-password-compatibility-issues) na documentação do MySQL.  
**Exemplos de resultado:**  

```
{
  "id": "defaultAuthenticationPlugin",
  "title": "New default authentication plugin considerations",
  "description": "Warning: The new default authentication plugin 'caching_sha2_password' offers more secure password hashing than previously used 'mysql_native_password' (and consequent improved client connection authentication). However, it also has compatibility implications that may affect existing MySQL installations. If your MySQL installation must serve pre-8.0 clients and you encounter compatibility issues after upgrading, the simplest way to address those issues is to reconfigure the server to revert to the previous default authentication plugin (mysql_native_password). For example, use these lines in the server option file:\n\n[mysqld]\ndefault_authentication_plugin=mysql_native_password\n\nHowever, the setting should be viewed as temporary, not as a long term or permanent solution, because it causes new accounts created with the setting in effect to forego the improved authentication security.\nIf you are using replication please take time to understand how the authentication plugin changes may impact you.",
  "documentationLink": "https://dev.mysql.com/doc/refman/8.0/en/upgrading-from-previous-series.html#upgrade-caching-sha2-password-compatibility-issues\nhttps://dev.mysql.com/doc/refman/8.0/en/upgrading-from-previous-series.html#upgrade-caching-sha2-password-replication"
},
```

**maxdbFlagCheck**  
**Nível de pré-verificação: aviso**  
**Uso do sinalizador obsoleto `MAXDB` `sql_mode`**  
No MySQL 8.0, várias opções obsoletas de variáveis de sistema [sql\$1mode](https://dev.mysql.com/doc/refman/5.7/en/server-system-variables.html#sysvar_sql_mode) foram [removidas](https://dev.mysql.com/doc/refman/8.0/en/mysql-nutshell.html), como a `MAXDB`. Essa pré-verificação examina todas as sessões atualmente conectadas, bem como rotinas e gatilhos, para garantir que nenhuma tenha `sql_mode` definido para qualquer combinação que inclua `MAXDB`.  
**Exemplos de resultado:**  

```
{
  "id": "maxdbFlagCheck",
  "title": "Usage of obsolete MAXDB sql_mode flag",
  "status": "OK",
  "description": "Warning: The following DB objects have the obsolete MAXDB option persisted for sql_mode, which will be cleared during the upgrade. It can potentially change the datatype DATETIME into TIMESTAMP if it is used inside object's definition, and this in turn can change the behavior in case of dates earlier than 1970 or later than 2037. If this is a concern, please redefine these objects so that they do not rely on the MAXDB flag before running the upgrade.",
  "documentationLink": "https://dev.mysql.com/doc/refman/8.0/en/mysql-nutshell.html#mysql-nutshell-removals",
  "detectedProblems": [
      {
        "level": "Warning",
        "dbObject": "test.maxdb_stored_routine",
        "description": "PROCEDURE uses obsolete MAXDB sql_mode",
        "dbObjectType": "Routine"
      }
  ]
}
```
A pré-verificação informa que a rotina `test.maxdb_stored_routine` contém uma opção `sql_mode` incompatível.  
Depois de fazer login no banco de dados, você pode ver na definição de rotina que `sql_mode` contém `MAXDB`.  

```
 > SHOW CREATE PROCEDURE test.maxdb_stored_routine\G

*************************** 1. row ***************************
           Procedure: maxdb_stored_routine
            sql_mode: PIPES_AS_CONCAT,ANSI_QUOTES,IGNORE_SPACE,MAXDB,NO_KEY_OPTIONS,NO_TABLE_OPTIONS,NO_FIELD_OPTIONS,NO_AUTO_CREATE_USER
    Create Procedure: CREATE DEFINER="msandbox"@"localhost" PROCEDURE "maxdb_stored_routine"()
BEGIN
    SELECT * FROM test;
END
character_set_client: utf8
collation_connection: utf8_general_ci
  Database Collation: latin1_swedish_ci
1 row in set (0.00 sec)
```
Para resolver o problema, recrie o procedimento depois de definir o `sql_mode` correto no cliente.  
De acordo com a [documentação do MySQL](https://dev.mysql.com/doc/refman/5.7/en/create-procedure.html), o MySQL armazena a configuração `sql_mode` em vigor quando uma rotina é criada ou alterada. Ele sempre executa a rotina com essa configuração, independentemente da configuração `sql_mode` quando a rotina é iniciada.  
Antes de alterar `sql_mode`, consulte [Server SQL Modes](https://dev.mysql.com/doc/refman/5.7/en/sql-mode.html) na documentação do MySQL. Avalie cuidadosamente qualquer possível impacto de fazer isso na aplicação.
Recrie o procedimento sem o `sql_mode` incompatível.  

```
mysql > set sql_mode='PIPES_AS_CONCAT,ANSI_QUOTES,IGNORE_SPACE';
Query OK, 0 rows affected, 1 warning (0.00 sec)

mysql > DROP PROCEDURE test.maxdb_stored_routine\G
Query OK, 0 rows affected (0.00 sec)

mysql >
mysql > DELIMITER $$
mysql >
mysql > CREATE PROCEDURE test.maxdb_stored_routine()
    -> SQL SECURITY DEFINER
    -> BEGIN
    ->     SELECT * FROM test;
    -> END$$
Query OK, 0 rows affected (0.00 sec)

mysql >
mysql > DELIMITER ;
mysql > show create procedure test.maxdb_stored_routine\G
*************************** 1. row ***************************
           Procedure: maxdb_stored_routine
            sql_mode: PIPES_AS_CONCAT,ANSI_QUOTES,IGNORE_SPACE
    Create Procedure: CREATE DEFINER="msandbox"@"localhost" PROCEDURE "maxdb_stored_routine"()
BEGIN
    SELECT * FROM test;
END
character_set_client: utf8
collation_connection: utf8_general_ci
  Database Collation: latin1_swedish_ci
1 row in set (0.00 sec)
```
A pré-verificação é bem-sucedida.  

```
{
  "id": "maxdbFlagCheck",
  "title": "Usage of obsolete MAXDB sql_mode flag",
  "status": "OK",
  "detectedProblems": []
}
```

**mysqlDollarSignNameCheck**  
**Nível de pré-verificação: aviso**  
**Verifique se estão sendo usados cifrões únicos obsoletos em nomes de objeto**  
Desde o [MySQL 8.0.32](https://dev.mysql.com/doc/relnotes/mysql/8.0/en/news-8-0-32.html#mysqld-8-0-32-deprecation-removal), o uso do cifrão (`$`) como o primeiro caractere de um identificador sem aspas foi descontinuado. Se você tiver esquemas, tabelas, visualizações, colunas ou rotinas contendo `$` como primeiro caractere, essa pré-verificação exibirá um aviso. Embora esse aviso não impeça a continuidade da atualização, recomendamos que você tome medidas o quanto antes para resolver isso. A partir do [MySQL 8.4](https://dev.mysql.com/doc/refman/8.4/en/mysql-nutshell.html), qualquer um desses identificadores retornará um erro de sintaxe em vez de um aviso.  
**Exemplos de resultado:**  

```
{
  "id": "mysqlDollarSignNameCheck",
  "title": "Check for deprecated usage of single dollar signs in object names",
  "status": "OK",
  "description": "Warning: The following objects have names with deprecated usage of dollar sign ($) at the begining of the identifier. To correct this warning, ensure, that names starting with dollar sign, also end with it, similary to quotes ($example$). ",
  "detectedProblems": [
      {
        "level": "Warning",
        "dbObject": "test.$deprecated_syntx",
        "description": " name starts with $ sign."
      }
  ]
},
```
A pré-verificação exibe um aviso porque a tabela `$deprecated_syntx` no esquema `test` contém um `$` como o primeiro caractere.

**reservedKeywordsCheck**  
**Nível de pré-verificação: aviso**  
**Uso de objetos de banco de dados com nomes conflitantes com novas palavras-chave reservadas**  
Essa verificação é semelhante à [routineSyntaxCheck](#routineSyntaxCheck), pois verifica o uso de objetos de banco de dados com nomes conflitantes com novas palavras-chave reservadas. Embora eles não impeçam as atualizações, você precisa avaliar os avisos com cuidado.  
**Exemplos de resultado:**  
Usando o exemplo anterior com a tabela chamada `except`, a pré-verificação exibe um aviso:  

```
{
  "id": "reservedKeywordsCheck",
  "title": "Usage of db objects with names conflicting with new reserved keywords",
  "status": "OK",
  "description": "Warning: The following objects have names that conflict with new reserved keywords. Ensure queries sent by your applications use `quotes` when referring to them or they will result in errors.",
  "documentationLink": "https://dev.mysql.com/doc/refman/en/keywords.html",
  "detectedProblems": [
      {
        "level": "Warning",
        "dbObject": "test.except",
        "description": "Table name",
        "dbObjectType": "Table"
      }
  ]
}
```
Esse aviso permite que você saiba que pode haver algumas consultas de aplicação a serem analisadas. Se as consultas da aplicação não tiverem o [escape dos literais de string](https://dev.mysql.com/doc/refman/8.0/en/string-literals.html) correto, elas poderão apresentar erros após a atualização para o MySQL 8.0. Analise as aplicações para confirmar, testando com base em um clone ou snapshot do cluster de banco de dados do Aurora MySQL em execução na versão 3.  
Exemplo de uma consulta de aplicação sem escape que falhará após a atualização:  

```
SELECT * FROM escape;
```
Exemplo de uma consulta de aplicação com escape correto que será bem-sucedida após a atualização:  

```
SELECT * FROM 'escape';
```

**utf8mb3Check**  
**Nível de pré-verificação: aviso**  
**Uso do conjunto de caracteres `utf8mb3`**  
No MySQL 8.0, o conjunto de caracteres `utf8mb3` foi descontinuado e será removido em uma futura versão principal do MySQL. Essa pré-verificação é implementada para gerar um aviso se algum objeto de banco de dados que usa esse conjunto de caracteres for detectado. Embora isso não impeça a continuidade de uma atualização, é altamente recomendável que você avalie a possibilidade de migrar as tabelas para o conjunto de caracteres `utf8mb4`, que é o padrão a partir do MySQL 8.0. Consulte mais informações sobre [utf8mb3](https://dev.mysql.com/doc/refman/8.0/en/charset-unicode-utf8mb3.html) e [utf8mb4](https://dev.mysql.com/doc/refman/8.0/en/charset-unicode-utf8mb4.html) em [Converting Between 3-Byte and 4-Byte Unicode Character Sets](https://dev.mysql.com/doc/refman/8.0/en/charset-unicode-conversion.html) na documentação do MySQL.  
**Exemplos de resultado:**  

```
{
  "id": "utf8mb3",
  "title": "Usage of utf8mb3 charset",
  "status": "OK",
  "description": "Warning: The following objects use the deprecated utf8mb3 character set. It is recommended to convert them to use utf8mb4 instead, for improved Unicode support. The utf8mb3 character is subject to removal in the future.",
  "documentationLink": "https://dev.mysql.com/doc/refman/8.0/en/charset-unicode-utf8mb3.html",
  "detectedProblems": [
      {
        "level": "Warning",
        "dbObject": "test.t1.col1",
        "description": "column's default character set: utf8",
        "dbObjectType": "Column"
      },
      {
        "level": "Warning",
        "dbObject": "test.t1.col2",
        "description": "column's default character set: utf8",
        "dbObjectType": "Column"
      }
  ]
}
```
Para resolver esse problema, recrie as tabelas e os objetos referidos. Antes de fazer isso, consulte mais informações e pré-requisitos em [Converting Between 3-Byte And 4-Byte Unicode Character Sets](https://dev.mysql.com/doc/refman/8.0/en/charset-unicode-conversion.html) na documentação do MySQL.

**zeroDatesCheck**  
**Nível de pré-verificação: aviso**  
**Valores de data zero, data e hora e carimbo de data/hora**  
O MySQL agora impõe regras mais rígidas em relação ao uso de valores zero nas colunas de data, data e hora e carimbo de data/hora. Recomendamos que você use os modos `NO_ZERO_IN_DATE` e `NO_ZERO_DATE SQL` em conjunto com o modo `strict`, pois eles serão mesclados com o modo `strict` em uma versão futura do MySQL.  
Se a configuração `sql_mode` de qualquer uma de suas conexões de banco de dados, no momento da execução da pré-verificação, não incluir esses modos, um aviso será gerado na pré-verificação. Talvez os usuários ainda consigam inserir valores de data, data e hora e carimbo de data/hora contendo valores zero. No entanto, é altamente recomendável substituir valores zero por valores válidos, pois no futuro eles podem mudar de comportamento e não funcionar corretamente. Como é um aviso, isso não impede as atualizações, mas recomendamos que você comece a pensar em agir.  
**Exemplos de resultado:**  

```
{
  "id": "zeroDatesCheck",
  "title": "Zero Date, Datetime, and Timestamp values",
  "status": "OK",
  "description": "Warning: By default zero date/datetime/timestamp values are no longer allowed in MySQL, as of 5.7.8 NO_ZERO_IN_DATE and NO_ZERO_DATE are included in SQL_MODE by default. These modes should be used with strict mode as they will be merged with strict mode in a future release. If you do not include these modes in your SQL_MODE setting, you are able to insert date/datetime/timestamp values that contain zeros. It is strongly advised to replace zero values with valid ones, as they may not work correctly in the future.",
  "documentationLink": "https://lefred.be/content/mysql-8-0-and-wrong-dates/",
  "detectedProblems": [
      {
        "level": "Warning",
        "dbObject": "global.sql_mode",
        "description": "does not contain either NO_ZERO_DATE or NO_ZERO_IN_DATE which allows insertion of zero dates"
      },
      {
        "level": "Warning",
        "dbObject": "session.sql_mode",
        "description": " of 10 session(s) does not contain either NO_ZERO_DATE or NO_ZERO_IN_DATE which allows insertion of zero dates"
      }
  ]
}
```

### Pré-verificações do Aurora MySQL que exibem avisos
<a name="precheck-descriptions-warnings.aurora"></a>

As pré-verificações a seguir são específicas do Aurora MySQL:
+ [auroraUpgradeCheckForRollbackSegmentHistoryLength](#auroraUpgradeCheckForRollbackSegmentHistoryLength)
+ [auroraUpgradeCheckForUncommittedRowModifications](#auroraUpgradeCheckForUncommittedRowModifications)

**auroraUpgradeCheckForRollbackSegmentHistoryLength**  
**Nível de pré-verificação: aviso**  
**Verifica se a extensão da lista de histórico do segmento de reversão para o cluster é alto**  
Como mencionado em [auroraUpgradeCheckForIncompleteXATransactions](#auroraUpgradeCheckForIncompleteXATransactions), ao executar o processo de atualização da versão principal, é essencial que a instância de banco de dados do Aurora MySQL versão 2 passe por um [desligamento limpo](https://dev.mysql.com/doc/refman/5.7/en/glossary.html#glos_slow_shutdown). Isso garante que todas as transações sejam confirmadas ou revertidas e que o InnoDB tenha eliminado todos os registros de logs undo.  
Se o tamanho da lista de histórico (HLL) de segmentos de reversão do cluster de banco de dados for grande, isso poderá prolongar o tempo que o InnoDB leva para concluir a limpeza dos registros de log undo, aumentando o tempo de inatividade durante o processo de atualização da versão principal. Se a pré-verificação detectar que o valor de HLL no cluster de banco de dados está alto, ela emitirá um aviso. Embora isso não impeça que a atualização continue, recomendamos que você monitore de perto o HLL no cluster de banco de dados. Mantê-lo em níveis baixos reduz o tempo de inatividade necessário durante a atualização de uma versão principal. Consulte mais informações sobre o monitoramento de HLL em [O tamanho da lista de histórico do InnoDB aumentou significativamente](proactive-insights.history-list.md).  
**Exemplos de resultado:**  

```
{
  "id": "auroraUpgradeCheckForRollbackSegmentHistoryLength",
  "title": "Checks if the rollback segment history length for the cluster is high",
  "status": "OK",
  "description": "Rollback Segment History length is greater than 1M. Upgrade may take longer time.",
  "detectedProblems": [
      {
        "level": "Warning",
        "dbObject": "information_schema.innodb_metrics",
        "description": "The InnoDB undo history list length('trx_rseg_history_len') is 82989114. Upgrade may take longer due to purging of undo information for old row versions."
      }
  ]
}
```
A pré-verificação exibe um aviso porque detectou que o valor de HLL de undo do InnoDB estava alto no cluster de banco de dados (82989114). Embora a atualização continue, dependendo da quantidade de undo a limpar, isso pode estender o tempo de inatividade necessário durante o processo de atualização.  
Recomendamos que você [investigue as transações abertas](proactive-insights.history-list.md) no cluster de banco de dados antes de executar atualização na produção, para garantir que o HLL seja mantido em um valor gerenciável.

**auroraUpgradeCheckForUncommittedRowModifications**  
**Nível de pré-verificação: aviso**  
**Verifica se há muitas modificações de linha não confirmadas**  
Como mencionado em [auroraUpgradeCheckForIncompleteXATransactions](#auroraUpgradeCheckForIncompleteXATransactions), ao executar o processo de atualização da versão principal, é essencial que a instância de banco de dados do Aurora MySQL versão 2 passe por um [desligamento limpo](https://dev.mysql.com/doc/refman/5.7/en/glossary.html#glos_slow_shutdown). Isso garante que todas as transações sejam confirmadas ou revertidas e que o InnoDB tenha eliminado todos os registros de logs undo.  
Se o cluster de banco de dados tiver transações que modificaram um grande número de linhas, isso poderá prolongar o tempo que o InnoDB leva para concluir uma reversão dessa transação como parte do processo de desligamento limpo. Se a pré-verificação encontrar transações de longa execução, com um grande número de linhas modificadas no cluster de banco de dados, ela gerará um aviso. Embora isso não impeça que a atualização continue, recomendamos que você monitore de perto o tamanho das transações ativas no cluster de banco de dados. Mantê-lo em níveis baixos reduz o tempo de inatividade necessário durante a atualização de uma versão principal.  
**Exemplos de resultado:**  

```
{
  "id": "auroraUpgradeCheckForUncommittedRowModifications",
  "title": "Checks if there are many uncommitted modifications to rows",
  "status": "OK",
  "description": "Database contains uncommitted row changes greater than 10M. Upgrade may take longer time.",
  "detectedProblems": [
      {
        "level": "Warning",
        "dbObject": "information_schema.innodb_trx",
        "description": "The database contains 11000000 uncommitted row change(s) in 1 transaction(s). Upgrade may take longer due to transaction rollback."
      }
  ]
},
```
A pré-verificação informa que o cluster de banco de dados contém uma transação com 11 milhões de alterações de linha não confirmadas que precisarão ser revertidas durante o processo de desligamento limpo. A atualização continuará, mas para reduzir o tempo de inatividade durante o processo, recomendamos que você monitore e investigue isso antes de realizar a atualização nos clusters de produção.  
Para visualizar transações ativas na instância de banco de dados do gravador, você pode usar a tabela [information\$1schema.innodb\$1trx](https://dev.mysql.com/doc/refman/5.7/en/information-schema-innodb-trx-table.html). A consulta a seguir na instância de banco de dados do gravador mostra as transações atuais, o tempo de execução, o estado e as linhas modificadas do cluster de banco de dados.  

```
# Example of uncommitted transaction
mysql> SELECT trx_started,
       TIME_TO_SEC(TIMEDIFF(now(), trx_started)) AS seconds_trx_has_been_running,
       trx_mysql_thread_id AS show_processlist_connection_id,
       trx_id,
       trx_state,
       trx_rows_modified AS rows_modified
FROM information_schema.innodb_trx;
+---------------------+------------------------------+--------------------------------+----------+-----------+---------------+
| trx_started         | seconds_trx_has_been_running | show_processlist_connection_id | trx_id   | trx_state | rows_modified |
+---------------------+------------------------------+--------------------------------+----------+-----------+---------------+
| 2024-08-12 18:32:52 |                         1592 |                          20041 | 52866130 | RUNNING   |      11000000 |
+---------------------+------------------------------+--------------------------------+----------+-----------+---------------+
1 row in set (0.01 sec)

# Example of transaction rolling back
mysql> SELECT trx_started,
       TIME_TO_SEC(TIMEDIFF(now(), trx_started)) AS seconds_trx_has_been_running,
       trx_mysql_thread_id AS show_processlist_connection_id,
       trx_id,
       trx_state,
       trx_rows_modified AS rows_modified
FROM information_schema.innodb_trx;
+---------------------+------------------------------+--------------------------------+----------+--------------+---------------+
| trx_started         | seconds_trx_has_been_running | show_processlist_connection_id | trx_id   | trx_state    | rows_modified |
+---------------------+------------------------------+--------------------------------+----------+--------------+---------------+
| 2024-08-12 18:32:52 |                         1719 |                          20041 | 52866130 | ROLLING BACK |      10680479 |
+---------------------+------------------------------+--------------------------------+----------+--------------+---------------+
1 row in set (0.01 sec)
```
Depois que a transação é confirmada ou revertida, a pré-verificação não exibe mais um aviso. Consulte a documentação do MySQL e sua equipe de aplicação antes de reverter qualquer transação grande, pois a conclusão da reversão pode levar algum tempo, dependendo do tamanho da transação.  

```
{
  "id": "auroraUpgradeCheckForUncommittedRowModifications",
  "title": "Checks if there are many uncommitted modifications to rows",
  "status": "OK",
  "detectedProblems": []
},
```
Consulte mais informações sobre como otimizar o gerenciamento de transações do InnoDB e o possível impacto da execução e reversão de grandes transações em instâncias do banco de dados do MySQL em [Optimizing InnoDB Transaction Management](https://dev.mysql.com/doc/refman/5.7/en/optimizing-innodb-transaction-management.html) na documentação do MySQL.

## Avisos
<a name="precheck-descriptions-notices"></a>

A pré-verificação a seguir gera um aviso quando a pré-visualização falha e a atualização pode continuar.

**sqlModeFlagCheck**  
**Nível de pré-verificação: aviso**  
**Uso dos sinalizadores obsoletos `sql_mode`**  
Além de `MAXDB`, várias outras opções de `sql_mode` foram [removidas](https://dev.mysql.com/doc/refman/8.0/en/mysql-nutshell.html): `DB2`, `MSSQL`, `MYSQL323`, `MYSQL40`, `ORACLE`, `POSTGRESQL`, `NO_FIELD_OPTIONS`, `NO_KEY_OPTIONS` e `NO_TABLE_OPTIONS`. A partir do MySQL 8.0, nenhum desses valores pode ser atribuído à variável de sistema `sql_mode`. Se essa pré-verificação encontrar alguma sessão aberta usando essas configurações de `sql_mode`, garanta que os grupos de parâmetros da instância e do cluster de banco de dados, bem como as configurações e aplicações cliente, estejam atualizados para desativá-las. Consulte mais informações na [documentação do MySQL](https://dev.mysql.com/doc/refman/8.0/en/mysql-nutshell.html).  
**Exemplos de resultado:**  

```
{
  "id": "sqlModeFlagCheck",
  "title": "Usage of obsolete sql_mode flags",
  "status": "OK",
  "detectedProblems": []
}
```
Para resolver qualquer uma dessas falhas de pré-verificação, consulte [maxdbFlagCheck](#maxdbFlagCheck).

## Erros, avisos ou alertas
<a name="precheck-descriptions-all"></a>

A pré-verificação a seguir pode exibir um erro, aviso ou alerta, dependendo da saída da pré-verificação.

**checkTableOutput**  
**Nível de pré-verificação: erro, aviso ou alerta**  
**Problemas relatados pelo comando `check table x for upgrade`**  
Antes de iniciar a atualização para o Aurora MySQL versão 3, `check table for upgrade` é executado em cada tabela nos esquemas do usuário no cluster de banco de dados. Essa pré-verificação não é a mesma que [checkTableMysqlSchema](#checkTableMysqlSchema).  
O comando `check table for upgrade` examina as tabelas em busca de possíveis problemas que possam surgir durante uma atualização para uma versão mais recente do MySQL. Executar esse comando antes de tentar fazer a atualização pode ajudar a identificar e resolver quaisquer incompatibilidades com antecedência, facilitando o respectivo processo.  
Esse comando executa várias verificações em cada tabela, como as seguintes:  
+ Verificar se os metadados e a estrutura da tabela são compatíveis com a versão de destino do MySQL
+ Verificar se há algum recurso obsoleto ou removido usado pela tabela
+ Garantir que a atualização da tabela seja feito adequadamente sem perda de dados
Ao contrário de outras pré-verificações, ela pode exibir um erro, aviso ou alerta, dependendo da saída `check table`. Se essa pré-verificação exibir alguma tabela, examine-a cuidadosamente, assim como o código de retorno e a mensagem, antes de iniciar a atualização. Consulte mais informações em [CHECK TABLE Statement](https://dev.mysql.com/doc/refman/5.7/en/check-table.html) na documentação do MySQL.  
Aqui, fornecemos um exemplo de erro e um exemplo de aviso.  
**Exemplo de erro:**  

```
{
  "id": "checkTableOutput",
  "title": "Issues reported by 'check table x for upgrade' command",
  "status": "OK",
  "detectedProblems": [
      {
        "level": "Error",
        "dbObject": "test.parent",
        "description": "Table 'test.parent' doesn't exist"
      }
  ]
},
```
A pré-verificação relata um erro de que a tabela `test.parent` não existe.  
O arquivo `mysql-error.log` da instância de banco de dados do gravador mostra que há um erro de chave externa.  

```
2024-08-13T15:32:10.676893Z 62 [Warning] InnoDB: Load table `test`.`parent` failed, the table has missing foreign key indexes. Turn off 'foreign_key_checks' and try again.
2024-08-13T15:32:10.676905Z 62 [Warning] InnoDB: Cannot open table test/parent from the internal data dictionary of InnoDB though the .frm file for the table exists.
Please refer to http://dev.mysql.com/doc/refman/5.7/en/innodb-troubleshooting.html for how to resolve the issue.
```
Faça login na instância de banco de dados do gravador e execute `show engine innodb status\G` para ter mais informações sobre o erro de chave externa.  

```
mysql> show engine innodb status\G
*************************** 1. row ***************************
  Type: InnoDB
  Name:
Status:
=====================================
2024-08-13 15:33:33 0x14ef7b8a1700 INNODB MONITOR OUTPUT
=====================================
.
.
.
------------------------
LATEST FOREIGN KEY ERROR
------------------------
2024-08-13 15:32:10 0x14ef6dbbb700 Error in foreign key constraint of table test/child:
there is no index in referenced table which would contain
the columns as the first columns, or the data types in the
referenced table do not match the ones in table. Constraint:
,
  CONSTRAINT `fk_pname` FOREIGN KEY (`p_name`) REFERENCES `parent` (`name`)
The index in the foreign key in table is p_name_idx
Please refer to http://dev.mysql.com/doc/refman/5.7/en/innodb-foreign-key-constraints.html for correct foreign key definition.
.
.
```
A mensagem `LATEST FOREIGN KEY ERROR` informa que a restrição de chave externa `fk_pname` na tabela `test.child`, que faz referência à tabela `test.parent`, tem um índice ausente ou uma incompatibilidade de tipo de dados. A documentação do MySQL sobre [restrições de chave externa](https://dev.mysql.com/doc/refman/5.7/en/create-table-foreign-keys.html) menciona que as colunas referidas em uma chave externa devem ter um índice associado e que as colunas principal/secundárias devem usar o mesmo tipo de dados.  
Para verificar se isso está relacionado a um índice ausente ou a uma incompatibilidade de tipo de dados, faça login no banco de dados e verifique as definições da tabela desativando temporariamente a variável de sessão [foreign\$1key\$1checks](https://dev.mysql.com/doc/refman/5.7/en/create-table-foreign-keys.html#foreign-key-checks). Depois de fazer isso, podemos ver que a restrição secundária em questão (`fk_pname`) usa `p_name varchar(20) CHARACTER SET latin1 DEFAULT NULL` para se referir à tabela principal `name varchar(20) NOT NULL`. A tabela principal usa `DEFAULT CHARSET=utf8`, mas a coluna `p_name` da tabela secundária usa `latin1`, então o erro de incompatibilidade do tipo de dados é gerado.  

```
mysql> show create table parent\G
ERROR 1146 (42S02): Table 'test.parent' doesn't exist

mysql> show create table child\G
*************************** 1. row ***************************
       Table: child
Create Table: CREATE TABLE `child` (
  `id` int(11) NOT NULL,
  `p_name` varchar(20) CHARACTER SET latin1 DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `p_name_idx` (`p_name`),
  CONSTRAINT `fk_pname` FOREIGN KEY (`p_name`) REFERENCES `parent` (`name`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
1 row in set (0.00 sec)

mysql> set foreign_key_checks=0;
Query OK, 0 rows affected (0.00 sec)

mysql> show create table parent\G
*************************** 1. row ***************************
       Table: parent
Create Table: CREATE TABLE `parent` (
  `name` varchar(20) NOT NULL,
  PRIMARY KEY (`name`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
1 row in set (0.00 sec)

mysql> show create table child\G
*************************** 1. row ***************************
       Table: child
Create Table: CREATE TABLE `child` (
  `id` int(11) NOT NULL,
  `p_name` varchar(20) CHARACTER SET latin1 DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `p_name_idx` (`p_name`),
  CONSTRAINT `fk_pname` FOREIGN KEY (`p_name`) REFERENCES `parent` (`name`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
1 row in set (0.00 sec)
```
Para resolver esse problema, podemos alterar a tabela secundária para que use o mesmo conjunto de caracteres da tabela principal ou alterar a tabela principal para que use o mesmo conjunto de caracteres da tabela secundária. Aqui, como a tabela secundária usa explicitamente `latin1` na definição da coluna `p_name`, executamos `ALTER TABLE` para modificar o conjunto de caracteres para `utf8`.  

```
mysql> alter table child modify p_name varchar(20) character set utf8 DEFAULT NULL;
Query OK, 0 rows affected (0.06 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> flush tables;
Query OK, 0 rows affected (0.01 sec)
```
Depois disso, a pré-verificação é concluída com êxito e a atualização pode continuar.  
**Exemplo de aviso:**  

```
{
  "id": "checkTableOutput",
  "title": "Issues reported by 'check table x for upgrade' command",
  "status": "OK",
  "detectedProblems": [
      {
        "level": "Warning",
        "dbObject": "test.orders",
        "description": "Trigger test.orders.delete_audit_trigg does not have CREATED attribute."
      }
  ]
}
```
A pré-verificação exibe um aviso para o gatilho `delete_audit_trigg` na tabela `test.orders` porque ela não tem um atributo `CREATED`. De acordo com [Checking Version Compatibility](https://dev.mysql.com/doc/refman/5.7/en/check-table.html#check-table-version-compatibility) na documentação do MySQL, essa mensagem é informativa e é impressa para gatilhos criados antes do MySQL 5.7.2.  
Como é um aviso, isso não impede que a atualização continue. No entanto, se quiser resolver o problema, você pode recriar o gatilho em questão e a pré-verificação será bem-sucedida sem nenhum aviso.  

```
{
  "id": "checkTableOutput",
  "title": "Issues reported by 'check table x for upgrade' command",
  "status": "OK",
  "detectedProblems": []
},
```

# Como realizar uma atualização local
<a name="AuroraMySQL.Upgrading.Procedure"></a>

Recomendamos revisar o material de base em [Como funciona a atualização da versão principal no local Aurora MySQL](AuroraMySQL.Updates.MajorVersionUpgrade.md#AuroraMySQL.Upgrading.Sequence).

Execute qualquer planejamento e teste de pré-atualização, conforme descrito em [Planejando uma atualização de versão principal para um cluster de Aurora MySQL](AuroraMySQL.Updates.MajorVersionUpgrade.md#AuroraMySQL.Upgrading.Planning).

## Console
<a name="AuroraMySQL.Upgrading.ModifyingDBCluster.CON"></a>

O exemplo a seguir atualiza o cluster de banco de dados `mydbcluster-cluster` para o Aurora MySQL versão 3.04.1.

**Para atualizar a versão principal de um cluster de bancos de dados Aurora MySQL**

1. Faça login no Console de gerenciamento da AWS e abra o console do Amazon RDS em [https://console.aws.amazon.com/rds/](https://console.aws.amazon.com/rds/).

1. Se você usou um grupo de parâmetros personalizado com o cluster de banco de dados original, crie um grupo de parâmetros correspondente compatível com a nova versão principal. Faça todos os ajustes necessários aos parâmetros de configuração nesse novo grupo de parâmetro. Para ter mais informações, consulte [Como as atualizações locais afetam os grupos de parâmetros de um cluster](#AuroraMySQL.Upgrading.ParamGroups).

1.  No painel de navegação, escolha **Databases (Bancos de dados)**. 

1.  Na lista, escolha o cluster de banco de dados que deseja modificar. 

1.  Selecione **Modify**. 

1.  Em **Version** (Versão), selecione uma versão principal do Aurora MySQL.

   Recomendamos usar a versão secundária mais recente da versão principal. Aqui, escolhemos a versão padrão atual.  
![\[Atualização no local de um cluster de banco de dados do Aurora MySQL da versão 2 para a versão 3\]](http://docs.aws.amazon.com/pt_br/AmazonRDS/latest/AuroraUserGuide/images/ams-upgrade-v2-v3.png)

1.  Escolha **Continue**. 

1.  Na próxima página, especifique quando executar a atualização. Escolha **During the next scheduled maintenance window (Durante a próxima janela de manutenção programada)** ou **Immediately (Imediatamente)**. 

1.  (Opcional) Examine periodicamente a página **Events (Eventos)** no console do RDS durante a atualização. Isso ajuda você a monitorar o progresso da atualização e identificar quaisquer problemas. Se a atualização encontrar quaisquer problemas, consulte [Solução de problemas para atualização no local de Aurora MySQL](AuroraMySQL.Upgrading.Troubleshooting.md) para as etapas a serem realizadas. 

1. Se você criou um grupo de parâmetros no início deste procedimento, associe o grupo de parâmetros personalizado ao cluster atualizado. Para ter mais informações, consulte [Como as atualizações locais afetam os grupos de parâmetros de um cluster](#AuroraMySQL.Upgrading.ParamGroups).
**nota**  
 A execução desta etapa exige que você reinicie o cluster novamente para aplicar o novo grupo de parâmetro. 

1.  (Opcional) Depois de concluir qualquer teste pós-atualização, exclua o snapshot manual que Aurora criado no início da atualização. 

## AWS CLI
<a name="AuroraMySQL.Upgrading.ModifyingDBCluster.CLI"></a>

Para atualizar a versão principal de um cluster de bancos de dados Aurora MySQL, use o comando da AWS CLI [modify-db-cluster](https://docs.aws.amazon.com/cli/latest/reference/rds/modify-db-cluster.html) com os seguintes parâmetros obrigatórios:
+ `--db-cluster-identifier`
+ `--engine-version`
+ `--allow-major-version-upgrade`
+  `--apply-immediately` ou `--no-apply-immediately`

Se o cluster usar quaisquer grupos de parâmetros personalizados, inclua também uma ou ambas as opções a seguir:
+ `--db-cluster-parameter-group-name`, se o cluster usar um grupo de parâmetros de cluster personalizado
+ `--db-instance-parameter-group-name`, se alguma instância no cluster usar um grupo de parâmetro de banco de dados personalizado

O exemplo a seguir atualiza o cluster de banco de dados `sample-cluster` para o Aurora MySQL versão 3.04.1. A atualização acontece imediatamente, em vez de aguardar a próxima janela de manutenção.

**Example**  
Para Linux, macOS ou Unix:  

```
aws rds modify-db-cluster \
          --db-cluster-identifier sample-cluster \
          --engine-version 8.0.mysql_aurora.3.04.1 \
          --allow-major-version-upgrade \
          --apply-immediately
```
Para Windows:  

```
aws rds modify-db-cluster ^
          --db-cluster-identifier sample-cluster ^
          --engine-version 8.0.mysql_aurora.3.04.1 ^
          --allow-major-version-upgrade ^
          --apply-immediately
```
Você pode combinar outros comandos CLI com `modify-db-cluster` para criar um processo completo automatizado para executar e verificar atualizações. Para ter mais informações e exemplos, consulte [Tutorial de atualização no local de Aurora MySQL](AuroraMySQL.Upgrading.Tutorial.md).

**nota**  
Se o cluster fizer parte de um banco de dados Aurora global, o procedimento de atualização local será ligeiramente diferente. Você chama a operação de comando [modify-global-cluster](https://docs.aws.amazon.com/cli/latest/reference/rds/modify-global-cluster.html) em vez de `modify-db-cluster`. Para ter mais informações, consulte [Principais atualizações no local para bancos de dados globais](#AuroraMySQL.Upgrading.GlobalDB).

## API do RDS
<a name="AuroraMySQL.Upgrading.ModifyingDBCluster.API"></a>

Para atualizar a versão principal de um cluster de banco de dados do Aurora MySQL, use a operação [ModifyDBCluster](https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_ModifyDBCluster.html) da API do RDS com os seguintes parâmetros necessários:
+ `DBClusterIdentifier`
+ `Engine`
+ `EngineVersion`
+ `AllowMajorVersionUpgrade`
+ `ApplyImmediately` (definido como `true` ou `false`)

**nota**  
Se o cluster fizer parte de um banco de dados Aurora global, o procedimento de atualização local será ligeiramente diferente. Você chama a operação [ModifyGlobalCluster](https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_ModifyGlobalClusterParameterGroup.html) em vez de `ModifyDBCluster`. Para ter mais informações, consulte [Principais atualizações no local para bancos de dados globais](#AuroraMySQL.Upgrading.GlobalDB).

## Como as atualizações locais afetam os grupos de parâmetros de um cluster
<a name="AuroraMySQL.Upgrading.ParamGroups"></a>

Os grupos de parâmetros do Aurora têm diferentes conjuntos de configurações para clusters que são compatíveis com MySQL 5.7 ou 8.0. Quando você realiza uma atualização no local, o cluster atualizado e todas as instâncias devem usar grupos de parâmetros de instância e cluster correspondentes:

Seu cluster e suas instâncias podem usar os grupos de parâmetros padrão compatíveis com 5.7. Em caso afirmativo, o cluster atualizado e a instância iniciarão com os grupos de parâmetros padrão compatíveis com 8.0. Se o cluster e as instâncias usarem quaisquer grupos de parâmetros personalizados, crie grupos de parâmetros correspondentes ou compatíveis com 8.0. Além disso, especifique-os durante o processo de atualização.

**nota**  
Para a maioria das configurações de parâmetros, é possível selecionar o grupo de parâmetros personalizado em dois pontos. É quando você cria o cluster ou associa o grupo de parâmetros ao cluster mais tarde.  
No entanto, se você utilizar uma configuração não padrão para o parâmetro `lower_case_table_names`, deverá configurar o grupo de parâmetros personalizado com essa configuração com antecedência. Em seguida, especifique o grupo de parâmetros ao realizar a restauração do snapshot para criar o cluster. Qualquer alteração no parâmetro `lower_case_table_names` não terá efeito após a criação do cluster.  
Recomendamos que você use a mesma configuração para `lower_case_table_names` ao atualizar do Aurora MySQL versão 2 para a versão 3.  
Com um banco de dados Aurora global baseado no Aurora MySQL, você não poderá executar uma atualização no local do Aurora MySQL versão 2 para a versão 3 se o parâmetro `lower_case_table_names` estiver ativado. Para ter mais informações sobre os métodos que você pode usar, consulte [Atualizações de versão principal](aurora-global-database-upgrade.md#aurora-global-database-upgrade.major).

**Importante**  
 Se você especificar qualquer grupo de parâmetros personalizado durante o processo de atualização, será necessário reinicializar manualmente o cluster após a conclusão da atualização. Isso faz com que o cluster comece a usar suas configurações de parâmetros personalizadas. 

## Alterações nas propriedades do cluster entre as versões do Aurora MySQL
<a name="AuroraMySQL.Upgrading.Attrs"></a>

Ao realizar o upgrade do Aurora MySQL versão 2 para a versão 3, verifique todas as aplicações ou scripts utilizados para configurar ou gerenciar clusters e instâncias de banco de dados do Aurora MySQL.

Além disso, altere seu código que manipula grupos de parâmetros para explicar o fato de que os nomes dos grupos de parâmetros padrão são diferentes para os clusters compatíveis com as versões 5.7 e 8.0. Os nomes dos grupos de parâmetros padrão para clusters do Aurora MySQL versão 2 e 3 são `default.aurora-mysql5.7` e `default.aurora-mysql8.0`, respectivamente.

Por exemplo, você pode ter um código como abaixo que se aplica ao cluster antes de uma atualização.

```
# Check the default parameter values for MySQL 5.7–compatible clusters.
aws rds describe-db-parameters --db-parameter-group-name default.aurora-mysql5.7 --region us-east-1
```

 Depois de atualizar a versão principal do cluster, altere esse código da seguinte forma.

```
# Check the default parameter values for MySQL 8.0–compatible clusters.
aws rds describe-db-parameters --db-parameter-group-name default.aurora-mysql8.0 --region us-east-1
```

## Principais atualizações no local para bancos de dados globais
<a name="AuroraMySQL.Upgrading.GlobalDB"></a>

 Para um Aurora Global Database, você atualiza o cluster de banco de dados global. O Aurora atualiza automaticamente todos os clusters ao mesmo tempo e garante que todos eles executem a mesma versão do mecanismo. Esse requisito ocorre porque todas as alterações nas tabelas do sistema, formatos de arquivo de dados e outros são replicadas automaticamente para todos os clusters secundários. 

Siga as instruções em [Como funciona a atualização da versão principal no local Aurora MySQL](AuroraMySQL.Updates.MajorVersionUpgrade.md#AuroraMySQL.Upgrading.Sequence). Quando você especificar o que deve ser atualizado, escolha o cluster de banco de dados global em vez de um dos clusters que ele contém.

Se você usar o Console de gerenciamento da AWS, escolha o item com a função **Global database** (Banco de dados global).

![\[Atualizar o cluster de banco de dados global\]](http://docs.aws.amazon.com/pt_br/AmazonRDS/latest/AuroraUserGuide/images/aurora-global-databases-major-upgrade-global-cluster.png)


 Se você usar a AWS CLI ou a API do RDS, inicie o processo de atualização chamando o comando [modify-global-cluster](https://docs.aws.amazon.com/cli/latest/reference/rds/modify-global-cluster.html) ou a operação [ModifyGlobalCluster](https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_ModifyGlobalCluster.html). Você usa um desses em vez de `modify-db-cluster` ou `ModifyDBCluster`.

**nota**  
Você não pode especificar um grupo de parâmetros personalizado para o cluster de banco de dados global enquanto estiver realizando uma atualização de versão principal desse banco de dados global do Aurora. Crie seus grupos de parâmetros personalizados em cada região do cluster global. Depois, aplique-os manualmente aos clusters regionais após a atualização.

 Para atualizar a versão principal de um cluster de bancos de dados do Aurora MySQL, use o comando [modify-global-cluster](https://docs.aws.amazon.com/cli/latest/reference/rds/modify-global-cluster.html) da AWS CLI com os seguintes parâmetros obrigatórios: 
+  `--global-cluster-identifier` 
+  `--engine aurora-mysql` 
+  `--engine-version` 
+  `--allow-major-version-upgrade` 

O exemplo a seguir atualiza o cluster de banco de dados global para a Aurora MySQL versão 2.10.2.

**Example**  
Para Linux, macOS ou Unix:  

```
aws rds modify-global-cluster \
          --global-cluster-identifier global_cluster_identifier \
          --engine aurora-mysql \
          --engine-version 5.7.mysql_aurora.2.10.2 \
          --allow-major-version-upgrade
```
Para Windows:  

```
aws rds modify-global-cluster ^
          --global-cluster-identifier global_cluster_identifier ^
          --engine aurora-mysql ^
          --engine-version 5.7.mysql_aurora.2.10.2 ^
          --allow-major-version-upgrade
```

## Considerações sobre retrocesso
<a name="AuroraMySQL.Upgrading.Backtrack"></a>

Se o cluster que você atualizou tiver o recurso de retrocesso ativado, você não poderá retroceder o cluster atualizado para antes da atualização.

# Tutorial de atualização no local de Aurora MySQL
<a name="AuroraMySQL.Upgrading.Tutorial"></a>

Os exemplos do Linux a seguir mostram como você pode executar as etapas gerais do procedimento de atualização no local usando AWS CLI.

Este primeiro exemplo cria um cluster de banco de dados do Aurora que está executando uma versão 2.x do Aurora MySQL. O cluster inclui uma instância de banco de dados de gravador e uma instância de banco de dados de leitor. O comando `wait db-instance-available` pausa até que a instância de banco de dados do gravador esteja disponível. Esse é o ponto em que o cluster está pronto para ser atualizado.

```
aws rds create-db-cluster --db-cluster-identifier mynewdbcluster --engine aurora-mysql \
  --db-cluster-version 5.7.mysql_aurora.2.11.2
...
aws rds create-db-instance --db-instance-identifier mynewdbcluster-instance1 \
  --db-cluster-identifier mynewdbcluster --db-instance-class db.t4g.medium --engine aurora-mysql
...
aws rds wait db-instance-available --db-instance-identifier mynewdbcluster-instance1
```

As versões 3.x do Aurora MySQL para as quais é possível fazer upgrade do cluster dependem da versão 2.x em que o cluster está sendo executado no momento e da Região da AWS em que o cluster está localizado. O primeiro comando com `--output text` apenas mostra a versão de destino disponível. O segundo comando mostra a saída JSON completa da resposta. Nessa resposta, você pode ver detalhes, como o valor `aurora-mysql` que você usa para o parâmetro `engine`. Você também pode ver o fato de que fazer upgrade para a versão 3.04.0 representa um upgrade de versão principal.

```
aws rds describe-db-clusters --db-cluster-identifier mynewdbcluster \
  --query '*[].{EngineVersion:EngineVersion}' --output text
5.7.mysql_aurora.2.11.2

aws rds describe-db-engine-versions --engine aurora-mysql --engine-version 5.7.mysql_aurora.2.11.2 \
  --query '*[].[ValidUpgradeTarget]'
...
{
    "Engine": "aurora-mysql",
    "EngineVersion": "8.0.mysql_aurora.3.04.0",
    "Description": "Aurora MySQL 3.04.0 (compatible with MySQL 8.0.28)",
    "AutoUpgrade": false,
    "IsMajorVersionUpgrade": true,
    "SupportedEngineModes": [
        "provisioned"
    ],
    "SupportsParallelQuery": true,
    "SupportsGlobalDatabases": true,
    "SupportsBabelfish": false,
    "SupportsIntegrations": false
},
...
```

Este exemplo mostra que, se você inserir um número de versão de destino que não seja um destino de atualização válido para o cluster, o Aurora não realizará a atualização. O Aurora também não realiza uma atualização de versão principal, a menos que você inclua o parâmetro `--allow-major-version-upgrade`. Dessa forma, você não pode executar acidentalmente uma atualização que precise exigir testes e alterações amplas no código do aplicativo.

```
aws rds modify-db-cluster --db-cluster-identifier mynewdbcluster \
  --engine-version 5.7.mysql_aurora.2.09.2 --apply-immediately
An error occurred (InvalidParameterCombination) when calling the ModifyDBCluster operation: Cannot find upgrade target from 5.7.mysql_aurora.2.11.2 with requested version 5.7.mysql_aurora.2.09.2.

aws rds modify-db-cluster --db-cluster-identifier mynewdbcluster \
  --engine-version 8.0.mysql_aurora.3.04.0 --region us-east-1 --apply-immediately
An error occurred (InvalidParameterCombination) when calling the ModifyDBCluster operation: The AllowMajorVersionUpgrade flag must be present when upgrading to a new major version.

aws rds modify-db-cluster --db-cluster-identifier mynewdbcluster \
  --engine-version 8.0.mysql_aurora.3.04.0 --apply-immediately --allow-major-version-upgrade
{
  "DBClusterIdentifier": "mynewdbcluster",
  "Status": "available",
  "Engine": "aurora-mysql",
  "EngineVersion": "5.7.mysql_aurora.2.11.2"
}
```

 Demora alguns momentos para que o status do cluster e das instâncias de banco de dados associadas mudem para `upgrading`. Os números de versão para as instâncias de cluster e banco de dados só mudam quando a atualização for concluída. Novamente, você pode usar o comando `wait db-instance-available` para que a instância de banco de dados do gravador aguarde até que a atualização seja concluída antes de prosseguir. 

```
aws rds describe-db-clusters --db-cluster-identifier mynewdbcluster \
  --query '*[].[Status,EngineVersion]' --output text
upgrading 5.7.mysql_aurora.2.11.2

aws rds describe-db-instances --db-instance-identifier mynewdbcluster-instance1 \
  --query '*[].{DBInstanceIdentifier:DBInstanceIdentifier,DBInstanceStatus:DBInstanceStatus} | [0]'
{
    "DBInstanceIdentifier": "mynewdbcluster-instance1",
    "DBInstanceStatus": "upgrading"
}

aws rds wait db-instance-available --db-instance-identifier mynewdbcluster-instance1
```

 Neste ponto, o número da versão para o cluster corresponde ao que foi especificado para a atualização. 

```
aws rds describe-db-clusters --db-cluster-identifier mynewdbcluster \
  --query '*[].[EngineVersion]' --output text

8.0.mysql_aurora.3.04.0
```

O exemplo anterior fez uma atualização imediata especificando o parâmetro `--apply-immediately`. Para que a atualização aconteça em um momento conveniente quando o cluster não estiver ocupado, você pode especificar o parâmetro `--no-apply-immediately`. Isso faz com que a atualização inicie durante a próxima janela de manutenção para o cluster. A janela de manutenção define o período durante o qual as operações de manutenção podem ser iniciadas. Uma operação de longa duração pode não ser concluída durante a janela de manutenção. Assim, você não precisa definir uma janela de manutenção maior mesmo se esperar que a atualização possa levar muito tempo.

O exemplo a seguir faz upgrade de um cluster que está executando inicialmente o Aurora MySQL versão 2.11.2. Na saída `describe-db-engine-versions`, os valores `False` e `True` representam a propriedade `IsMajorVersionUpgrade`. A partir da versão 2.11.2, é possível fazer upgrade para algumas outras versões 2.\$1. Essas atualizações não são consideradas atualizações de versão principais e, portanto, não exigem uma atualização no local. O upgrade no local só está disponível para upgrades para as versões 3.\$1 que são mostradas na lista.

```
aws rds describe-db-clusters --db-cluster-identifier mynewdbcluster \
  --query '*[].{EngineVersion:EngineVersion}' --output text
5.7.mysql_aurora.2.11.2

aws rds describe-db-engine-versions --engine aurora-mysql --engine-version 5.7.mysql_aurora.2.10.2 \
  --query '*[].[ValidUpgradeTarget]|[0][0]|[*].[EngineVersion,IsMajorVersionUpgrade]' --output text

5.7.mysql_aurora.2.11.3 False
5.7.mysql_aurora.2.11.4 False
5.7.mysql_aurora.2.11.5 False
5.7.mysql_aurora.2.11.6 False
5.7.mysql_aurora.2.12.0 False
5.7.mysql_aurora.2.12.1 False
5.7.mysql_aurora.2.12.2 False
5.7.mysql_aurora.2.12.3 False
8.0.mysql_aurora.3.04.0 True
8.0.mysql_aurora.3.04.1 True
8.0.mysql_aurora.3.04.2 True
8.0.mysql_aurora.3.04.3 True
8.0.mysql_aurora.3.05.2 True
8.0.mysql_aurora.3.06.0 True
8.0.mysql_aurora.3.06.1 True
8.0.mysql_aurora.3.07.1 True

aws rds modify-db-cluster --db-cluster-identifier mynewdbcluster \
  --engine-version 8.0.mysql_aurora.3.04.0 --no-apply-immediately --allow-major-version-upgrade
...
```

Quando um cluster é criado sem uma janela de manutenção especificada, Aurora seleciona um dia aleatório da semana. Nesse caso, o comando `modify-db-cluster` é enviado em uma segunda-feira. Assim, mudamos a janela de manutenção para terça-feira de manhã. Todos os horários são representados no fuso horário UTC. A janela `tue:10:00-tue:10:30` corresponde ao intervalo das 2h às 2h30 no horário do Pacífico. A alteração na janela de manutenção entra em vigor imediatamente.

```
aws rds describe-db-clusters --db-cluster-identifier mynewdbcluster --query '*[].[PreferredMaintenanceWindow]'
[
    [
        "sat:08:20-sat:08:50"
    ]
]

aws rds modify-db-cluster --db-cluster-identifier mynewdbcluster --preferred-maintenance-window tue:10:00-tue:10:30"
aws rds describe-db-clusters --db-cluster-identifier mynewdbcluster --query '*[].[PreferredMaintenanceWindow]'
[
    [
        "tue:10:00-tue:10:30"
    ]
]
```

O exemplo a seguir mostra como obter um relatório dos eventos gerados pela atualização. O argumento `--duration` representa o número de minutos para recuperar as informações do evento. Ele é necessário porque, por padrão, `describe-events` só exibe eventos da última hora.

```
aws rds describe-events --source-type db-cluster --source-identifier mynewdbcluster --duration 20160
{
    "Events": [
        {
            "SourceIdentifier": "mynewdbcluster",
            "SourceType": "db-cluster",
            "Message": "DB cluster created",
            "EventCategories": [
                "creation"
            ],
            "Date": "2022-11-17T01:24:11.093000+00:00",
            "SourceArn": "arn:aws:rds:us-east-1:123456789012:cluster:mynewdbcluster"
        },
        {
            "SourceIdentifier": "mynewdbcluster",
            "SourceType": "db-cluster",
            "Message": "Upgrade in progress: Performing online pre-upgrade checks.",
            "EventCategories": [
                "maintenance"
            ],
            "Date": "2022-11-18T22:57:08.450000+00:00",
            "SourceArn": "arn:aws:rds:us-east-1:123456789012:cluster:mynewdbcluster"
        },
        {
            "SourceIdentifier": "mynewdbcluster",
            "SourceType": "db-cluster",
            "Message": "Upgrade in progress: Performing offline pre-upgrade checks.",
            "EventCategories": [
                "maintenance"
            ],
            "Date": "2022-11-18T22:57:59.519000+00:00",
            "SourceArn": "arn:aws:rds:us-east-1:123456789012:cluster:mynewdbcluster"
        },
        {
            "SourceIdentifier": "mynewdbcluster",
            "SourceType": "db-cluster",
            "Message": "Upgrade in progress: Creating pre-upgrade snapshot [preupgrade-mynewdbcluster-5-7-mysql-aurora-2-10-2-to-8-0-mysql-aurora-3-02-0-2022-11-18-22-55].",
            "EventCategories": [
                "maintenance"
            ],
            "Date": "2022-11-18T23:00:22.318000+00:00",
            "SourceArn": "arn:aws:rds:us-east-1:123456789012:cluster:mynewdbcluster"
        },
        {
            "SourceIdentifier": "mynewdbcluster",
            "SourceType": "db-cluster",
            "Message": "Upgrade in progress: Cloning volume.",
            "EventCategories": [
                "maintenance"
            ],
            "Date": "2022-11-18T23:01:45.428000+00:00",
            "SourceArn": "arn:aws:rds:us-east-1:123456789012:cluster:mynewdbcluster"
        },
        {
            "SourceIdentifier": "mynewdbcluster",
            "SourceType": "db-cluster",
            "Message": "Upgrade in progress: Purging undo records for old row versions. Records remaining: 164",
            "EventCategories": [
                "maintenance"
            ],
            "Date": "2022-11-18T23:02:25.141000+00:00",
            "SourceArn": "arn:aws:rds:us-east-1:123456789012:cluster:mynewdbcluster"
        },
        {
            "SourceIdentifier": "mynewdbcluster",
            "SourceType": "db-cluster",
            "Message": "Upgrade in progress: Purging undo records for old row versions. Records remaining: 164",
            "EventCategories": [
                "maintenance"
            ],
            "Date": "2022-11-18T23:06:23.036000+00:00",
            "SourceArn": "arn:aws:rds:us-east-1:123456789012:cluster:mynewdbcluster"
        },
        {
            "SourceIdentifier": "mynewdbcluster",
            "SourceType": "db-cluster",
            "Message": "Upgrade in progress: Upgrading database objects.",
            "EventCategories": [
                "maintenance"
            ],
            "Date": "2022-11-18T23:06:48.208000+00:00",
            "SourceArn": "arn:aws:rds:us-east-1:123456789012:cluster:mynewdbcluster"
        },
        {
            "SourceIdentifier": "mynewdbcluster",
            "SourceType": "db-cluster",
            "Message": "Database cluster major version has been upgraded",
            "EventCategories": [
                "maintenance"
            ],
            "Date": "2022-11-18T23:10:28.999000+00:00",
            "SourceArn": "arn:aws:rds:us-east-1:123456789012:cluster:mynewdbcluster"
        }
    ]
}
```

# Descobrir os motivos das falhas de atualização da versão principal do Aurora MySQL
<a name="AuroraMySQL.Upgrading.failure-events"></a>

No [tutorial](AuroraMySQL.Upgrading.Tutorial.md), a atualização do Aurora MySQL versão 2 para a versão 3 foi bem-sucedida. Mas, se a atualização tivesse falhado, seria útil saber o motivo.

É possível começar usando o comando `describe-events` da AWS CLI para examinar os eventos do cluster de banco de dados. Este exemplo mostra os eventos de `mydbcluster` nas últimas dez horas.

```
aws rds describe-events \
    --source-type db-cluster \
    --source-identifier mydbcluster \
    --duration 600
```

Nesse caso, tivemos uma falha na pré-verificação da atualização.

```
{
    "Events": [
        {
            "SourceIdentifier": "mydbcluster",
            "SourceType": "db-cluster",
            "Message": "Database cluster engine version upgrade started.",
            "EventCategories": [
                "maintenance"
            ],
            "Date": "2024-04-11T13:23:22.846000+00:00",
            "SourceArn": "arn:aws:rds:us-east-1:123456789012:cluster:mydbcluster"
        },
        {
            "SourceIdentifier": "mydbcluster",
            "SourceType": "db-cluster",
            "Message": "Database cluster is in a state that cannot be upgraded: Upgrade prechecks failed. For more details, see the  
             upgrade-prechecks.log file. For more information on troubleshooting the cause of the upgrade failure, see 
             https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/AuroraMySQL.Upgrading.Troubleshooting.html",
            "EventCategories": [
                "maintenance"
            ],
            "Date": "2024-04-11T13:23:24.373000+00:00",
            "SourceArn": "arn:aws:rds:us-east-1:123456789012:cluster:mydbcluster"
        }
    ]
}
```

Para diagnosticar a causa exata do problema, examine os logs do banco de dados para a instância de banco de dados de gravador. Quando uma atualização para o Aurora MySQL versão 3 falha, a instância de gravador contém um arquivo de log com o nome do arquivo `upgrade-prechecks.log`. Este exemplo mostra como detectar a presença desse log e, em seguida, baixá-lo para um arquivo local para exame.

```
aws rds describe-db-log-files --db-instance-identifier mydbcluster-instance \
    --query '*[].[LogFileName]' --output text

error/mysql-error-running.log
error/mysql-error-running.log.2024-04-11.20
error/mysql-error-running.log.2024-04-11.21
error/mysql-error.log
external/mysql-external.log
upgrade-prechecks.log

aws rds download-db-log-file-portion --db-instance-identifier mydbcluster-instance \
    --log-file-name upgrade-prechecks.log \
    --starting-token 0 \
    --output text >upgrade_prechecks.log
```

O arquivo `upgrade-prechecks.log` está no formato JSON. Nós o baixamos usando a opção `--output text` para evitar codificar a saída JSON em outro wrapper JSON. Para atualizações do Aurora MySQL versão 3, esse log sempre inclui determinadas mensagens informativas e de aviso. Ele só inclui mensagens de erro se a atualização falhar. Se a atualização for bem-sucedida, o arquivo de log não será produzido.

Para resumir todos esses erros e exibir os campos de objeto e descrição associados, é possível executar o comando `grep -A 2 '"level": "Error"'` no conteúdo do arquivo `upgrade-prechecks.log`. Isso exibe cada linha de erro e as duas linhas depois dela. Elas contêm o nome do objeto de banco de dados correspondente e orientações sobre como corrigir o problema.

```
$ cat upgrade-prechecks.log | grep -A 2 '"level": "Error"'

"level": "Error",
"dbObject": "problematic_upgrade.dangling_fulltext_index",
"description": "Table `problematic_upgrade.dangling_fulltext_index` contains dangling FULLTEXT index. Kindly recreate the table before upgrade."
```

Neste exemplo, é possível executar o comando SQL a seguir na tabela com problemas para tentar corrigi-los ou recriar a tabela sem o índice pendente.

```
OPTIMIZE TABLE problematic_upgrade.dangling_fulltext_index;
```

Tente realizar a atualização novamente.

# Solução de problemas para atualização no local de Aurora MySQL
<a name="AuroraMySQL.Upgrading.Troubleshooting"></a>

Use as dicas a seguir para ajudar a solucionar problemas com as atualizações no local do Aurora MySQL. Estas dicas não se aplicam a clusters de banco de dados do Aurora Serverless.


| Motivo para a atualização no local ser cancelada ou lenta | Efeito | Solução para permitir que a atualização no local seja concluída dentro da janela de manutenção | 
| --- | --- | --- | 
| A réplica associada entre regiões do Aurora ainda não foi corrigida | Aurora cancela a atualização. | Atualize a réplica entre regiões do Aurora e tente novamente. | 
| Cluster tem transações XA no estado preparado | Aurora cancela a atualização. | Confirmar ou reverter todas as transações XA preparadas. | 
| O cluster está processando qualquer instrução DDL (Data Definition Language) | Aurora cancela a atualização. | Considere esperar e executar a atualização depois que todas as instruções DDL estiverem concluídas. | 
| Cluster tem alterações não confirmadas para muitas linhas | A atualização pode levar muito tempo. |  O processo de atualização reverte as alterações não confirmadas. O indicador para esta condição é o valor de `TRX_ROWS_MODIFIED` na tabela `INFORMATION_SCHEMA.INNODB_TRX`. Considere executar a atualização somente depois que todas as grandes transações forem confirmadas ou revertidas.  | 
| Cluster tem um número elevado de registros para desfazer | A atualização pode levar muito tempo. |  Mesmo que as transações não confirmadas não afetem um grande número de linhas, podem envolver um grande volume de dados. Por exemplo, você pode inserir BLOBs grandes. O Aurora não detecta nem gera automaticamente um evento para esse tipo de atividade de transação. O indicador para essa condição é o tamanho da lista de histórico (HLL). O processo de atualização reverte as alterações não confirmadas. É possível conferir o HLL na saída do comando `SHOW ENGINE INNODB STATUS` SQL ou diretamente usando a seguinte consulta SQL: <pre>SELECT count FROM information_schema.innodb_metrics WHERE name = 'trx_rseg_history_len';</pre> Também é possível monitorar a métrica `RollbackSegmentHistoryListLength` no Amazon CloudWatch. Pense em realizar a atualização somente quando o HLL for menor.  | 
| O cluster está no processo de confirmação de uma grande transação de log binário | A atualização pode levar muito tempo. |  O processo de atualização aguarda até que as alterações de log binário sejam aplicadas. Mais transações ou instruções DDL podem começar durante esse período, retardando ainda mais o processo de atualização. Agende o processo de atualização quando o cluster não estiver ocupado gerando alterações de replicação de log binário. O Aurora não detecta nem gera automaticamente um evento para esta condição.  | 
| Inconsistências em esquemas resultantes da remoção ou corrupção de arquivos | Aurora cancela a atualização. |  Altere o mecanismo de armazenamento padrão para tabelas temporárias do MyISAM para o InnoDB. Siga estas etapas: [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/pt_br/AmazonRDS/latest/AuroraUserGuide/AuroraMySQL.Upgrading.Troubleshooting.html)  | 
| O usuário mestre foi excluído. | Aurora cancela a atualização. |   Não exclua o usuário mestre.  No entanto, se por algum motivo você excluir o usuário mestre, restaure-o usando os seguintes comandos SQL: <pre>CREATE USER 'master_username'@'%' IDENTIFIED BY 'master_user_password' REQUIRE NONE PASSWORD EXPIRE DEFAULT ACCOUNT UNLOCK;<br /><br />GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, RELOAD, PROCESS, REFERENCES, INDEX, ALTER, SHOW DATABASES, CREATE TEMPORARY TABLES, <br />LOCK TABLES, EXECUTE, REPLICATION SLAVE, REPLICATION CLIENT, CREATE VIEW, SHOW VIEW, CREATE ROUTINE, ALTER ROUTINE, CREATE USER, EVENT, <br />TRIGGER, LOAD FROM S3, SELECT INTO S3, INVOKE LAMBDA, INVOKE SAGEMAKER, INVOKE COMPREHEND ON *.* TO 'master_username'@'%' WITH GRANT OPTION;</pre>  | 

Para ver mais detalhes sobre a solução de problemas que fazem com que as verificações prévias de atualização falhem, consulte os seguintes blogs:
+ [Amazon Aurora MySQL version 2 (with MySQL 5.7 compatibility) to version 3 (with MySQL 8.0 compatibility) upgrade checklist, Part 1](https://aws.amazon.com/blogs/database/amazon-aurora-mysql-version-2-with-mysql-5-7-compatibility-to-version-3-with-mysql-8-0-compatibility-upgrade-checklist-part-1/)
+ [Amazon Aurora MySQL version 2 (with MySQL 5.7 compatibility) to version 3 (with MySQL 8.0 compatibility) upgrade checklist, Part 2](https://aws.amazon.com/blogs/database/amazon-aurora-mysql-version-2-with-mysql-5-7-compatibility-to-version-3-with-mysql-8-0-compatibility-upgrade-checklist-part-2/)

 Você pode usar as etapas a seguir para executar suas próprias verificações para algumas das condições na tabela anterior. Dessa forma, você pode agendar a atualização em um momento em que você sabe que o banco de dados está em um estado onde a atualização pode ser concluída com sucesso e rapidamente. 
+  Você pode verificar se há transações XA abertas executando a instrução `XA RECOVER`. Você pode então confirmar ou reverter as transações XA antes de iniciar a atualização. 
+  Você pode verificar se há instruções DDL executando uma instrução `SHOW PROCESSLIST` e procurando `CREATE`, `DROP`, `ALTER`, `RENAME` e `TRUNCATE` na saída. Permita que todas as instruções DDL terminem antes de iniciar a atualização. 
+  Você pode verificar o número total de linhas não confirmadas consultando a tabela `INFORMATION_SCHEMA.INNODB_TRX`. A tabela contém uma linha para cada transação. A coluna `TRX_ROWS_MODIFIED` contém o número de linhas modificadas ou inseridas pela transação. 
+  Você pode verificar o comprimento da lista de histórico do InnoDB executando a instrução `SHOW ENGINE INNODB STATUS SQL` e procurando o `History list length` na saída. Você também pode verificar o valor diretamente executando a seguinte consulta: 

  ```
  SELECT count FROM information_schema.innodb_metrics WHERE name = 'trx_rseg_history_len';
  ```

   O comprimento da lista de histórico corresponde à quantidade de informações desfeitas armazenadas pelo banco de dados para implementar o controle de simultaneidade de várias versões (MVCC). 

# Limpeza pós-upgrade do Aurora MySQL versão 3
<a name="AuroraMySQL.mysql80-post-upgrade"></a>

Depois de concluir o upgrade de qualquer cluster do Aurora MySQL versão 2 para o Aurora MySQL versão 3, você poderá executar essas outras ações de limpeza:
+ Crie novas versões compatíveis com o MySQL 8.0 de qualquer grupo de parâmetros personalizado. Aplique todos os valores de parâmetros personalizados necessários aos novos grupos de parâmetros.
+ Atualize todos os alarmes do CloudWatch, scripts de configuração e assim por diante para utilizar os novos nomes de qualquer métrica cujos nomes tenham sido afetados por alterações inclusivas de idioma. Para obter uma lista dessas métricas, consulte [Alterações de linguagem inclusiva do Aurora MySQL versão 3](AuroraMySQL.Compare-v2-v3.md#AuroraMySQL.8.0-inclusive-language).
+ Atualize qualquer template do CloudFormation para utilizar os novos nomes para quaisquer parâmetros de configuração cujos nomes tenham sido afetados por alterações inclusivas de linguagem. Para obter uma lista completa desses parâmetros, consulte [Alterações de linguagem inclusiva do Aurora MySQL versão 3](AuroraMySQL.Compare-v2-v3.md#AuroraMySQL.8.0-inclusive-language).

## Índices espaciais
<a name="AuroraMySQL.mysql80-spatial"></a>

Depois de atualizar para o Aurora MySQL versão 3, verifique se você precisa descartar ou recriar objetos e índices relacionados a índices espaciais. Antes do MySQL 8.0, o Aurora podia otimizar consultas espaciais utilizando índices que não continham um identificador de recursos espaciais (SRID). O Aurora MySQL versão 3 utiliza apenas índices espaciais contendo SRIDs. Durante um upgrade, o Aurora descarta automaticamente todos os índices espaciais sem SRIDs e imprime mensagens de aviso no log do banco de dados. Se você observar essas mensagens de aviso, crie novos índices espaciais com SRIDs após o upgrade. Para obter mais informações sobre alterações em funções espaciais e tipos de dados no MySQL 8.0, consulte o tópico sobre [Alterações feitas no MySQL 8.0](https://dev.mysql.com/doc/refman/8.0/en/upgrading-from-previous-series.html), no *Guia de referência do MySQL*.