Aggiornamento della versione principale di un cluster di database Amazon Aurora MySQL - Amazon Aurora

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

Aggiornamento della versione principale di un cluster di database Amazon Aurora MySQL

In un numero di versione di Aurora MySQL come 2.12.1, il 2 rappresenta la versione principale. Aurora MySQL versione 2 è compatibile con MySQL 5.7. Aurora MySQL versione 3 è compatibile con MySQL 8.0.

L'aggiornamento tra le versioni principali richiede una pianificazione e test più estesi rispetto all'aggiornamento a una versione secondaria. Il processo può richiedere un tempo considerevole. Al termine dell'aggiornamento, è possibile che sia necessario compiere ulteriori operazioni. Ad esempio, ciò potrebbe verificarsi a causa di differenze nella compatibilità SQL o della modalità di funzionamento di alcune caratteristiche correlate a MySQL. Oppure potrebbe verificarsi a causa delle diverse impostazioni dei parametri tra la vecchia e la nuova versione.

Aggiornamento da Aurora MySQL versione 2 alla versione 3

Se si dispone di un cluster compatibile con MySQL 5.7 e si desidera aggiornarlo a un cluster compatibile con MySQL 8.0, è possibile eseguire un processo di aggiornamento sul cluster stesso. Questo tipo di aggiornamento è un aggiornamento in loco, a differenza degli aggiornamenti che si eseguono creando un nuovo cluster. Questa tecnica mantiene lo stesso endpoint e altre caratteristiche del cluster. L'aggiornamento è relativamente veloce perché non richiede la copia di tutti i dati in un nuovo volume cluster. Questa stabilità consente di ridurre al minimo eventuali modifiche di configurazione nelle applicazioni. Inoltre, consente di ridurre la quantità di test per il cluster aggiornato. Questo perché il numero di istanze database e le relative classi di istanza rimangono identiche.

Il meccanismo di aggiornamento utilizzato comporta l'arresto del cluster di database durante l'operazione. Aurora esegue un arresto pulito e completa le operazioni in sospeso, come il rollback delle transazioni e l'eliminazione degli annullamenti. Per ulteriori informazioni, consulta Come funziona l'aggiornamento della versione principale di Aurora MySQL in loco.

Il metodo di aggiornamento locale è conveniente, in quanto è semplice da eseguire e riduce al minimo le modifiche alla configurazione delle applicazioni associate. Ad esempio, un aggiornamento in loco conserva gli endpoint e il set di istanze database per il cluster. Tuttavia, il tempo necessario per un aggiornamento in loco può variare a seconda delle proprietà dello schema e dell'attività del cluster. Pertanto, a seconda delle esigenze del cluster, è possibile scegliere tra le tecniche di aggiornamento:

Per informazioni generali su Aurora MySQL versione 3 e sulle nuove funzionalità, consultare Aurora MySQL versione 3 compatibile con MySQL 8.0.

Per informazioni dettagliate sulla pianificazione di un aggiornamento, consultare Pianificazione di un aggiornamento della versione principale per un cluster Aurora MySQL e Come eseguire un aggiornamento in loco.

Pianificazione di un aggiornamento della versione principale per un cluster Aurora MySQL

Per aiutarti a decidere il momento e l'approccio giusti per l'aggiornamento, puoi scoprire le differenze tra Aurora MySQL versione 3 e il tuo ambiente attuale:

Puoi inoltre trovare ulteriori suggerimenti e considerazioni sull'aggiornamento specifici di MySQL in Changes in MySQL 8.0 (Modifiche in MySQL 8.0)nel Manuale di riferimento MySQL. Per esempio, è possibile utilizzare il comando mysqlcheck --check-upgrade per analizzare i database Aurora MySQL esistenti e identificare potenziali problemi di aggiornamento.

Nota

Ti consigliamo di utilizzare classi di istanza database più grandi durante l’aggiornamento ad Aurora MySQL versione 3 utilizzando la tecnica di aggiornamento locale o di ripristino da snapshot. Esempi sono db.r5.24xlarge e db.r6g.16xlarge. Ciò consente di completare il processo di aggiornamento più rapidamente utilizzando la maggior parte della capacità della CPU disponibile sull'istanza database. Al termine dell'aggiornamento della versione principale, puoi passare alla classe di istanza database desiderata.

Dopo aver terminato l'aggiornamento stesso, è possibile seguire le procedure di post-aggiornamento in Pulizia post-aggiornamento per Aurora MySQL versione 3. Infine, testare la funzionalità e le prestazioni dell'applicazione.

Se stai eseguendo la conversione da RDS da MySQL o dalla community MySQL, segui la procedura di migrazione spiegata in. Migrazione di dati a un cluster di database Amazon Aurora MySQL In alcuni casi, è possibile utilizzare la replica del log binario per sincronizzare i dati con un cluster Aurora MySQL versione 3 come parte della migrazione. In tal caso, il sistema di origine deve eseguire una versione compatibile con il cluster DB di destinazione.

Per assicurarsi che le applicazioni e le procedure di amministrazione funzionino correttamente dopo l'aggiornamento di un cluster tra versioni principali, eseguire parte della pianificazione e della preparazione in anticipo. Per vedere quali tipi di codice di gestione aggiornare per AWS CLI gli script o le applicazioni basate sull'API RDS, consulta. Come gli aggiornamenti in loco influiscono sui gruppi di parametri per un cluster Consultare anche Modifiche delle proprietà del cluster tra versioni di Aurora MySQL.

Per sapere quali problemi potresti riscontrare durante l'aggiornamento, consulta. Risoluzione dei problemi relativi all'aggiornamento in loco di Aurora MySQL In caso di problemi che potrebbero richiedere un lungo periodo di tempo per completare l'aggiornamento, è possibile verificare tali condizioni in anticipo e correggerle.

Nota

Un aggiornamento sul posto comporta la chiusura del cluster DB durante l'operazione. Aurora MySQL esegue un arresto pulito e completa operazioni eccezionali come l'annullamento della cancellazione. Un aggiornamento potrebbe richiedere molto tempo se ci sono molti record di annullamento da eliminare. Si consiglia di eseguire l'aggiornamento solo dopo che la lunghezza dell'elenco della cronologia (HLL) è bassa. Un valore generalmente accettabile per l'HLL è pari o inferiore a 100.000. Per ulteriori informazioni, consulta questo post del blog.

Simulazione dell'aggiornamento mediante clonazione del cluster DB

È possibile verificare la compatibilità dell'applicazione, le prestazioni, le procedure di manutenzione e considerazioni simili per il cluster aggiornato. A questo scopo, è possibile eseguire una simulazione dell'aggiornamento prima di eseguire l'aggiornamento reale. Questa tecnica può essere particolarmente utile per i cluster di produzione. In questo caso, è importante ridurre al minimo i tempi di inattività e disporre del cluster aggiornato pronto all'uso non appena l'aggiornamento è terminato.

