Por que minha instância de banco de dados do Amazon RDS for MySQL está presa na “Reinicialização”?

Data da última atualização: 28-10-2021

Estou tentando fazer um backup da minha instância de banco de dados do Amazon Relational Database Service (Amazon RDS) para MySQL. No entanto, minha instância de banco de dados está travada no estado “Reinicializando” ou a reinicialização está demorando mais do que o esperado. Por que isso está acontecendo e como posso resolver?

Breve descrição

Antes de realizar uma reinicialização, interrompa todas as transações recebidas ou contínuas na instância de banco de dados. As transações em andamento serão interrompidas e todas as transações não confirmadas serão revertidas.

Nota: A reversão de transações não confirmadas pode ser uma operação cara. As transações não confirmadas também podem levar muito tempo para serem concluídas antes que sua instância do Amazon RDS for MySQL fique disponível novamente.

Após o início da reinicialização, o processo não poderá ser cancelado e a reinicialização continuará até que seja concluída. Se a reinicialização estiver demorando mais do que o esperado, investigue a causa raiz e considere as seguintes abordagens de solução de problemas:

  • Verifique se há consultas em andamento.
  • Verifique se há transações não expurgadas.
  • Revise o arquivo de log de erros do MySQL.

Resolução

Verifique se há consultas em andamento

Use o comando SHOW FULL PROCESSLIST para verificar se há alguma consulta ativa em sua instância do Amazon RDS for MySQL:

mysql> SHOW FULL PROCESSLIST;

Aqui está um exemplo de saída que indica que uma consulta UPDATE ainda está em andamento:

+-----+---------------+---------------------+------+---------+------+----------+-----------------------+
| Id  | User          | Host                | db   | Command | Time | State    | Info                  |
+-----+---------------+---------------------+------+---------+------+----------+-----------------------+
|   2 | rdsadmin      | localhost:30662     | NULL | Sleep   |    4 |          | NULL                  |
| 101 | admin         | 172.31.28.252:58288 | NULL | Query   |  111 | updating |UPDATE tutorials SET tu|
+-----+---------------+---------------------+------+---------+------+----------+-----------------------+

A saída fornece informações sobre os threads do MySQL em execução no banco de dados. Se houver consultas ainda em execução, permita que as consultas sejam concluídas antes de executar uma reinicialização.

Observação: Execute a consulta SHOW FULL PROCESSLIST como o usuário mestre. Se você não for o usuário mestre, deverá ter privilégios de administração do servidor MySQL para visualizar todos os threads ativos na instância do MySQL. Caso contrário, a saída mostra apenas IDs de thread ativos na conta MySQL do usuário. Para obter mais informações, consulte instrução SHOW PROCESSLIST e administração do servidor MySQL no site do MySQL.

Verifique se há transações não expurgadas

O mecanismo MySQL InnoDB usa o controle de simultaneidade multiversão (MVCC) que mantém uma lista de versões antigas de linhas alteradas durante uma transação. Se uma transação precisar ser revertida, o InnoDB poderá executar qualquer operação de desfazer durante esse processo. Versões antigas de linhas são capturadas dentro do espaço de desfazer. Essas versões antigas são eliminadas quando não são mais chamadas durante uma transação. Se as alterações capturadas não forem eliminadas porque uma transação ainda faz referência a elas, o tamanho da lista de histórico poderá aumentar. Para obter mais informações, consulte Multiversionamento do InnoDB no site do MySQL.

As transações não purgadas são representadas como o valor do tamanho da lista do histórico. Esse valor pode ser encontrado em “TRANSACTIONS” na saída do comando SHOW ENGINE INNODB STATUS. Observe que o tamanho da lista de histórico geralmente é um valor baixo, embora uma carga de trabalho pesada de gravação ou transações de longa execução possam fazer com que o valor aumente. Para obter mais informações sobre o valor do comprimento da lista de histórico, consulte Limpar configuração no site do MySQL.

Para verificar se há transações não purgadas dentro do tamanho da lista de histórico, use o comando SHOW ENGINE INNODB STATUS. A saída deste comando também permite que você visualize o tamanho do tamanho da lista de histórico e para quaisquer transações em andamento listadas na seção “TRANSAÇÕES”. Para obter mais informações sobre como revisar as transações listadas, consulte Monitor padrão do InnoDB e saída do monitor de bloqueio no site do MySQL.

