Atualizações da versão principal do RDS para MySQL - Amazon Relational Database Service

Atualizações da versão principal do RDS para MySQL

O Amazon RDS oferece suporte para as seguintes atualizações in-loco para versões principais do mecanismo de banco de dados MySQL:

  • MySQL 5.6 a MySQL 5.7

  • MySQL 5.7 a MySQL 8.0

nota

Você só pode criar instâncias de banco de dados MySQL versões 5.7 e 8.0 com classes de instância de banco de dados de última geração e da geração atual e com a classe de instância de banco de dados da geração anterior à db.m3.

Em alguns casos, você deseja atualizar uma instância de banco de dados MySQL versão 5.6 em execução em uma classe de instância de banco de dados de geração anterior (diferente de db.m3) para uma instância de banco de dados MySQL versão 5.7. Nesses casos, primeiro modifique a instância de banco de dados para usar uma classe de instância de última geração ou de geração atual. Depois de fazer isso, você poderá modificar a instância de banco de dados para usar o mecanismo de banco de dados do MySQL versão 5.7. Para obter informações sobre classes de instâncias de banco de dados do Amazon RDS, consulte Classes de instância de banco de dados do .

Visão geral de atualizações de versões principais do MySQL

As atualizações da versão principal podem conter as alterações de banco de dados incompatíveis com os aplicativos existentes. Como resultado, o Amazon RDS não aplica atualizações da versão principal automaticamente. Você deve modificar manualmente sua instância de banco de dados. Convém testar completamente qualquer atualização antes de aplicá-la às suas instâncias de produção.

Para realizar uma atualização de versão principal para uma instância de banco de dados MySQL versão 5.6 no Amazon RDS para o MySQL versão 5.7 ou posterior, primeiro realize as atualizações de SO disponíveis. Após a conclusão das atualizações do sistema operacional, atualize para as versões principais: de 5.6 para 5.7 e de 5.7 para 8.0. As instâncias de banco de dados MySQL criadas antes de 24 de abril de 2014 mostrarão uma atualização do sistema operacional disponível enquanto a atualização não for aplicada. Para obter mais informações sobre atualizações do sistema operacional, consulte Aplicação de atualizações para uma instância de banco de dados.

Durante uma atualização de versão principal do MySQL, o Amazon RDS executa o binário do MySQL mysql_upgrade para atualizar tabelas, se necessário. Além disso, o Amazon RDS esvazia as tabelas slow_log e general_log durante uma atualização de versão principal. Para preservar as informações do log, salve o conteúdo do log antes da atualização da versão principal.

Em geral, as atualizações da versão principal do MySQL são concluídas em cerca de 10 minutos. Algumas atualizações podem demorar mais por causa do tamanho da classe da instância de banco de dados ou porque a instância não segue certas diretrizes operacionais em Práticas recomendadas do Amazon RDS. Se você atualizar uma instância de banco de dados do console do Amazon RDS, o status dessa instância indicará quando a atualização estiver concluída. Se você atualizar usando a AWS Command Line Interface (AWS CLI), use o comando describe-db-instances e verifique o valor de Status.

As atualizações para o MySQL versão 5.7 podem ser lentas

O MySQL versão 5.6.4 introduziu um novo formato de data e hora para as colunas datetime, time e timestamp, que permite componentes fracionários em valores de data e hora. Ao atualizar uma instância de banco de dados para o MySQL versão 5.7, o MySQL força a conversão de todos os tipos de colunas de data e hora no novo formato.

Como essa conversão reconstrói as tabelas, pode demorar uma quantidade considerável de tempo para concluir a atualização da instância de banco de dados. A conversão forçada ocorre para qualquer instância de banco de dados que esteja executando uma versão antes do MySQL versão 5.6.4. Ela também ocorre para qualquer instância de banco de dados que tenha sido atualizada de uma versão anterior ao MySQL versão 5.6.4 para uma versão diferente de 5.7.

Se a sua instância de banco de dados executar uma versão antes do MySQL versão 5.6.4 ou tiver sido atualizada de uma versão anterior à 5.6.4, recomendamos uma etapa extra. Nesses casos, recomendamos que você converta as colunas datetime, time e timestamp no seu banco de dados antes de atualizar sua instância de banco de dados para o MySQL versão 5.7. Essa conversão pode reduzir de forma significativa o tempo necessário para atualizar a instância de banco de dados para a MySQL versão 5.7. Para atualizar as colunas de data e hora para o novo formato, utilize o comando ALTER TABLE <table_name> FORCE; em todas as tabelas que contêm colunas de data e hora. Como alterar uma tabela a bloqueia como somente leitura, recomendamos que você realize essa atualização durante uma janela de manutenção.