Utilizza le fasi seguenti:

  1. Crea un clone del cluster originale. Segui la procedura riportata in Clonazione di un volume per un cluster di database Amazon Aurora.

  2. Imposta un insieme di istanze database di scrittura e di lettura analogo a quello del cluster originale.

  3. Esegui un aggiornamento in loco del cluster clonato. Segui la procedura riportata in Come eseguire un aggiornamento in loco.

    Avvia l'aggiornamento immediatamente dopo aver creato il clone. In questo modo, il volume del cluster è ancora identico allo stato del cluster originale. Se il clone rimane inattivo prima di eseguire l'aggiornamento, Aurora esegue i processi di pulizia del database in background. In tal caso, l'aggiornamento del clone non è una simulazione accurata dell'aggiornamento del cluster originale.

  4. Verifica la compatibilità e le prestazioni delle applicazioni, le procedure di amministrazione e così via, utilizzando il cluster clonato.

  5. Se riscontri problemi, modifica i tuoi piani di aggiornamento per tenerne conto. Ad esempio, adatta qualsiasi codice dell'applicazione affinché sia compatibile con il set di caratteristiche della versione superiore. Stima il tempo necessario per l'aggiornamento in base alla quantità di dati nel cluster. È inoltre possibile scegliere di pianificare l'aggiornamento per un momento in cui il cluster non è occupato.

  6. Dopo avere verificato che le applicazioni e il carico di lavoro funzionano correttamente con il cluster di test, puoi eseguire l'aggiornamento locale per il cluster di produzione.

  7. Agisci per ridurre al minimo il tempo di inattività totale del cluster durante un aggiornamento della versione principale. A questo scopo, assicurati che il carico di lavoro sul cluster sia basso o zero al momento dell'aggiornamento. In particolare, assicurati che non vi siano transazioni di lunga durata in corso all'avvio dell'aggiornamento.

Utilizzo della tecnica di aggiornamento blu-verde

Puoi anche creare una distribuzione blu/verde che esegua i cluster vecchi e nuovi. side-by-side Qui, i dati vengono replicati dal cluster precedente a quello nuovo fino a quando il nuovo cluster non prende il controllo. Per informazioni dettagliate, vedi Utilizzo delle implementazioni blu/verde Amazon RDS per gli aggiornamenti del database.

Controlli preliminari di aggiornamento delle versioni principali per Aurora MySQL

MySQL 8.0 include un certo numero di incompatibilità con MySQL 5.7. Queste incompatibilità possono causare problemi durante l'aggiornamento da Aurora MySQL versione 2 alla versione 3. Potrebbe essere necessaria una certa preparazione del database affinché l'aggiornamento abbia successo.

Quando avvii un aggiornamento da Aurora MySQL versione 2 alla versione 3, Amazon Aurora esegue automaticamente i precontrolli per rilevare queste incompatibilità.

Questi controlli preliminari sono obbligatori. Non puoi scegliere di saltarli. I controlli preliminari offrono i seguenti vantaggi:

I precontrolli includono alcuni inclusi in MySQL e altri creati appositamente dal team di Aurora. Per informazioni sui controlli preliminari forniti da MySQL, consultare Utility di controllo aggiornamenti.

I controlli preliminari vengono eseguiti prima dell'arresto dell'istanza database per l'aggiornamento, il che significa che non generano alcun tempo di inattività durante l'esecuzione. Se i precontrolli rilevano un'incompatibilità, Aurora annulla automaticamente l'aggiornamento prima che l'istanza DB venga interrotta. Aurora genera anche un evento per l'incompatibilità. Per ulteriori informazioni sugli eventi di Amazon Aurora, consulta. Utilizzo della notifica degli eventi di Amazon RDS

Aurora registra informazioni dettagliate su ogni incompatibilità nel file di registro. PrePatchCompatibility.log Nella maggior parte dei casi, la voce di log include un collegamento alla documentazione MySQL utile per correggere l'incompatibilità. Per ulteriori informazioni sulla visualizzazione dei file di log, consultare Visualizzazione ed elenco dei file di log del database.

A causa della natura dei controlli preliminari, questi analizzano gli oggetti nel database. Questa analisi comporta il consumo di risorse e incrementa il tempo di completamento dell'aggiornamento.

Precheck comunitari per l'aggiornamento di MySQL

Di seguito è riportato un elenco generale delle incompatibilità tra MySQL 5.7 e 8.0:

  • Il cluster DB compatibile con MySQL 5.7 non deve utilizzare funzionalità non supportate in MySQL 8.0.

    Per ulteriori informazioni, consulta Features Removed in MySQL 8.0 nella documentazione MySQL.

  • Non devono essere presenti violazioni di parole chiave o parole riservate. Alcune parole chiavi, che non erano riservate in precedenza, possono essere riservate in MySQL 8.0.

    Per ulteriori informazioni, consulta Keywords and Reserved Words nella documentazione MySQL.

  • Per supporto Unicode migliorato, valuta la conversione di oggetti che utilizzano il charset utf8mb3 per utilizzare il charset utf8mb4. Il set di caratteri utf8mb3 è obsoleto. Inoltre, valuta l'utilizzo di utf8mb4 per i riferimenti al set di caratteri anziché utf8, perché attualmente utf8 è un'alias per il charset utf8mb3.

    Per ulteriori informazioni, consulta The utf8mb3 Character Set (3-Byte UTF-8 Unicode Encoding) nella documentazione MySQL.

  • Non devono esserci tabelle InnoDB con un formato di riga non predefinito.

  • Non devono essere presenti attributi di tipo «no» ZEROFILL o di tipo «displaylunghezza».

  • Non devono essere presenti tabelle partizionate che utilizzano un motore di storage che non dispone di supporto di partizionamento nativo.

  • Non devono essere presenti tabelle nel database di sistema MySQL 5.7 mysql che hanno lo stesso nome di una tabella utilizzata dal dizionario dati MySQL 8.0.

  • Non devono essere presenti tabelle che utilizzano tipi di dati o funzioni obsolete.

  • Non devono essere presenti nomi di vincoli della chiave più lunghi di 64 caratteri.

  • Non devono esistere modalità SQL obsolete definite nell'impostazione della variabile di sistema sql_mode.

  • Non devono esserci tabelle o stored procedure con elementi singoli ENUM o di SET colonna che superino i 255 caratteri di lunghezza.

  • Non devono esserci partizioni di tabella che risiedono in tablespace InnoDB condivisi.

  • Non devono esserci riferimenti circolari nei percorsi dei file di dati del tablespace.

  • Non devono esserci interrogazioni e definizioni di programma memorizzate che utilizzano ASC o DESC qualificatori per le clausole. GROUP BY

  • Non devono esserci variabili di sistema rimosse e le variabili di sistema devono utilizzare i nuovi valori predefiniti per MySQL 8.0.

  • Non devono esserci valori di data, datetime o timestamp pari a zero (0).

  • Non devono esserci incongruenze nello schema dovute alla rimozione o al danneggiamento dei file.

  • Non devono esserci nomi di tabella che contengano la stringa di FTS caratteri.

  • Non devono esserci tabelle InnoDB che appartengano a un motore diverso.

  • Non devono esserci nomi di tabelle o schemi non validi per MySQL 5.7.

Per ulteriori informazioni sull'aggiornamento a MySQL 8.0, vedere Aggiornamento di MySQL nella documentazione di MySQL.

Precontrolli preliminari per l'aggiornamento di Aurora MySQL

Aurora MySQL ha i propri requisiti specifici per l'aggiornamento dalla versione 2 alla versione 3:

  • Non deve essere presente alcuna sintassi SQL obsoleta, ad esempio, e, nelle viste, nelle routine SQL_CACHESQL_NO_CACHE, nei trigger e negli QUERY_CACHE eventi.

  • Nessuna FTS_DOC_ID colonna deve essere presente in nessuna tabella senza l'indice. FTS

  • Non deve esserci alcuna discrepanza nella definizione delle colonne tra il dizionario dei dati InnoDB e la definizione effettiva della tabella.

  • Tutti i nomi di database e tabelle devono essere in minuscolo quando il lower_case_table_names parametro è impostato su. 1

  • Gli eventi e i trigger non devono avere un definitore mancante o vuoto o un contesto di creazione non valido.

  • Tutti i nomi dei trigger in un database devono essere univoci.

  • Il ripristino DDL e Fast DDL non sono supportati in Aurora MySQL versione 3. Non devono esserci artefatti nei database relativi a queste funzionalità.

  • Le tabelle con il formato di COMPACT riga REDUNDANT o non possono avere indici più grandi di 767 byte.

  • La lunghezza del prefisso degli indici definiti nelle colonne di tiny testo non può superare i 255 byte. Con il set di utf8mb4 caratteri, ciò limita la lunghezza del prefisso supportata a 63 caratteri.

    Una lunghezza del prefisso maggiore era consentita in MySQL 5.7 utilizzando il parametro. innodb_large_prefix Questo parametro è obsoleto in MySQL 8.0.

  • Non deve esserci alcuna incoerenza dei metadati InnoDB nella tabella. mysql.host

  • Non deve esserci alcuna discrepanza tra i tipi di dati delle colonne nelle tabelle di sistema.

  • Non devono esserci transazioni XA nello prepared stato.

  • I nomi delle colonne nelle viste non possono superare i 64 caratteri.

  • I caratteri speciali nelle stored procedure non possono essere incoerenti.

  • Le tabelle non possono presentare incoerenze nel percorso dei file di dati.

