Verificações prévias de atualização da versão principal do Aurora MySQL - Amazon Aurora

Verificações prévias de atualização da versão principal do Aurora MySQL

O MySQL 8.0 inclui várias incompatibilidades com o MySQL 5.7. Essas incompatibilidades podem causar problemas durante uma atualização do Aurora MySQL versão 2 para a versão 3. Portanto, pode ser necessária uma certa preparação no banco de dados para que a atualização seja bem-sucedida.

Ao iniciar uma atualização do MySQL versão 2 para a versão 3, o Amazon Aurora executa verificações prévias automaticamente para detectar essas incompatibilidades.

Essas pré-verificações são obrigatórias. Você não pode optar por ignorá-las. As pré-verificações fornecem os seguintes benefícios:

  • Elas permitem evitar o tempo de inatividade não planejado durante a atualização.

  • Se houver incompatibilidades, o Amazon Aurora impedirá a atualização e fornecerá um log para que você saiba sobre elas. Dessa forma, você poderá usar o log para preparar o banco de dados para a atualização para a versão 3 ao reduzir essas incompatibilidades. Para obter informações detalhadas sobre como remover incompatibilidades, consulte Preparing your installation for upgrade na documentação do MySQL e 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 na documentação do MySQL.

As verificações prévias incluem algumas que estão incluídas no MySQL e outras que foram criadas especificamente pela equipe do Aurora. Para obter informações sobre as pré-verificações fornecidas pelo MySQL, consulte Utilitário verificador de atualização.

As pré-verificações são executadas antes que a instância de banco de dados seja interrompida para a atualização, o que significa que elas não causam nenhum tempo de inatividade quando são executadas. 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.

O Aurora registra informações detalhadas sobre cada incompatibilidade no arquivo de log PrePatchCompatibility.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.

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.

Verificações prévias de atualização do MySQL da comunidade

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 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 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) 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.

Para ter informações sobre como atualizar para o MySQL 8.0, consulte Upgrading MySQL na documentação do MySQL.

Verificações prévias de atualização do Aurora MySQL

O Aurora MySQL tem seus próprios requisitos específicos ao realizar a atualização da versão 2 para a versão 3:

  • 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.

    Um tamanho maior de prefixo era permitido 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.

Processo de atualização da versão principal de Aurora MySQL

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, 2.0 ou posterior

Sim

A atualização no local é compatível com clusters do Aurora MySQL compatíveis com 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 e Como realizar uma atualização local.

Cluster provisionado do Aurora MySQL, 3.1.0 ou posterior

N/D

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/D

Atualmente, o Aurora Serverless v1 só é compatível com o Aurora MySQL na versão 2.

Aurora Serverless v2Cluster do

N/D

Atualmente, 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 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.

Você não poderá executar um upgrade 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, consulte Atualizações de versão principal.

Cluster de consulta paralela

Sim

Você pode executar um upgrade no local. Nesse caso, escolha 2.09.1 ou superior para a Aurora MySQL versão.

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

Você pode executar uma atualização no local para um cluster de 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

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.

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 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. Se Aurora detectar condições que podem causar uma atualização lenta, planeje monitorar a atualização durante um período prolongado.

  2. 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.

  3. 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.

  4. 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.

  5. 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.

  6. 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.

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

  8. 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.

Implantações azul/verde

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 RDS para atualizações de banco de dados.