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.
Indice
- Aggiornamento da Aurora MySQL versione 2 alla versione 3
- Pianificazione di un aggiornamento della versione principale per un cluster Aurora MySQL
- Controlli preliminari di aggiornamento delle versioni principali per Aurora MySQL
- Procedure di aggiornamento a una versione principale di Aurora MySQL
- Come funziona l'aggiornamento della versione principale di Aurora MySQL in loco
- Distribuzioni blu/verdi
- Come eseguire un aggiornamento in loco
- Come gli aggiornamenti in loco influiscono sui gruppi di parametri per un cluster
- Modifiche delle proprietà del cluster tra versioni di Aurora MySQL
- Principali aggiornamenti in loco per database globali
- Considerazioni a ritroso
- Esercitazione sull'aggiornamento in loco di Aurora MySQL
- Individuazione dei motivi degli errori di aggiornamento
- Risoluzione dei problemi relativi all'aggiornamento in loco di Aurora MySQL
- Pulizia post-aggiornamento per Aurora MySQL versione 3
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:
-
Nota
Se si utilizza l'API AWS CLI o RDS per il metodo di aggiornamento del ripristino delle istantanee, è necessario eseguire un'operazione successiva per creare un'istanza DB di scrittura nel cluster DB ripristinato.
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:
-
Se stai eseguendo la conversione da RDS for MySQL 8.0 o MySQL 8.0 Community Edition, vedi. Confronto tra Aurora MySQL versione 3 e la community MySQL 8.0
-
Se stai eseguendo l'aggiornamento da Aurora MySQL versione 2, RDS for MySQL 5.7 o dalla community MySQL 5.7, consulta. Confronto tra Aurora MySQL versione 2 e Aurora MySQL versione 3
-
Creare 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. Consultare Modifiche ai parametri per Aurora MySQL versione 3 per conoscere le modifiche ai parametri.
-
Esaminare lo schema del database Aurora MySQL versione 2 e le definizioni di oggetto per l'utilizzo di nuove parole chiave riservate introdotte in MySQL 8.0 Community Edition. Eseguire questa operazione prima di effettuare l'aggiornamento. Per ulteriori informazioni, consulta MySQL 8.0 New Keywords and Reserved Words
nella documentazione di MySQL.
Puoi inoltre trovare ulteriori suggerimenti e considerazioni sull'aggiornamento specifici di MySQL in Changes in MySQL 8.0 (Modifiche in MySQL 8.0)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:
-
Crea un clone del cluster originale. Segui la procedura riportata in Clonazione di un volume per un cluster di database Amazon Aurora.
-
Imposta un insieme di istanze database di scrittura e di lettura analogo a quello del cluster originale.
-
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.
-
Verifica la compatibilità e le prestazioni delle applicazioni, le procedure di amministrazione e così via, utilizzando il cluster clonato.
-
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.
-
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.
-
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:
-
Ti consentono di evitare tempi di inattività non pianificati durante l'aggiornamento.
-
In caso di incompatibilità, Amazon Aurora impedisce l'aggiornamento e ti fornisce un registro per conoscerle. Puoi quindi utilizzare il log per preparare il database per l'aggiornamento alla versione 3 riducendo le incompatibilità. Per informazioni dettagliate sulla rimozione di incompatibilità, consulta l'argomento relativo alla preparazione dell'installazione per l'aggiornamento
nella documentazione di MySQL e il post relativo alle informazioni sull'aggiornamento di MySQL 8.0 nel blog di MySQL Server.
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 charsetutf8mb4
. Il set di caratteriutf8mb3
è obsoleto. Inoltre, valuta l'utilizzo diutf8mb4
per i riferimenti al set di caratteri anzichéutf8
, perché attualmenteutf8
è un'alias per il charsetutf8mb3
.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 «display
lunghezza». -
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 diSET
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
oDESC
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.
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_CACHE
SQL_NO_CACHE
, nei trigger e negliQUERY_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
rigaREDUNDANT
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 diutf8mb4
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 |
Sì |
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 |
Sì |
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 Non è possibile eseguire un aggiornamento locale da Aurora MySQL versione 2 alla versione 3 se il parametro |
Cluster di query parallele |
Sì |
È 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 |
Sì |
È 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:
-
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.
-
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.
-
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.
-
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.
-
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.
-
-
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.
-
-
Aurora aggiorna la versione del motore sulle istanze database di lettura.
-
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
-
Accedi AWS Management Console e apri la console Amazon RDS all'indirizzo https://console.aws.amazon.com/rds/
. -
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.
-
Nel riquadro di navigazione, scegliere Databases (Database).
-
Scegliere il cluster di database che si desidera modificare.
-
Scegliere Modify (Modifica).
-
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.
-
Scegli Continue (Continua).
-
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).
-
(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.
-
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.
-
(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 sutrue
ofalse
)
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](images/aurora-global-databases-major-upgrade-global-cluster.png)
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-immediatelyAn 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 text5.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 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
Puoi anche monitorare la 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:
|
L'utente principale è stato eliminato | Aurora annulla l'aggiornamento. |
ImportanteNon eliminare l'utente principale. Tuttavia, se per qualche motivo dovessi eliminare l'utente master, ripristinalo utilizzando i seguenti comandi SQL:
|
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 istruzioniCREATE
,DROP
,ALTER
,RENAME
eTRUNCATE
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 colonnaTRX_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 laHistory 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)