Procedure di aggiornamento a una versione principale di Aurora MySQL

Non tutti i tipi o le versioni di cluster Aurora MySQL possono utilizzare il meccanismo di aggiornamento in loco. È possibile conoscere la procedura di aggiornamento appropriata per ogni cluster Aurora MySQL consultando la tabella seguente.

Tipo di cluster di database Aurora MySQL Può utilizzare l'aggiornamento in loco? Azione

Cluster con provisioning di Aurora MySQL 2.0 o superiore

L'aggiornamento locale è supportato per i cluster Aurora MySQL compatibili con la versione 5.7.

Per informazioni sull’aggiornamento ad Aurora MySQL versione 3, consulta Pianificazione di un aggiornamento della versione principale per un cluster Aurora MySQL e Come eseguire un aggiornamento in loco.

Cluster con provisioning di Aurora MySQL, 3.01.0 o versione superiore

N/D

Utilizza una procedura di aggiornamento della versione secondaria per eseguire l'aggiornamento tra le versioni di Aurora MySQL versione 3.

Aurora Serverless v1 cluster

N/D

Attualmente, Aurora Serverless v1 è supportato per Aurora MySQL solo nella versione 2.

Aurora Serverless v2 cluster

N/D

Attualmente, Aurora Serverless v2 è supportato solo per Aurora MySQL versione 3.

Cluster in un database globale Aurora

Per eseguire l'aggiornamento di Aurora MySQL versione 2 alla versione 3, segui la procedura per eseguire un aggiornamento locale per i cluster in un database globale Aurora. Esegui l'aggiornamento sul cluster globale. Aurora esegue l'aggiornamento del cluster primario e di tutti i cluster secondari nel database globale nello stesso momento.

Se utilizzi l'API AWS CLI o RDS, chiama il modify-global-cluster comando o l'ModifyGlobalClusteroperazione anziché o. modify-db-cluster ModifyDBCluster

Non è possibile eseguire un aggiornamento locale da Aurora MySQL versione 2 alla versione 3 se il parametro lower_case_table_names è attivato. Per ulteriori informazioni, consulta Aggiornamenti di una versione principale.

Cluster di query parallele

È possibile eseguire l'aggiornamento locale. In questo caso, scegli la versione 2.09.1 o successive di Aurora MySQL.

Cluster che costituisce la destinazione della replica del log binario

Probabile

Se la replica del log binario proviene da un cluster Aurora MySQL, è possibile eseguire un aggiornamento locale. Non è possibile eseguire l'aggiornamento se la replica del log binario proviene da un'istanza MySQL RDS o da un'istanza database MySQL on-premise. In tal caso, è possibile eseguire l'aggiornamento utilizzando il meccanismo di ripristino degli snapshot.

Cluster con zero istanze database

No

Utilizzando AWS CLI o l'API RDS, è possibile creare un cluster Aurora MySQL senza istanze DB collegate. Allo stesso modo, è inoltre possibile rimuovere tutte le istanze database da un cluster Aurora MySQL lasciando intatti i dati nel volume del cluster. Sebbene il cluster non abbia istanze database collegate, non è possibile eseguire l'aggiornamento in loco.

Il meccanismo di aggiornamento richiede un'istanza di scrittura nel cluster per eseguire conversioni sulle tabelle di sistema, sui file di dati e così via. In questo caso, utilizza l'API AWS CLI o l'API RDS per creare un'istanza writer per il cluster. Dopodiché è possibile eseguire l'aggiornamento in loco.

Cluster con backtrack abilitato

È possibile eseguire un aggiornamento in loco per un cluster Aurora MySQL che utilizza la funzione backtrack. Tuttavia, dopo l'aggiornamento, non è possibile eseguire il backtrack del cluster a un momento precedente l'aggiornamento.

Come funziona l'aggiornamento della versione principale di Aurora MySQL in loco

Aurora MySQL esegue l'aggiornamento della versione principale come processo in più fasi. È possibile controllare lo stato corrente di un aggiornamento. Alcuni passaggi dell'aggiornamento forniscono anche informazioni sullo stato di avanzamento. All'inizio di ciascuna fase, Aurora MySQL registra un evento. È possibile esaminare gli eventi man mano che si verificano nella pagina Events (Eventi) della console RDS. Per maggiori informazioni sull'utilizzo degli eventi, consulta Utilizzo della notifica degli eventi di Amazon RDS.

Importante

Una volta avviato, il processo viene eseguito fino a quando l'aggiornamento va a buon fine o non riesce. Non è possibile annullare l'aggiornamento mentre è in corso. Se l'aggiornamento non riesce, Aurora esegue il rollback di tutte le modifiche e il cluster mantiene la versione del motore, i metadati e così via precedenti.

