Perché la mia istanza database di Amazon RDS per MySQL è bloccata in “Riavvio”?

Ultimo aggiornamento: 28/10/2021

Sto tentando di eseguire un backup del mio Amazon Relational Database Service (Amazon RDS) per l'istanza database MySQL. Tuttavia, la mia istanza DB è bloccata nello stato “Riavvio” o il riavvio richiede più tempo del previsto. Perché succede e come posso risolvere questo problema?

Breve descrizione

Prima di eseguire un riavvio, assicurarsi di interrompere qualsiasi transazione in entrata o in corso nell'istanza database. Le transazioni in corso verranno interrotte e tutte le transazioni non iniziate verranno ripristinate.

Nota: il rollback delle transazioni non iniziate può rappresentare un'operazione costosa. Il completamento delle transazioni non iniziate può richiedere molto tempo prima che l'istanza Amazon RDS per MySQL diventi nuovamente disponibile.

Dopo che il riavvio è iniziato, il processo non può essere annullato e il riavvio continuerà fino al completamento. Se il riavvio richiede più tempo del previsto, analizza la causa principale e considera i seguenti approcci per la risoluzione dei problemi:

  • Verifica la presenza di richieste in corso.
  • Verifica se sono presenti transazioni non evase.
  • Esaminare il file di registro degli errori di MySQL.

Risoluzione

Verifica la presenza di richieste in corso

Utilizza il comando SHOW FULL PROCESSLIST per verificare se sono presenti richieste attive sull'istanza Amazon RDS per MySQL:

mysql> SHOW FULL PROCESSLIST;

Ecco un esempio di output che indica che una richiesta di AGGIORNAMENTO è ancora in corso:

+-----+---------------+---------------------+------+---------+------+----------+-----------------------+
| 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|
+-----+---------------+---------------------+------+---------+------+----------+-----------------------+

L'output fornisce informazioni sui thread MySQL in esecuzione sul database. Se sono presenti richieste ancora in esecuzione, consenti il completamento delle richieste prima di eseguire un riavvio.

Nota: esegui la richiesta di SHOW FULL PROCESSLIST come utente principale. Se non sei l'utente principale, devi disporre dei privilegi di amministrazione del server MySQL per visualizzare tutti i thread attivi sull'istanza MySQL. In caso contrario, l'output mostra solo gli ID dei thread attivi nell'account MySQL dell'utente. Per ulteriori informazioni, consulta l'istruzione SHOW PROCESSLIST e l'amministrazione del server MySQL sul sito Web MySQL.

Verifica se sono presenti transazioni non evase

Il motore MySQL InnoDB utilizza il controllo di concorrenza multiversione (MVCC) che mantiene un elenco delle vecchie versioni delle righe modificate durante una transazione. Se è necessario eseguire il rollback di una transazione, InnoDB può eseguire qualsiasi operazione di annullamento durante questo processo. Le vecchie versioni delle righe vengono acquisite all'interno dello spazio di annullamento. Queste vecchie versioni vengono eliminate quando non vengono più chiamate durante una transazione. Se le modifiche acquisite non vengono eliminate perché una transazione fa ancora riferimento ad esse, la lunghezza dell'elenco cronologico può aumentare. Per ulteriori informazioni, consulta InnoDB multi-versioning sul sito Web MySQL.

Le transazioni non evase sono rappresentate come il valore della lunghezza dell'elenco cronologico. Questo valore si trova sotto la voce “TRANSAZIONI” nell'output del comando SHOW ENGINE INNODB STATUS. Si noti che la lunghezza dell'elenco cronologico è in genere un valore basso, sebbene un carico di lavoro pesante in scrittura o transazioni a esecuzione prolungata possa causare un aumento del valore. Per ulteriori informazioni sul valore della lunghezza dell'elenco cronologico, consulta la voce Configurazione di eliminazione sul sito Web MySQL.