Por exemplo:

------------
TRANSACTIONS
------------
Trx id counter 105746959
Purge done for trx's n:o < 105746958 undo n:o < 0 state: running but idle
History list length 32
LIST OF TRANSACTIONS FOR EACH SESSION:
---TRANSACTION 328605240396520, not started
0 lock struct(s), heap size 1136, 0 row lock(s)
---TRANSACTION 328605240395600, not started
0 lock struct(s), heap size 1136, 0 row lock(s)

Observação: se o tamanho da lista de histórico for um valor alto e houver transações ativas, não é uma prática recomendada reinicializar.

Para obter mais informações, consulte SHOW ENGINE INNODB STATUS no site do MySQL.

Revise o arquivo de log de erros do MySQL

No Amazon RDS, o arquivo de log de erros do MySQL é habilitado por padrão. Se você suspeitar que sua instância do RDS está demorando muito para ficar disponível novamente, revise o conteúdo do arquivo de log de erros do MySQL. O MySQL grava no arquivo de log de erros quando ele é iniciado, desligado ou quando encontra algum erro.

Por exemplo, o InnoDB pode ter que reverter quaisquer transações não confirmadas como parte do processo de recuperação de falhas do InnoDB. Se qualquer transação não confirmada for revertida, o log de erros do MySQL documentará esse evento. Para obter mais informações, consulte Recuperação de falhas do InnoDB no site do MySQL.

Solução de problemas adicionais

Observação: se você optar por realizar uma recuperação point-in-time (PITR) ou restaurar a partir de um snapshot, sua nova instância do Amazon RDS poderá não estar disponível imediatamente. Para mais informações, consulte os links a seguir:

Se sua instância de banco de dados do Amazon RDS for MySQL estiver reinicializando por um tempo, tente estas dicas adicionais de solução de problemas:

  • Se sua instância de banco de dados tiver backups automatizados habilitados, execute um PITR para restaurar para uma nova instância do Amazon RDS a partir de um horário especificado. Você pode restaurar para qualquer point-in-time dentro do período de retenção de backup.
    Observação: Por padrão, as instâncias de banco de dados restauradas são associadas ao parâmetro de banco de dados padrão e aos grupos de opções. No entanto, você pode usar um grupo de parâmetros e um grupo de opções personalizados especificando-os durante uma restauração.
  • Restaure sua instância de banco de dados do DB snapshot mais recente criando uma nova instância de banco de dados. Você pode usar a instância de banco de dados restaurada assim que seu status estiver disponível.
  • Se sua instância de banco de dados tiver uma réplica de leitura, promova a réplica de leitura para se tornar uma instância de banco de dados independente. Quando você promove uma réplica de leitura, a instância de banco de dados é reinicializada automaticamente antes de ficar disponível.

Também é uma prática recomendada monitorar regularmente a atividade do banco de dados. Você pode monitorar sua instância de banco de dados do Amazon RDS for MySQL usando as seguintes ferramentas:

  • Amazon CloudWatch: Com o Amazon CloudWatch, você pode monitorar qualquer carga de trabalho de banco de dados contínua. Se você estiver observando valores altos em conexões de banco de dados, utilização de CPU ou IOPS de gravação/leitura, talvez haja atividade contínua em sua instância de banco de dados.
  • Monitoramento aprimorado: o monitoramento aprimorado requer permissão para enviar informações de métricas do sistema operacional para o CloudWatch Logs Você pode conceder permissões de monitoramento aprimorado usando uma função do AWS Identity and Access Management (IAM). Antes de ativar o Monitoramento avançado, você deve primeiro criar uma função do IAM.
  • Performance Insights: Performance Schema é uma ferramenta de desempenho opcional usada pelo Amazon RDS for MySQL (ou MariaDB). Se você habilitar ou desabilitar o Performance Insights, não precisará reinicializar sua instância de banco de dados. Você também não experimentará nenhum tempo de inatividade ou failover.

Este artigo ajudou?


Precisa de ajuda com faturamento ou suporte técnico?