Il processo di aggiornamento è costituito da tre fasi:

  1. Aurora esegue una serie di controlli preliminari prima di iniziare il processo di aggiornamento. Il cluster continua a funzionare mentre Aurora esegue questi controlli. Ad esempio, il cluster non può avere transazioni XA nello stato preparato né avere istruzioni DDL (Data Definition Language) in corso di elaborazione. Ad esempio, potrebbe essere necessario arrestare le applicazioni che inviano determinati tipi di istruzioni SQL. Oppure si può semplicemente aspettare fino a quando alcune istruzioni di lunga durata non siano state completate. Dopodiché, si può riprovare a eseguire l'aggiornamento. Alcuni controlli verificano le condizioni che, pur non impedendo l'aggiornamento, potrebbero far sì che richieda molto tempo.

    Se Aurora rileva che le condizioni richieste non sono soddisfatte, modifica le condizioni identificate nei dettagli dell'evento. Segui le indicazioni riportate in Risoluzione dei problemi relativi all'aggiornamento in loco di Aurora MySQL. Se Aurora rileva condizioni che potrebbero rallentare l'aggiornamento, pianifica il monitoraggio dell'aggiornamento per un periodo prolungato.

  2. Aurora mette il cluster offline. Quindi Aurora esegue un insieme di test analoghi a quelli della fase precedente, per confermare che non si sono presentati nuovi problemi durante il processo di arresto. Se, a questo punto, Aurora rileva condizioni che impediscono l'aggiornamento, Aurora annulla l'aggiornamento e riporta il cluster in linea. In questo caso, verifica quando le condizioni non sono più applicabili e riavvia l'aggiornamento.

  3. Aurora crea uno snapshot del volume del cluster. Si supponga di scoprire problemi di compatibilità o di altro tipo di al termine dell'aggiornamento. Oppure si supponga di volere eseguire test utilizzando sia i cluster originali sia quelli aggiornati. In questi casi, è possibile eseguire il ripristino da questa snapshot per creare un nuovo cluster con la versione originale del motore e i dati originali.

    Suggerimento

    Questo snapshot è di tipo manuale. Tuttavia, Aurora può crearlo e continuare con il processo di aggiornamento anche se è stata raggiunta la quota per gli snapshot manuali. Questa istantanea rimane permanente (se necessario) finché non viene eliminata. Al termine di tutti i test successivi all'aggiornamento, è possibile eliminare questo snapshot per ridurre al minimo i costi di storage.

  4. Aurora clona il volume del cluster. La clonazione è un'operazione veloce che non comporta la copia dei dati effettivi della tabella. Se Aurora riscontra un problema durante l'aggiornamento, ripristina i dati originali dal volume del cluster clonato e riporta il cluster in linea. Il volume temporaneo clonato durante l'aggiornamento non è soggetto al normale limite del numero di cloni per un singolo volume cluster.

  5. Aurora esegue un arresto pulito per l'istanza database di scrittura. Durante l'arresto pulito, gli eventi di avanzamento vengono registrati ogni 15 minuti per le operazioni seguenti. È possibile esaminare gli eventi man mano che si verificano nella pagina Events (Eventi) della console RDS.

    • Aurora elimina i record di annullamento per le versioni precedenti delle righe.

    • Aurora esegue il rollback di tutte le transazioni non salvate.

  6. Aurora aggiorna la versione del motore sull'istanza database di scrittura:

    • Aurora installa il binario per la nuova versione del motore nell'istanza database di scrittura.

    • Aurora utilizza l'istanza database di scrittura per aggiornare i dati in formato compatibile con MySQL 5.7. Durante questa fase, Aurora modifica le tabelle di sistema ed esegue altre conversioni che influiscono sui dati nel volume del cluster. In particolare, Aurora aggiorna i metadati delle partizioni nelle tabelle di sistema affinché siano compatibili con il formato di partizione MySQL 5.7. Questa fase può richiedere molto tempo se le tabelle del cluster dispongono di un numero elevato di partizioni.

      Se durante questa fase si verificano degli errori, è possibile trovare i dettagli nei log degli errori di MySQL. Dopo l'avvio di questa fase, se il processo di aggiornamento non riesce per qualsiasi motivo, Aurora ripristina i dati originali dal volume cluster clonato.

  7. Aurora aggiorna la versione del motore sulle istanze database di lettura.

  8. Il processo di aggiornamento è completato. Aurora registra un evento finale per indicare che il processo di aggiornamento è stato completato correttamente. Ora il cluster di database sta eseguendo la nuova versione principale.

Distribuzioni blu/verdi

In alcune situazioni, la priorità principale è eseguire il passaggio immediato dal cluster precedente a quello aggiornato. In tali situazioni, è possibile utilizzare un processo in più fasi che esegue i cluster vecchi e nuovi. side-by-side Qui, i dati vengono replicati dal cluster precedente a quello nuovo fino a quando il nuovo cluster non prende il controllo. Per informazioni dettagliate, vedi Utilizzo delle implementazioni blu/verde Amazon RDS per gli aggiornamenti del database.

Come eseguire un aggiornamento in loco

Ti consigliamo di rivedere il materiale di background in Come funziona l'aggiornamento della versione principale di Aurora MySQL in loco.

Eseguire qualsiasi pianificazione e test prima dell'aggiornamento, come descritto in. Pianificazione di un aggiornamento della versione principale per un cluster Aurora MySQL

L'esempio seguente aggiorna il cluster mydbcluster-cluster DB alla versione 3.04.1 di Aurora MySQL.

Per aggiornare la versione principale di un cluster di database Aurora MySQL
  1. Accedi AWS Management Console e apri la console Amazon RDS all'indirizzo https://console.aws.amazon.com/rds/.

  2. Se è stato utilizzato un gruppo di parametri personalizzato con il cluster di database originale, crea un gruppo di parametri corrispondente compatibile con la nuova versione principale. Apportare le modifiche necessarie ai parametri di configurazione nel nuovo gruppo di parametri. Per ulteriori informazioni, consulta Come gli aggiornamenti in loco influiscono sui gruppi di parametri per un cluster.

  3. Nel riquadro di navigazione, scegliere Databases (Database).

  4. Scegliere il cluster di database che si desidera modificare.

  5. Scegliere Modify (Modifica).

  6. Per Versione, scegli una versione principale di Aurora MySQL.

    In genere consigliamo di utilizzare la versione secondaria più recente della versione principale. Qui, scegliamo la versione predefinita corrente.

    Aggiornamento locale di un cluster di database Aurora MySQL da versione 2 a versione 3
  7. Scegli Continue (Continua).

  8. Nella pagina successiva specificare quando eseguire l'aggiornamento. Scegliere During the next scheduled maintenance window (Durante la successiva finestra di manutenzione programmata) o Immediately (Immediatamente).

  9. (Facoltativo) Esaminare periodicamente la pagina Events (Eventi) nella console RDS durante l'aggiornamento. In questo modo è possibile monitorare lo stato di avanzamento dell'aggiornamento e identificare eventuali problemi. Se l'aggiornamento incontra dei problemi, consulta Risoluzione dei problemi relativi all'aggiornamento in loco di Aurora MySQL per la procedura da intraprendere.

  10. Se all'inizio di questa procedura è stato creato un nuovo gruppo di parametri, associa il gruppo di parametri personalizzati al cluster aggiornato. Per ulteriori informazioni, consulta Come gli aggiornamenti in loco influiscono sui gruppi di parametri per un cluster.

    Nota

    Per eseguire questo passaggio, è necessario riavviare nuovamente il cluster per applicare il nuovo gruppo di parametri.

  11. (Facoltativo) Dopo avere completato i test successivi all'aggiornamento, eliminare lo snapshot manuale che Aurora ha creato all'inizio dell'aggiornamento.

Per aggiornare la versione principale di un cluster Aurora MySQL DB, usa il comando AWS CLI modify-db-cluster con i seguenti parametri richiesti:

  • --db-cluster-identifier

  • --engine-version

  • --allow-major-version-upgrade

  • --apply-immediately o --no-apply-immediately

Se il cluster utilizza gruppi di parametri personalizzati, includere anche una o entrambe le opzioni seguenti:

  • --db-cluster-parameter-group-name, se il cluster utilizza un gruppo di parametri cluster personalizzato

  • --db-instance-parameter-group-name, se alcune istanze del cluster utilizzano un gruppo di parametri database personalizzato

L'esempio seguente aggiorna il cluster sample-cluster DB alla versione 3.04.1 di Aurora MySQL. L'aggiornamento avviene immediatamente, invece di attendere la successiva finestra di manutenzione.

Esempio

Per, o: Linux macOS Unix

aws rds modify-db-cluster \ --db-cluster-identifier sample-cluster \ --engine-version 8.0.mysql_aurora.3.04.1 \ --allow-major-version-upgrade \ --apply-immediately

Per Windows:

aws rds modify-db-cluster ^ --db-cluster-identifier sample-cluster ^ --engine-version 8.0.mysql_aurora.3.04.1 ^ --allow-major-version-upgrade ^ --apply-immediately

Puoi combinare altri comandi CLI con modify-db-cluster per creare un end-to-end processo automatizzato per l'esecuzione e la verifica degli aggiornamenti. Per maggiori informazioni ed esempi, vedi Esercitazione sull'aggiornamento in loco di Aurora MySQL.

Nota

Se il cluster fa parte di un database globale Aurora, la procedura di aggiornamento in loco è leggermente diversa. Si chiama l'operazione del comando modify-global-cluster invece di modify-db-cluster. Per ulteriori informazioni, consulta Principali aggiornamenti in loco per database globali.

Per aggiornare la versione principale di un cluster di database Aurora MySQL, utilizza l'operazione ModifyDBCluster dell'API RDS con i seguenti parametri obbligatori:

  • DBClusterIdentifier

  • Engine

  • EngineVersion

  • AllowMajorVersionUpgrade

  • ApplyImmediately ( impostato su true o false)