Per verificare eventuali transazioni non eliminate all'interno della lunghezza dell'elenco cronologico, utilizza il comando SHOW ENGINE INNODB STATUS. L'output di questo comando consente inoltre di visualizzare la dimensione della lunghezza dell'elenco cronologico e di tutte le transazioni in corso elencate nella sezione “TRANSAZIONI”. Per ulteriori informazioni sulla revisione delle transazioni elencate, verifica l'output del monitor standard InnoDB e del monitor di blocco sul sito Web MySQL.

Ad esempio:

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

Nota: se la lunghezza dell'elenco cronologico è un valore elevato e sono presenti transazioni attive, non è consigliabile riavviare il sistema.

Per ulteriori informazioni, consulta SHOW ENGINE INNODB STATUS sul sito Web MySQL.

Rivedi il file di registro degli errori di MySQL

In Amazon RDS, il file di registro degli errori di MySQL è abilitato di default. Se sospetti che la tua istanza RDS impieghi troppo tempo per essere nuovamente disponibile, rivedi il contenuto del tuo file di registro degli errori MySQL. MySQL scrive nel file di log degli errori quando si avvia, si spegne o quando si verificano errori.

Ad esempio, InnoDB potrebbe dover ripristinare eventuali transazioni non eliminate come parte del processo di ripristino degli arresti anomali di InnoDB. Se viene eseguito il rollback di transazioni non eliminate, il registro degli errori di MySQL documenta questo evento. Per ulteriori informazioni, consulta la voce Ripristino di arresto anomalo di InnoDB sul sito Web MySQL.

Risoluzione dei problemi aggiuntiva

Nota: se scegli di eseguire un ripristino point-in-time (PITR) o un ripristino da un'istantanea, la tua nuova istanza Amazon RDS potrebbe non essere immediatamente disponibile. Per ulteriori informazioni, consulta i seguenti collegamenti:

Se la tua istanza Amazon RDS per MySQL DB impiega un po' di tempo, allora prova questi ulteriori suggerimenti per la risoluzione dei problemi:

  • Se nella tua istanza database sono abilitati i backup automatici, esegui un PITR per effettuare il ripristino su una nuova istanza Amazon RDS da un periodo di tempo specificato. È possibile eseguire il ripristino in qualsiasi momento nel periodo di conservazione del backup.
    Nota: di default, le istanze DB ripristinate sono associate al parametro DB e ai gruppi di opzioni predefiniti. Tuttavia, è possibile utilizzare un gruppo di parametri e un gruppo di opzioni personalizzati specificandoli durante un ripristino.
  • Ripristina l'istanza DB dall’istantanea DB più recente creando una nuova istanza DB. È possibile utilizzare l'istanza DB ripristinata non appena lo stato è disponibile.
  • Se l'istanza DB dispone di una replica di lettura, promuovi la replica di lettura in un'istanza database indipendente. Quando promuovi una replica di lettura, l'istanza database viene riavviata automaticamente prima che diventi disponibile.

È inoltre consigliabile monitorare regolarmente l'attività del database. È possibile monitorare l'istanza DB di Amazon RDS per MySQL utilizzando i seguenti strumenti:

  • Amazon CloudWatch: con Amazon CloudWatch è possibile monitorare qualsiasi carico di lavoro del database in corso. Se si osservano valori elevati nelle connessioni DB, nell'utilizzo della CPU o negli IOPS di scrittura/lettura, potrebbe esserci un'attività in corso nell'istanza DB.
  • Monitoraggio avanzato: il monitoraggio avanzato richiede l'autorizzazione per inviare informazioni sulle metriche del sistema operativo a CloudWatch Logs. Puoi concedere autorizzazioni di monitoraggio avanzato utilizzando un ruolo AWS Identity and Access Management (IAM). Prima di abilitare il monitoraggio avanzato, è necessario creare un ruolo IAM.
  • Performance Insights: Performance Schema è uno strumento opzionale per le prestazioni utilizzato da Amazon RDS per MySQL (o MariaDB). Se abiliti o disabiliti Performance Insights, non sarà necessario riavviare l'istanza DB. Inoltre, non si verificheranno tempi di inattività o failover.

Questo articolo è stato utile?


Hai bisogno di supporto tecnico o per la fatturazione?