Para localizar todas as tabelas no banco de dados que tenham colunas datetime, time ou timestamp e criar um comando ALTER TABLE <table_name> FORCE; para cada tabela, use a consulta a seguir.

SET show_old_temporals = ON; SELECT table_schema, table_name,column_name, column_type FROM information_schema.columns WHERE column_type LIKE '%/* 5.5 binary format */'; SET show_old_temporals = OFF;

Pré-verificações de upgrades do MySQL 5.7 a 8.0

O MySQL 8.0 inclui várias incompatibilidades com o MySQL 5.7. Essas incompatibilidades podem causar problemas durante uma atualização do MySQL 5.7 para o MySQL 8.0. Portanto, pode ser necessária uma certa preparação no seu banco de dados para que a atualização seja bem-sucedida. Veja a seguir uma lista geral dessas incompatibilidades:

  • Não deve haver tabelas que usam funções ou tipos de dados obsoletos.

  • Não deve haver arquivos *.frm órfãos.

  • Os gatilhos não devem ter um definidor vazio ou ausente ou um contexto de criação inválido.

  • Não deve haver tabela particionada que usa um mecanismo de armazenamento que não tem suporte para particionamento nativo,

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

  • 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 modos obsoletos do SQL definidos na configuração de variável do sistema sql_mode.

  • Não deve haver tabelas ou procedimentos armazenados com elementos de coluna ENUM ou SET individuais que excedam 255 caracteres ou 1020 bytes.

  • Antes de atualizar para o MySQ 8.0.13 ou posterior, não deve haver partições de tabela que residam em espaços de tabela compartilhados do InnoDB.

  • Não deve haver consultas e definições de programa armazenadas do MySQL 8.0.12 ou anterior que usem qualificadores ASC ou DESC para causas GROUP BY.

  • A instalação do 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 nomes de restrição de chave externa maiores que 64 caracteres.

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

Quando você inicia uma atualização do MySQL 5,7 para 8,0, o Amazon RDS executa pré-verificações automaticamente para detectar essas incompatibilidades. Para obter informações sobre como atualizar para o MySQL 8.0, consulte Upgrading MySQL (em inglês) na documentação do MySQL.

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 RDS impedirá a atualização e fornecerá um log para que você saiba sobre elas. Dessa forma, você poderá usar o log para preparar seu banco de dados para a atualização para o MySQL 8.0 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.

As pré-verificações incluem algumas que estão incluídas com o MySQL e outras que foram criadas especificamente pela equipe do Amazon RDS. 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 pré-verificações encontrarem uma incompatibilidade, o Amazon RDS cancelará automaticamente a atualização antes que a instância de banco de dados seja interrompida. O Amazon RDS também gera um evento para a incompatibilidade. Para obter mais informações sobre eventos do Amazon RDS, consulte Trabalhar com a notificação de eventos do Amazon RDS.

O Amazon RDS 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.

nota

O Amazon RDS executa pré-verificações apenas para uma atualização do MySQL 5.7 para o MySQL 8.0. Para uma atualização do MySQL 5.6 para o MySQL 5.7, as pré-verificações se limitam a confirmar que não existem tabelas órfãs e que há espaço de armazenamento suficiente para reconstruir tabelas. As pré-verificações não são executadas para atualizações de versões inferiores ao MySQL 5.7.

Reversão após falha ao atualizar do MySQL 5.7 para o 8.0

Quando você atualiza uma instância de banco de dados do MySQL versão 5.7 para o MySQL versão 8.0, a atualização pode falhar. Em particular, ela pode falhar se o dicionário de dados contiver incompatibilidades que não foram capturadas pelas pré-verificações. Nesse caso, não é possível iniciar o banco de dados com sucesso na nova versão do MySQL, a 8.0. Nesse ponto, o Amazon RDS reverte as alterações realizadas para a atualização. Após a reversão, a instância de banco de dados MySQL executa o MySQL versão 5.7. Quando uma atualização falha e é revertida, o Amazon RDS gera um evento com o ID de evento RDS-EVENT-0188.

Normalmente, uma atualização falha porque há incompatibilidades nos metadados entre os bancos de dados em sua instância de banco de dados e a versão de destino do MySQL. Quando uma atualização falha, você pode visualizar os detalhes sobre essas incompatibilidades no arquivo upgradeFailure.log. Resolva as incompatibilidades antes de tentar atualizar novamente.

Durante uma tentativa de atualização e reversão malsucedidas, sua instância de banco de dados é reiniciada. Quaisquer alterações de parâmetro pendentes são aplicadas durante a reinicialização e persistem após a reversão.

Para obter mais informações sobre como atualizar para o MySQL 8.0, consulte os seguintes tópicos na documentação do MySQL:

nota

Atualmente, a reversão automática após a falha de atualização é suportada apenas para atualizações das versões principais do MySQL 5.7 a 8.0.