Nota

Se il cluster fa parte di un database globale Aurora, la procedura di aggiornamento in loco è leggermente diversa. Si chiama l'operazione ModifyGlobalCluster invece di. ModifyDBCluster Per ulteriori informazioni, consulta Principali aggiornamenti in loco per database globali.

Come gli aggiornamenti in loco influiscono sui gruppi di parametri per un cluster

I gruppi di parametri di Aurora hanno diversi insiemi di impostazioni di configurazione per i cluster compatibili con MySQL 5.7 o 8.0. Quando si esegue un aggiornamento locale, il cluster aggiornato e tutte le relative istanze devono utilizzare i corrispondenti gruppi di parametri cluster e istanza corrispondenti.

Il cluster e le istanze potrebbero utilizzare i gruppi di parametri compatibili con 5.7 predefiniti. In tal caso, il cluster e l'istanza aggiornati iniziano con i gruppi di parametri compatibili con 8.0 predefiniti. Se il cluster e le istanze utilizzano gruppi di parametri personalizzati, accertarsi di creare i gruppi di parametri compatibili con 8.0 corrispondenti. Accertarsi inoltre di specificarli durante il processo di aggiornamento.

Nota

Per la maggior parte delle impostazioni dei parametri, è possibile scegliere il gruppo di parametri personalizzati in due punti. Quando si crea il cluster o quando si associa il gruppo di parametri al cluster in un secondo momento.

Tuttavia, se si utilizza un'impostazione non predefinita per il parametro lower_case_table_names, è necessario impostare il gruppo di parametri personalizzati con questa impostazione in anticipo. Quindi specificare il gruppo di parametri quando si esegue il ripristino dello snapshot per creare il cluster. Qualsiasi modifica al parametro lower_case_table_names non ha effetto dopo la creazione del cluster.

È opportuno utilizzare la stessa impostazione per lower_case_table_names durante l'aggiornamento da Aurora MySQL versione 2 alla versione 3.

Con un database globale Aurora basato su Aurora MySQL, non puoi eseguire un aggiornamento locale da Aurora MySQL versione 2 alla versione 3 se il parametro lower_case_table_names è attivato. Per ulteriori informazioni sui metodi disponibili all'uso, consulta Aggiornamenti di una versione principale.

Importante

Se si specifica un gruppo di parametri personalizzato durante il processo di aggiornamento, accertarsi di riavviare manualmente il cluster al termine dell'aggiornamento. In questo modo, il cluster inizia a utilizzare le impostazioni dei parametri personalizzati.

Modifiche delle proprietà del cluster tra versioni di Aurora MySQL

Quando esegui l'aggiornamento da Aurora MySQL versione 2 alla versione 3, assicurati di modificare le applicazioni o gli script utilizzati per configurare o gestire i cluster e le istanze database Aurora MySQL.

Inoltre, modifica il codice che manipola i gruppi di parametri per tenere conto del fatto che i nomi dei gruppi di parametri predefiniti sono diversi per i cluster compatibili con 5.7 e 8.0. I nomi dei gruppi di parametri predefiniti per i cluster di Aurora MySQL versione 2 e 3 sono default.aurora-mysql5.7 e default.aurora-mysql8.0, rispettivamente.

Ad esempio, è possibile che si disponga di codice simile al seguente applicabile al cluster prima di un aggiornamento.

# Check the default parameter values for MySQL 5.7–compatible clusters. aws rds describe-db-parameters --db-parameter-group-name default.aurora-mysql5.7 --region us-east-1

Dopo avere aggiornato la versione principale del cluster, è necessario modificare tale codice nel modo seguente.

# Check the default parameter values for MySQL 8.0–compatible clusters. aws rds describe-db-parameters --db-parameter-group-name default.aurora-mysql8.0 --region us-east-1

Principali aggiornamenti in loco per database globali

Per un database globale Aurora, è possibile aggiornare il cluster di database globale. Aurora aggiorna automaticamente tutti i cluster nello stesso momento e assicura che tutti eseguano la stessa versione del motore. Questo requisito è dovuto al fatto che tutte le modifiche apportate alle tabelle di sistema, ai formati di file di dati e così via vengono replicate automaticamente in tutti i cluster secondari.

Segui le istruzioni in Come funziona l'aggiornamento della versione principale di Aurora MySQL in loco. Quando specifichi cosa aggiornare, assicurati di scegliere il cluster di database globale anziché uno dei cluster in esso contenuti.

Se usi il AWS Management Console, scegli l'elemento con il ruolo Database globale.

Aggiornamento del cluster di database globale

Se utilizzi l'API AWS CLI o RDS, avvia il processo di aggiornamento chiamando il comando modify-global-cluster o Cluster operation. ModifyGlobal Utilizzare uno di questi anziché modify-db-cluster o ModifyDBCluster.

Nota

Non è possibile specificare un gruppo di parametri personalizzato per il cluster di database globale mentre si esegue un aggiornamento della versione principale del database globale Aurora. Creare i gruppi di parametri personalizzati in ciascuna regione del cluster globale. Applicarli quindi manualmente ai cluster regionali dopo l'aggiornamento.

Per aggiornare la versione principale di un cluster di database globale Aurora MySQL utilizzando AWS CLI, usa il comando modify-global-cluster con i seguenti parametri richiesti:

  • --global-cluster-identifier

  • --engine aurora-mysql

  • --engine-version

  • --allow-major-version-upgrade

Nell'esempio seguente il cluster database globale viene aggiornato ad Aurora MySQL versione 2.10.2.

Esempio

LinuxPermacOS, o: Unix

aws rds modify-global-cluster \ --global-cluster-identifier global_cluster_identifier \ --engine aurora-mysql \ --engine-version 5.7.mysql_aurora.2.10.2 \ --allow-major-version-upgrade

Per Windows:

aws rds modify-global-cluster ^ --global-cluster-identifier global_cluster_identifier ^ --engine aurora-mysql ^ --engine-version 5.7.mysql_aurora.2.10.2 ^ --allow-major-version-upgrade

Considerazioni a ritroso

Se sul cluster che è stato aggiornato era abilitata la funzione backtrack, non è possibile eseguire il backtrack del cluster aggiornato a un momento precedente all'aggiornamento.

Esercitazione sull'aggiornamento in loco di Aurora MySQL

I seguenti esempi di Linux mostrano come è possibile eseguire i passaggi generali della procedura di aggiornamento in loco utilizzando la AWS CLI.

Questo primo esempio crea un cluster di database Aurora che esegue una versione 2.x di Aurora MySQL. Il cluster include un'istanza database di scrittura e un'istanza database di lettura. Il comando wait db-instance-available si interrompe fino a quando l'istanza database di scrittura non è disponibile. Questo è il momento in cui il cluster è pronto per essere aggiornato.

aws rds create-db-cluster --db-cluster-identifier mynewdbcluster --engine aurora-mysql \ --db-cluster-version 5.7.mysql_aurora.2.10.2 ... aws rds create-db-instance --db-instance-identifier mynewdbcluster-instance1 \ --db-cluster-identifier mynewdbcluster --db-instance-class db.t4g.medium --engine aurora-mysql ... aws rds wait db-instance-available --db-instance-identifier mynewdbcluster-instance1

Le versioni di Aurora MySQL 3.x a cui è possibile aggiornare il cluster dipendono dalla versione 2.x attualmente in esecuzione sul cluster e dalla posizione in cui si trova il cluster. Regione AWS Il primo comando, con --output text, mostra soltanto la versione di destinazione disponibile. Il secondo comando mostra l'output JSON completo della risposta. Questa risposta contiene dettagli quali il valore aurora-mysql utilizzato per il parametro engine. Inoltre, indica che l'aggiornamento a 3.02.0 rappresenta un aggiornamento della versione principale.

