Verificações prévias de atualização da versão principal do Aurora MySQL
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. As pré-verificações do Aurora são executadas complementarmente àquelas executadas pelo utilitário de verificação de atualização
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
na documentação do MySQL e em 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 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.
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.
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.
Processo de pré-verificação do Aurora MySQL
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 ter mais informações, consulte Descobrir os motivos das falhas de atualização da versão principal do Aurora MySQL e Referência de descrições da pré-verificação do Aurora MySQL.
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 (Falha) |
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 |
Verifique 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 |
Consulte mais informações sobre a visualização de eventos em Visualizar eventos do Amazon RDS.
Formato de log da pré-verificação do Aurora MySQL
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.
-
-
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 ter mais informações, consulte Referência de descrições da pré-verificação do Aurora MySQL. -
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
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.
- 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. 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 ter mais informações, consulte Solução de problemas de uso de memória para bancos de dados Aurora MySQL.
- 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 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
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_schema
-
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 pode levar mais tempo e usar mais recursos com base no número de objetos armazenados
. -
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 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 ter mais informações, consulte Como funciona a atualização da versão principal no local Aurora MySQL e Planejando uma atualização de versão principal para um cluster de Aurora MySQL.
Resumo das pré-verificações de atualização do MySQL Community
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 caracteresutf8mb4
. O conjunto de caracteresutf8mb3
está obsoleto. Além disso, considere o uso deutf8mb4
para referências de conjuntos de caracteres em vez deutf8
, pois, no momento,utf8
é um alias para o conjunto de caracteresutf8mb3
.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
oudisplay
. -
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
ouSET
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
ouDESC
para cláusulasGROUP 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.
Para ter informações sobre como atualizar para o MySQL 8.0, consulte Upgrading MySQL
Resumo das pré-verificações de atualização do Aurora MySQL
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
eQUERY_CACHE
, em visualizações, rotinas, gatilhos e eventos. -
Não deve haver colunas
FTS_DOC_ID
presentes em nenhuma tabela sem o índiceFTS
. -
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 como1
. -
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
ouCOMPACT
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 caracteresutf8mb4
, 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.