aws rds describe-db-clusters --db-cluster-identifier mynewdbcluster \ --query '*[].{EngineVersion:EngineVersion}' --output text 5.7.mysql_aurora.2.10.2 aws rds describe-db-engine-versions --engine aurora-mysql --engine-version 5.7.mysql_aurora.2.10.2 \ --query '*[].[ValidUpgradeTarget]' ... { "Engine": "aurora-mysql", "EngineVersion": "8.0.mysql_aurora.3.02.0", "Description": "Aurora MySQL 3.02.0 (compatible with MySQL 8.0.23)", "AutoUpgrade": false, "IsMajorVersionUpgrade": true, "SupportedEngineModes": [ "provisioned" ], "SupportsParallelQuery": true, "SupportsGlobalDatabases": true, "SupportsBabelfish": false }, ...

Questo esempio mostra che se si immette un numero di versione di destinazione che non è una destinazione di aggiornamento valida per il cluster, Aurora non esegue l'aggiornamento. Aurora non esegue un aggiornamento della versione principale a meno che non si includa il parametro --allow-major-version-upgrade. In questo modo, non è possibile eseguire accidentalmente un aggiornamento che potrebbe richiedere modifiche e test estesi al codice dell'applicazione.

aws rds modify-db-cluster --db-cluster-identifier mynewdbcluster \ --engine-version 5.7.mysql_aurora.2.09.2 --apply-immediately An error occurred (InvalidParameterCombination) when calling the ModifyDBCluster operation: Cannot find upgrade target from 5.7.mysql_aurora.2.10.2 with requested version 5.7.mysql_aurora.2.09.2. aws rds modify-db-cluster --db-cluster-identifier mynewdbcluster \ --engine-version 8.0.mysql_aurora.3.02.0 --region us-east-1 --apply-immediately An error occurred (InvalidParameterCombination) when calling the ModifyDBCluster operation: The AllowMajorVersionUpgrade flag must be present when upgrading to a new major version. aws rds modify-db-cluster --db-cluster-identifier mynewdbcluster \ --engine-version 8.0.mysql_aurora.3.02.0 --apply-immediately --allow-major-version-upgrade { "DBClusterIdentifier": "mynewdbcluster", "Status": "available", "Engine": "aurora-mysql", "EngineVersion": "5.7.mysql_aurora.2.10.2" }

Sono necessari alcuni istanti prima che lo stato del cluster e le istanze database associate vengano modificati in upgrading. I numeri di versione per il cluster e le istanze database cambiano solo al termine dell'aggiornamento. Ancora una volta, è possibile utilizzare il comando wait db-instance-available perché l'istanza database di scrittura attenda il completamento dell'aggiornamento prima di procedere.

aws rds describe-db-clusters --db-cluster-identifier mynewdbcluster \ --query '*[].[Status,EngineVersion]' --output text upgrading 5.7.mysql_aurora.2.10.2 aws rds describe-db-instances --db-instance-identifier mynewdbcluster-instance1 \ --query '*[].{DBInstanceIdentifier:DBInstanceIdentifier,DBInstanceStatus:DBInstanceStatus} | [0]' { "DBInstanceIdentifier": "mynewdbcluster-instance1", "DBInstanceStatus": "upgrading" } aws rds wait db-instance-available --db-instance-identifier mynewdbcluster-instance1

A questo punto, il numero di versione del cluster corrisponde a quello specificato per l'aggiornamento.

aws rds describe-db-clusters --db-cluster-identifier mynewdbcluster \ --query '*[].[EngineVersion]' --output text 8.0.mysql_aurora.3.02.0

L'esempio precedente ha eseguito un aggiornamento immediato specificando il parametro --apply-immediately. Per consentire l'aggiornamento in un momento opportuno, quando si prevede che il cluster non sia occupato, è possibile specificare il parametro --no-apply-immediately. In questo modo l'aggiornamento viene avviato durante la successiva finestra di manutenzione del cluster. La finestra di manutenzione definisce il periodo durante il quale possono iniziare le operazioni di manutenzione. Un'operazione di lunga durata potrebbe non terminare durante la finestra di manutenzione. Pertanto, non è necessario definire una finestra di manutenzione più ampia anche se si prevede che l'aggiornamento potrebbe richiedere molto tempo.

Nell'esempio seguente viene aggiornato un cluster che esegue inizialmente Aurora MySQL versione 2.10.2. Nell’output di describe-db-engine-versions, i valori False e True rappresentano la proprietà IsMajorVersionUpgrade. Dalla versione 2.10.2, è possibile eseguire l'aggiornamento ad altre versioni 2.*. Questi aggiornamenti non sono considerati aggiornamenti di versione principali e quindi non richiedono un aggiornamento in loco. L'aggiornamento locale è disponibile solo per gli aggiornamenti alle versioni 3.* visualizzate nell'elenco.

aws rds describe-db-clusters --db-cluster-identifier mynewdbcluster \ --query '*[].{EngineVersion:EngineVersion}' --output text 5.7.mysql_aurora.2.10.2 aws rds describe-db-engine-versions --engine aurora-mysql --engine-version 5.7.mysql_aurora.2.10.2 \ --query '*[].[ValidUpgradeTarget]|[0][0]|[*].[EngineVersion,IsMajorVersionUpgrade]' --output text 5.7.mysql_aurora.2.10.3 False 5.7.mysql_aurora.2.11.0 False 5.7.mysql_aurora.2.11.1 False 8.0.mysql_aurora.3.01.1 True 8.0.mysql_aurora.3.02.0 True 8.0.mysql_aurora.3.02.2 True aws rds modify-db-cluster --db-cluster-identifier mynewdbcluster \ --engine-version 8.0.mysql_aurora.3.02.0 --no-apply-immediately --allow-major-version-upgrade ...

Quando un cluster viene creato senza una finestra di manutenzione specificata, Aurora seleziona un giorno casuale della settimana. In questo caso, il comando modify-db-cluster viene inviato un lunedì. Pertanto, modifichiamo la finestra di manutenzione affinché sia di martedì mattina. Tutti gli orari sono rappresentati nel fuso orario UTC. La finestra tue:10:00-tue:10:30 indica dalle 2:00 alle 2:30 ora del Pacifico. La modifica della finestra di manutenzione ha effetto immediato.

aws rds describe-db-clusters --db-cluster-identifier mynewdbcluster --query '*[].[PreferredMaintenanceWindow]' [ [ "sat:08:20-sat:08:50" ] ] aws rds modify-db-cluster --db-cluster-identifier mynewdbcluster --preferred-maintenance-window tue:10:00-tue:10:30" aws rds describe-db-clusters --db-cluster-identifier mynewdbcluster --query '*[].[PreferredMaintenanceWindow]' [ [ "tue:10:00-tue:10:30" ] ]

Nell'esempio seguente viene illustrato come ottenere un report degli eventi generati dall'aggiornamento. L'argomento --duration rappresenta il numero di minuti per recuperare le informazioni sull'evento. Questo argomento è necessario perché per impostazione predefinita restituisce describe-events solo gli eventi dell'ultima ora.

aws rds describe-events --source-type db-cluster --source-identifier mynewdbcluster --duration 20160 { "Events": [ { "SourceIdentifier": "mynewdbcluster", "SourceType": "db-cluster", "Message": "DB cluster created", "EventCategories": [ "creation" ], "Date": "2022-11-17T01:24:11.093000+00:00", "SourceArn": "arn:aws:rds:us-east-1:123456789012:cluster:mynewdbcluster" }, { "SourceIdentifier": "mynewdbcluster", "SourceType": "db-cluster", "Message": "Upgrade in progress: Performing online pre-upgrade checks.", "EventCategories": [ "maintenance" ], "Date": "2022-11-18T22:57:08.450000+00:00", "SourceArn": "arn:aws:rds:us-east-1:123456789012:cluster:mynewdbcluster" }, { "SourceIdentifier": "mynewdbcluster", "SourceType": "db-cluster", "Message": "Upgrade in progress: Performing offline pre-upgrade checks.", "EventCategories": [ "maintenance" ], "Date": "2022-11-18T22:57:59.519000+00:00", "SourceArn": "arn:aws:rds:us-east-1:123456789012:cluster:mynewdbcluster" }, { "SourceIdentifier": "mynewdbcluster", "SourceType": "db-cluster", "Message": "Upgrade in progress: Creating pre-upgrade snapshot [preupgrade-mynewdbcluster-5-7-mysql-aurora-2-10-2-to-8-0-mysql-aurora-3-02-0-2022-11-18-22-55].", "EventCategories": [ "maintenance" ], "Date": "2022-11-18T23:00:22.318000+00:00", "SourceArn": "arn:aws:rds:us-east-1:123456789012:cluster:mynewdbcluster" }, { "SourceIdentifier": "mynewdbcluster", "SourceType": "db-cluster", "Message": "Upgrade in progress: Cloning volume.", "EventCategories": [ "maintenance" ], "Date": "2022-11-18T23:01:45.428000+00:00", "SourceArn": "arn:aws:rds:us-east-1:123456789012:cluster:mynewdbcluster" }, { "SourceIdentifier": "mynewdbcluster", "SourceType": "db-cluster", "Message": "Upgrade in progress: Purging undo records for old row versions. Records remaining: 164", "EventCategories": [ "maintenance" ], "Date": "2022-11-18T23:02:25.141000+00:00", "SourceArn": "arn:aws:rds:us-east-1:123456789012:cluster:mynewdbcluster" }, { "SourceIdentifier": "mynewdbcluster", "SourceType": "db-cluster", "Message": "Upgrade in progress: Purging undo records for old row versions. Records remaining: 164", "EventCategories": [ "maintenance" ], "Date": "2022-11-18T23:06:23.036000+00:00", "SourceArn": "arn:aws:rds:us-east-1:123456789012:cluster:mynewdbcluster" }, { "SourceIdentifier": "mynewdbcluster", "SourceType": "db-cluster", "Message": "Upgrade in progress: Upgrading database objects.", "EventCategories": [ "maintenance" ], "Date": "2022-11-18T23:06:48.208000+00:00", "SourceArn": "arn:aws:rds:us-east-1:123456789012:cluster:mynewdbcluster" }, { "SourceIdentifier": "mynewdbcluster", "SourceType": "db-cluster", "Message": "Database cluster major version has been upgraded", "EventCategories": [ "maintenance" ], "Date": "2022-11-18T23:10:28.999000+00:00", "SourceArn": "arn:aws:rds:us-east-1:123456789012:cluster:mynewdbcluster" } ] }

Individuazione dei motivi degli errori di aggiornamento

Nel tutorial precedente, l'aggiornamento da Aurora MySQL versione 2 alla versione 3 è riuscito. Ma se l'aggiornamento fosse fallito, vorresti sapere perché.

È possibile iniziare utilizzando il describe-events AWS CLI comando per esaminare gli eventi del cluster DB. Questo esempio mostra gli eventi delle ultime 10 ore. mydbcluster

aws rds describe-events \ --source-type db-cluster \ --source-identifier mydbcluster \ --duration 600

In questo caso, si è verificato un errore di precontrollo dell'aggiornamento.

{ "Events": [ { "SourceIdentifier": "mydbcluster", "SourceType": "db-cluster", "Message": "Database cluster engine version upgrade started.", "EventCategories": [ "maintenance" ], "Date": "2024-04-11T13:23:22.846000+00:00", "SourceArn": "arn:aws:rds:us-east-1:123456789012:cluster:mydbcluster" }, { "SourceIdentifier": "mydbcluster", "SourceType": "db-cluster", "Message": "Database cluster is in a state that cannot be upgraded: Upgrade prechecks failed. For more details, see the upgrade-prechecks.log file. For more information on troubleshooting the cause of the upgrade failure, see https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/AuroraMySQL.Updates.MajorVersionUpgrade.html#AuroraMySQL.Upgrading.Troubleshooting.", "EventCategories": [ "maintenance" ], "Date": "2024-04-11T13:23:24.373000+00:00", "SourceArn": "arn:aws:rds:us-east-1:123456789012:cluster:mydbcluster" } ] }

Per diagnosticare la causa esatta del problema, esamina i log del database per l'istanza Writer DB. Quando un aggiornamento ad Aurora MySQL versione 3 fallisce, l'istanza writer contiene un file di registro con il nome. upgrade-prechecks.log Questo esempio mostra come rilevare la presenza di quel log e quindi scaricarlo in un file locale per l'analisi.

aws rds describe-db-log-files --db-instance-identifier mydbcluster-instance \ --query '*[].[LogFileName]' --output text error/mysql-error-running.log error/mysql-error-running.log.2024-04-11.20 error/mysql-error-running.log.2024-04-11.21 error/mysql-error.log external/mysql-external.log upgrade-prechecks.log aws rds download-db-log-file-portion --db-instance-identifier mydbcluster-instance \ --log-file-name upgrade-prechecks.log \ --starting-token 0 \ --output text >upgrade_prechecks.log

Il file upgrade-prechecks.log è in formato JSON. Lo scarichiamo usando l'opzione --output text per evitare la codifica dell'output JSON all'interno di un altro wrapper JSON. Per gli aggiornamenti di Aurora MySQL versione 3, questo log include sempre alcuni messaggi informativi e di avviso. Include messaggi di errore solo se l'aggiornamento non riesce. Se l'aggiornamento riesce, il file di log non viene prodotto.

Per riepilogare tutti gli errori e visualizzare gli oggetti e i campi di descrizione associati, è possibile eseguire il comando grep -A 2 '"level": "Error"' sul contenuto del file. upgrade-prechecks.log In questo modo viene visualizzata ogni riga di errore e le due righe successive. Queste contengono il nome dell'oggetto di database corrispondente e le indicazioni su come correggere il problema.

$ cat upgrade-prechecks.log | grep -A 2 '"level": "Error"' "level": "Error", "dbObject": "problematic_upgrade.dangling_fulltext_index", "description": "Table `problematic_upgrade.dangling_fulltext_index` contains dangling FULLTEXT index. Kindly recreate the table before upgrade."

In questo esempio, è possibile eseguire il seguente comando SQL sulla tabella che causa il problema per cercare di risolvere il problema oppure è possibile ricreare la tabella senza l'indice pendente.

OPTIMIZE TABLE problematic_upgrade.dangling_fulltext_index;

Quindi riprova a eseguire l'aggiornamento.

Risoluzione dei problemi relativi all'aggiornamento in loco di Aurora MySQL

Utilizza i seguenti suggerimenti per risolvere i problemi relativi agli aggiornamenti in loco di Aurora MySQL. Questi suggerimenti non si applicano a cluster di database Aurora Serverless.

Motivo dell'annullamento o della lentezza dell'aggiornamento in loco Effetto Soluzione per consentire il completamento dell'aggiornamento in loco all'interno della finestra di manutenzione
La replica interregionale Aurora associata non è ancora stata patchata Aurora annulla l'aggiornamento. Aggiorna la replica Aurora Cross-Region e riprova.
Il cluster ha transazioni XA nello stato preparato Aurora annulla l'aggiornamento. Salvare o eseguire il rollback di tutte le transazioni XA preparate.
Il cluster sta elaborando un'istruzione DDL (Data Definition Language) Aurora annulla l'aggiornamento. Prendere in considerazione di attendere il completamento di tutte le istruzioni DDL prima di eseguire l'aggiornamento.
Il cluster ha modifiche non salvate per molte righe L'aggiornamento potrebbe richiedere molto tempo.

Il processo di aggiornamento esegue il rollback delle modifiche non salvate. L'indicatore per questa condizione è il valore di TRX_ROWS_MODIFIED nella tabella INFORMATION_SCHEMA.INNODB_TRX.

Prendere in considerazione l'esecuzione dell'aggiornamento solo dopo avere salvato le modifiche o eseguito il rollback di tutte le transazioni di grandi dimensioni.

Il cluster ha un numero elevato di record di annullamento L'aggiornamento potrebbe richiedere molto tempo.

Anche se le transazioni non salvate non interessano un numero elevato di righe, potrebbero comportare un grande volume di dati. Ad esempio, è possibile che si inseriscano BLOB di grandi dimensioni. Aurora non rileva o genera automaticamente un evento per questo tipo di attività di transazione. L'indicatore di questa condizione è la lunghezza dell'elenco cronologico (HLL). Il processo di aggiornamento esegue il rollback delle modifiche non salvate.

È possibile controllare l'HLL nell'output del comando SHOW ENGINE INNODB STATUS SQL o direttamente utilizzando la seguente query SQL:

SELECT count FROM information_schema.innodb_metrics WHERE name = 'trx_rseg_history_len';

Puoi anche monitorare la RollbackSegmentHistoryListLength metrica in Amazon CloudWatch.

Valuta la possibilità di eseguire l'aggiornamento solo dopo che l'HLL sarà più piccolo.

Il cluster è in fase di salvataggio di una transazione di log binario di grandi dimensioni L'aggiornamento potrebbe richiedere molto tempo.

Il processo di aggiornamento attende fino a quando non vengono applicate le modifiche del log binario. Altre transazioni o istruzioni DDL potrebbero iniziare durante questo periodo, rallentando ulteriormente il processo di aggiornamento.

Pianificare il processo di aggiornamento quando il cluster non è occupato con la generazione di modifiche alla replica del log binario. Aurora non rileva o genera automaticamente un evento per questa condizione.

Incongruenze dello schema derivanti dalla rimozione o dal danneggiamento dei file Aurora annulla l'aggiornamento.

Cambiare il motore di archiviazione predefinito per le tabelle temporanee da MyISAM in InnoDB. Esegui queste fasi:

  1. Modificare il parametro database default_tmp_storage_engine impostandolo su InnoDB.

  2. Riavviare il cluster database.

  3. Dopo il riavvio, verificare che il parametro database default_tmp_storage_engine sia impostato su InnoDB. Utilizza il seguente comando:

    show global variables like 'default_tmp_storage_engine';
  4. Assicurarsi di non creare tabelle temporanee che utilizzino il motore di archiviazione MyISAM. È consigliabile sospendere qualsiasi carico di lavoro del database e non creare nuove connessioni al database perché l'aggiornamento verrà rilasciato a breve.

  5. Provare di nuovo l'aggiornamento sul posto.

L'utente principale è stato eliminato Aurora annulla l'aggiornamento.
Importante

Non eliminare l'utente principale.

Tuttavia, se per qualche motivo dovessi eliminare l'utente master, ripristinalo utilizzando i seguenti comandi SQL:

CREATE USER 'master_username'@'%' IDENTIFIED BY 'master_user_password' REQUIRE NONE PASSWORD EXPIRE DEFAULT ACCOUNT UNLOCK; GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, RELOAD, PROCESS, REFERENCES, INDEX, ALTER, SHOW DATABASES, CREATE TEMPORARY TABLES, LOCK TABLES, EXECUTE, REPLICATION SLAVE, REPLICATION CLIENT, CREATE VIEW, SHOW VIEW, CREATE ROUTINE, ALTER ROUTINE, CREATE USER, EVENT, TRIGGER, LOAD FROM S3, SELECT INTO S3, INVOKE LAMBDA, INVOKE SAGEMAKER, INVOKE COMPREHEND ON *.* TO 'master_username'@'%' WITH GRANT OPTION;

Per ulteriori dettagli sulla risoluzione dei problemi che causano il fallimento dei controlli preliminari di aggiornamento, consultate i seguenti blog:

È possibile utilizzare la procedura seguente per eseguire controlli personalizzati per alcune delle condizioni della tabella precedente. In questo modo, è possibile pianificare l'aggiornamento in un momento in cui si sa che il database si trova in uno stato in cui l'aggiornamento può essere completato correttamente e con rapidità.

  • È possibile verificare la presenza di transazioni XA aperte eseguendo l'istruzione XA RECOVER. È quindi possibile salvare le modifiche o eseguire il rollback delle transazioni XA prima di iniziare l'aggiornamento.

  • È possibile verificare la presenza di istruzioni DDL eseguendo un'istruzione SHOW PROCESSLIST e cercando le istruzioni CREATE, DROP, ALTER, RENAME e TRUNCATE nell'output. Consentire il completamento di tutte le istruzioni DDL prima di iniziare l'aggiornamento.

  • È possibile controllare il numero totale di righe non salvate eseguendo una query sulla tabella INFORMATION_SCHEMA.INNODB_TRX. La tabella contiene una riga per ogni transazione. La colonna TRX_ROWS_MODIFIED contiene il numero di righe modificate o inserite dalla transazione.

  • È possibile controllare la lunghezza della lista della cronologia InnoDB eseguendo l'istruzione SHOW ENGINE INNODB STATUS SQL e cercando la History list length nell'output. È inoltre possibile controllare direttamente il valore eseguendo la seguente query:

    SELECT count FROM information_schema.innodb_metrics WHERE name = 'trx_rseg_history_len';

    La lunghezza dell'elenco cronologico corrisponde alla quantità di informazioni di annullamento memorizzate dal database per implementare il controllo della concorrenza multiversione (MVCC).

Pulizia post-aggiornamento per Aurora MySQL versione 3

Dopo aver completato l'aggiornamento di un cluster Aurora MySQL versione 2 ad Aurora MySQL versione 3, è possibile eseguire queste altre azioni di pulizia:

  • Crea nuove versioni compatibili con MySQL 8.0 di qualsiasi gruppo di parametri personalizzati. Applicare i valori dei parametri personalizzati necessari ai nuovi gruppi di parametri.

  • Aggiorna eventuali CloudWatch allarmi, script di configurazione e così via per utilizzare i nuovi nomi per tutte le metriche i cui nomi sono stati influenzati da modifiche linguistiche complete. Per un elenco di parametri, consultare Cambiamenti linguistici inclusivi per Aurora MySQL versione 3.

  • Aggiorna tutti AWS CloudFormation i modelli per utilizzare i nuovi nomi per tutti i parametri di configurazione i cui nomi sono stati influenzati da modifiche linguistiche complete. Per l'elenco completo dei parametri, consultare Cambiamenti linguistici inclusivi per Aurora MySQL versione 3.

Indici spaziali

Dopo l'aggiornamento a Aurora MySQL versione 3, verificare se è necessario eliminare o ricreare oggetti e indici relativi agli indici spaziali. Prima di MySQL 8.0, Aurora poteva ottimizzare le query spaziali utilizzando indici che non contengono un identificatore delle risorse spaziali (SRID). Aurora MySQL versione 3 utilizza solo indici spaziali contenenti SRID. Durante un aggiornamento, Aurora rilascia automaticamente tutti gli indici spaziali senza SRID e stampa i messaggi di avviso nel registro del database. Se si osservano tali messaggi di avviso, creare nuovi indici spaziali con SRID dopo l'aggiornamento. Per ulteriori informazioni sulle modifiche alle funzioni spaziali e ai tipi di dati in MySQL 8.0, consultare Changes in MySQL 8.0 (Modifiche in MySQL 8.0)nel Manuale di riferimento MySQL.