

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 dei cluster database Amazon Aurora MySQL
<a name="AuroraMySQL.Updates.Upgrading"></a><a name="mysql_upgrade"></a>

 È possibile aggiornare un cluster database Aurora MySQL per ottenere correzioni di bug e nuove funzionalità Aurora MySQL o per passare a una versione completamente nuova del motore del database sottostante. Nelle sezioni seguenti viene illustrato come. 

**Nota**  
 Il tipo di aggiornamento che esegui dipende dalla quantità di tempo di inattività che puoi permetterti per il tuo cluster, dalla quantità di test di verifica che intendi fare, dall'importanza delle correzioni di bug specifiche o delle nuove funzionalità per il tuo caso d'uso e dalla previsione di eseguire frequenti piccoli aggiornamenti o aggiornamenti occasionali che saltano diversi versioni intermedie. Per ogni aggiornamento, è possibile modificare la versione principale, la versione secondaria e il livello di patch per il cluster. Se non hai familiarità con la distinzione tra versioni principali, versioni secondarie e livelli di patch di Aurora MySQL, consulta le informazioni di base in [Verifica dei numeri di versione di Aurora MySQL](AuroraMySQL.Updates.Versions.md). 

**Suggerimento**  
È possibile ridurre al minimo i tempi di inattività necessari per l'aggiornamento di un cluster di database utilizzando un'implementazione blu/verde. Per ulteriori informazioni, consulta [Utilizzo di Amazon Blue/Green Aurora Deployments per gli aggiornamenti del database](blue-green-deployments.md).

**Topics**
+ [Aggiornamento della versione secondaria o del livello di patch di un cluster di database Aurora MySQL](AuroraMySQL.Updates.Patching.md)
+ [Aggiornamento della versione principale di un cluster di database Amazon Aurora MySQL](AuroraMySQL.Updates.MajorVersionUpgrade.md)

# Aggiornamento della versione secondaria o del livello di patch di un cluster di database Aurora MySQL
<a name="AuroraMySQL.Updates.Patching"></a>

 Puoi utilizzare i seguenti metodi per aggiornare la versione secondaria di un cluster di database o per applicare le patch a un cluster di database: 
+ [Aggiornamento di Aurora MySQL modificando la versione del motore](AuroraMySQL.Updates.Patching.ModifyEngineVersion.md) (per Aurora MySQL versione 2 e 3)
+ [Abilitazione degli aggiornamenti automatici tra versioni secondarie di Aurora MySQL](AuroraMySQL.Updates.AMVU.md)

 Per informazioni su come l'applicazione di patch senza tempi di inattività può ridurre le interruzioni durante il processo di aggiornamento, consulta [Utilizzo dell'applicazione di patch senza tempi di inattività](AuroraMySQL.Updates.ZDP.md). 

Per informazioni sull’esecuzione di un aggiornamento a una versione secondaria per il cluster di database Aurora MySQL, consulta i seguenti argomenti. 

**Topics**
+ [Operazioni preliminari all’aggiornamento a una versione secondaria](#USER_UpgradeDBInstance.PostgreSQL.BeforeMinor)
+ [Controlli preliminari per gli aggiornamenti a versioni secondarie per Aurora MySQL](#AuroraMySQL.minor-upgrade-prechecks)
+ [Aggiornamento di Aurora MySQL modificando la versione del motore](AuroraMySQL.Updates.Patching.ModifyEngineVersion.md)
+ [Abilitazione degli aggiornamenti automatici tra versioni secondarie di Aurora MySQL](AuroraMySQL.Updates.AMVU.md)
+ [Utilizzo dell'applicazione di patch senza tempi di inattività](AuroraMySQL.Updates.ZDP.md)
+ [Tecnica di aggiornamento alternativa blue/green](#AuroraMySQL.UpgradingMinor.BlueGreen)

## Operazioni preliminari all’aggiornamento a una versione secondaria
<a name="USER_UpgradeDBInstance.PostgreSQL.BeforeMinor"></a>

Consigliamo di eseguire le seguenti azioni per ridurre il tempo di inattività durante un aggiornamento di una versione secondaria:
+ La manutenzione del cluster di database Aurora deve essere eseguita durante un periodo di traffico ridotto. Utilizza Approfondimenti sulle prestazioni per identificare questi periodi di tempo al fine di configurare correttamente le finestre di manutenzione. Per ulteriori informazioni su Approfondimenti sulle prestazioni, consulta [Monitoraggio del carico DB con Performance Insights su Amazon RDS](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/USER_PerfInsights.html). Per ulteriori informazioni sulla finestra di manutenzione dei cluster di database, [Impostazione della finestra di manutenzione preferita del cluster database](USER_UpgradeDBInstance.Maintenance.md#AdjustingTheMaintenanceWindow.Aurora).
+ Usa AWS SDKs questo supporto per il backoff e il jitter esponenziali come best practice. Per ulteriori informazioni, consulta [Backoff esponenziale e jitter](https://aws.amazon.com/blogs/architecture/exponential-backoff-and-jitter/).

## Controlli preliminari per gli aggiornamenti a versioni secondarie per Aurora MySQL
<a name="AuroraMySQL.minor-upgrade-prechecks"></a>

Quando avvii un aggiornamento a una versione secondaria, Amazon Aurora esegue automaticamente dei controlli preliminari.

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.
+ Se sono presenti incompatibilità, Amazon Aurora impedisce l’aggiornamento e fornisce un log per ottenere informazioni sulle stesse. Puoi quindi utilizzare il log per preparare il database per l’aggiornamento riducendo le incompatibilità. Per informazioni dettagliate sulla rimozione di eventuali incompatibilità, consulta [Preparazione dell’installazione per l’aggiornamento](https://dev.mysql.com/doc/refman/8.0/en/upgrade-prerequisites.html) nella documentazione di MySQL.

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 controlli preliminari rilevano un’incompatibilità, Aurora annulla automaticamente l’aggiornamento prima che l’istanza database venga arrestata. 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](USER_Events.md).

Aurora memorizza informazioni dettagliate su ciascuna incompatibilità nel file di log `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](USER_LogAccess.Procedural.Viewing.md).

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.

# Aggiornamento di Aurora MySQL modificando la versione del motore
<a name="AuroraMySQL.Updates.Patching.ModifyEngineVersion"></a>

L’aggiornamento della versione secondaria di un cluster di database Aurora MySQL applica correzioni aggiuntive e nuove funzionalità a un cluster esistente.

Questo tipo di aggiornamento si applica ai cluster Aurora MySQL in cui la versione originale e la versione aggiornata sono entrambi nella versione principale di Aurora MySQL, ossia 2 o 3. Il processo è semplice e veloce perché non comporta alcuna conversione dei metadati di Aurora MySQL o la riorganizzazione dei dati della tabella.

Puoi eseguire questo tipo di aggiornamento modificando la versione del motore del cluster di database utilizzando la Console di gestione AWS, l'AWS CLI, o l'API RDS. Ad esempio, se nel cluster è in esecuzione Aurora MySQL 3.x, scegli una versione 3.x superiore.

Se si sta eseguendo un aggiornamento secondario su un Database globale Aurora, è necessario aggiornare tutti i cluster secondari prima di aggiornare il cluster primario.

**Nota**  
Per eseguire un aggiornamento della versione secondaria ad Aurora MySQL versione 3.04.\$1 o successive, o alla versione 2.12\$1, utilizza la seguente procedura:  
Rimuovi tutte le regioni secondarie dal cluster globale. Seguire la procedura riportata in [Rimozione di un cluster da un database globale Amazon Aurora](aurora-global-database-detaching.md).
Aggiorna la versione del motore della regione primaria alla versione 3.04.\$1 o successive o alla versione 2.12.\$1, in base alle esigenze. Seguire la procedura riportata in [To modify the engine version of a DB cluster](#modify-db-cluster-engine-version).
Aggiungi le regioni secondarie al cluster globale. Seguire la procedura riportata in [Aggiunta di una Regione AWS a un database globale Amazon Aurora](aurora-global-database-attaching.md).

 **Per modificare la versione del motore di un cluster di database** 
+ **Utilizzando la console** – Modificare le proprietà del cluster. Nella finestra **Modify DB cluster (Modifica il cluster di database)** cambia la versione del motore Aurora MySQL nella casella **DB engine version (Versione motore database)**. Se non hai familiarità con la procedura generale per la modifica di un cluster, segui le istruzioni riportate in [Modifica del cluster di database tramite la console, la CLI e l'API](Aurora.Modifying.md#Aurora.Modifying.Cluster).
+ **Utilizzando la AWS CLI**: richiamare il comando [modify-db-cluster](https://docs.aws.amazon.com/cli/latest/reference/rds/modify-db-cluster.html) della AWS CLI e specificare il nome del cluster di database per l'opzione `--db-cluster-identifier` e la versione del motore per l'opzione `--engine-version`.

  Ad esempio, per eseguire l'aggiornamento ad Aurora MySQL versione 3.04.1, imposta l'opzione `--engine-version` su `8.0.mysql_aurora.3.04.1`. Specifica l'opzione `--apply-immediately` per aggiornare immediatamente la versione del motore per il cluster di database.
+ **Con l'API RDS** – Chiama l'operazione API [ModifyDBCluster](https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_ModifyDBCluster.html) e specifica il nome del cluster di database per il parametro `DBClusterIdentifier` e la versione del motore per il parametro `EngineVersion`. Imposta il parametro `ApplyImmediately` su `true` per aggiornare immediatamente la versione del motore per il cluster di database.

# Abilitazione degli aggiornamenti automatici tra versioni secondarie di Aurora MySQL
<a name="AuroraMySQL.Updates.AMVU"></a><a name="amvu"></a>

Per un cluster di database Amazon Aurora MySQL, puoi specificare che Aurora aggiorni automaticamente il cluster di database alle nuove versioni secondarie. Puoi farlo impostando la proprietà `AutoMinorVersionUpgrade` (**Aggiornamento automatico versione secondaria** nella Console di gestione AWS) del cluster di database.

Gli aggiornamenti automatici vengono eseguiti durante le finestre di manutenzione. Se le singole istanze database nel cluster database hanno finestre di manutenzione diverse dalla finestra di manutenzione del cluster, la finestra di manutenzione del cluster ha la precedenza.

L'aggiornamento automatico della versione secondaria non si applica ai seguenti tipi di cluster Aurora MySQL:
+ Cluster che fanno parte di un database globale Aurora
+ Cluster con repliche tra regioni

La durata dell'interruzione varia a seconda del carico di lavoro, della dimensione del cluster, della quantità di dati di log binari e se Aurora può utilizzare la funzionalità ZDP (zero-downtime patching). Aurora riavvia il cluster di database, pertanto potrebbe verificarsi un breve periodo di indisponibilità prima di riprendere l'utilizzo del cluster. In particolare, la quantità di dati dei log binari influisce sui tempi di ripristino. L'istanza database elabora i dati del log binario durante il ripristino. Pertanto un volume elevato di dati dei log binari aumenta il tempo di recupero.

**Nota**  
Aurora esegue gli aggiornamenti automatici se tutte le istanze database nel tuo cluster di database hanno l’impostazione `AutoMinorVersionUpgrade` abilitata. Per informazioni su come effettuare tale impostazione, e sul relativo funzionamento quando applicata a livello di cluster e istanza, consulta [Aggiornamenti automatici delle versioni secondarie per i cluster di database Aurora](USER_UpgradeDBInstance.Maintenance.md#Aurora.Maintenance.AMVU).  
Quindi, se esiste un percorso di aggiornamento per le istanze del cluster di database a una versione secondaria del motore di database con l’opzione `AutoUpgrade` impostata su true, l’aggiornamento verrà eseguito. L’impostazione `AutoUpgrade` è dinamica e viene configurata da RDS.  
Gli aggiornamenti automatici delle versioni secondarie vengono eseguiti sulla versione secondaria predefinita.

È possibile utilizzare un comando CLI come il seguente per verificare lo stato dell'impostazione `AutoMinorVersionUpgrade` per tutte le istanze database nei cluster Aurora MySQL.

```
aws rds describe-db-instances \
  --query '*[].{DBClusterIdentifier:DBClusterIdentifier,DBInstanceIdentifier:DBInstanceIdentifier,AutoMinorVersionUpgrade:AutoMinorVersionUpgrade}'
```

Questo comando genera un output simile al seguente:

```
[
  {
      "DBInstanceIdentifier": "db-t2-medium-instance",
      "DBClusterIdentifier": "cluster-57-2020-06-03-6411",
      "AutoMinorVersionUpgrade": true
  },
  {
      "DBInstanceIdentifier": "db-t2-small-original-size",
      "DBClusterIdentifier": "cluster-57-2020-06-03-6411",
      "AutoMinorVersionUpgrade": false
  },
  {
      "DBInstanceIdentifier": "instance-2020-05-01-2332",
      "DBClusterIdentifier": "cluster-57-2020-05-01-4615",
      "AutoMinorVersionUpgrade": true
  },
... output omitted ...
```

In questo esempio, l'impostazione **Abilita aggiornamento automatico versione secondaria** è disattivata per il cluster di database `cluster-57-2020-06-03-6411`, perché è disattivata per una delle istanze database del cluster.

# Utilizzo dell'applicazione di patch senza tempi di inattività
<a name="AuroraMySQL.Updates.ZDP"></a><a name="zdp"></a>

L'esecuzione di aggiornamenti per i cluster Aurora MySQL DB comporta la possibilità di un'interruzione quando il database viene spento e durante l'aggiornamento. Per impostazione predefinita, se si avvia l'aggiornamento mentre il database è occupato, si perdono tutte le connessioni e le transazioni elaborate dal cluster di database. Se si aspetta che il database sia inattivo per eseguire l'aggiornamento, potrebbe essere necessario attendere a lungo.

L'applicazione di patch senza tempi di inattività si basa sul miglior tentativo per preservare le connessioni client attraverso un aggiornamento Aurora MySQL. Se l'applicazione di patch senza tempi di inattività viene completata correttamente, le sessioni delle applicazioni vengono conservate e il motore del database si riavvia mentre l'aggiornamento è in corso. Il riavvio del motore del database può causare un calo del throughput della durata di alcuni secondi fino a circa un minuto.

ZDP non si applica a quanto segue:
+ Patch e aggiornamenti del sistema operativo
+ Aggiornamenti di una versione principale

ZDP è disponibile per tutte le versioni di Aurora MySQL e le classi di istanze database supportate.

ZDP non è supportato per i database globali Aurora Serverless v1 o Aurora.

**Nota**  
Consigliamo di utilizzare le classi di istanza database T solo per i server di sviluppo e test o altri server non di produzione. Per ulteriori informazioni sulle classi di istanza T, consulta [Utilizzo delle classi di istanza T per lo sviluppo e i test](AuroraMySQL.BestPractices.Performance.md#AuroraMySQL.BestPractices.T2Medium).

È possibile visualizzare i parametri degli attributi importanti durante ZDP nel log degli errori MySQL. È inoltre possibile visualizzare informazioni su quando Aurora MySQL utilizza ZDP o sceglie di non utilizzare ZDP nella pagina **Eventi** nella Console di gestione AWS.

In Aurora MySQL, Aurora può eseguire una patch senza tempi di inattività indipendentemente dal fatto che la replica dei log binari sia abilitata o meno. Se la replica dei log binari è abilitata, Aurora MySQL elimina automaticamente la connessione alla destinazione binlog durante un'operazione di applicazione di patch senza tempi di inattività. Aurora MySQL si riconnette automaticamente alla destinazione binlog e riprende la replica al termine del riavvio.

ZDP funziona anche in combinazione con i miglioramenti del riavvio in Aurora MySQL. L'applicazione di patch all'istanza database scrittore applica automaticamente le patch ai lettori contemporaneamente. Dopo aver applicato la patch, Aurora ripristina le connessioni sia sulle istanze DB dello scrittore che del lettore.

L'applicazione di patch senza tempi di inattività potrebbe non essere completata correttamente nelle condizioni seguenti:
+ Durante l'esecuzione di query o transazioni di lunga durata. Se Aurora è in grado di eseguire l’applicazione di patch senza tempi di inattività, qualsiasi transazione aperta è annullata, ma le relative connessioni vengono mantenute.
+ Sono in uso tabelle temporanee, blocchi utente temporanei e blocchi tabella temporanei, per esempio durante l’esecuzione di istruzioni DDL (Data Definition Language). Aurora interrompe queste connessioni.
+ Esistono modifiche ai parametri in attesa.

Se non è disponibile alcuna finestra temporale appropriata per l'esecuzione dell'applicazione di patch senza tempi di inattività a causa di una o più di queste condizioni, viene ripristinato il comportamento standard dell'applicazione delle patch.

Sebbene le connessioni rimangano intatte a seguito di un'operazione ZDP riuscita, alcune variabili e funzionalità vengono reinizializzate. I seguenti tipi di informazioni non vengono conservati tramite un riavvio causato da zero-downtime patching:
+ Variabili globali. Aurora ripristina le variabili di sessione, ma non ripristina le variabili globali dopo il riavvio.
+ Variabili di stato. In particolare, il valore di attività riportato dallo stato del motore viene ripristinato dopo un riavvio che utilizza i meccanismi ZDR o ZDP.
+ `LAST_INSERT_ID`.
+ Stato `auto_increment` in memoria per le tabelle. Lo stato di incremento automatico in memoria viene reinizializzato. Per ulteriori informazioni sui valori di incremento automatico, consulta il [Manuale di riferimento di MySQL](https://dev.mysql.com/doc/refman/5.7/en/innodb-auto-increment-handling.html#innodb-auto-increment-initialization).
+ Informazioni diagnostiche dalle tabelle `INFORMATION_SCHEMA` e `PERFORMANCE_SCHEMA`. Queste informazioni diagnostiche vengono visualizzate anche nell'output di comandi come `SHOW PROFILE` e `SHOW PROFILES`. 

Le seguenti attività relative a zero-downtime restart sono riportate nella pagina **Eventi**:
+ Tentativo di aggiornare il database senza tempi di inattività.
+ Tentativo di aggiornare il database senza tempi di inattività terminato. L'evento riporta quanto tempo è durato il processo. L'evento segnala inoltre quante connessioni sono state mantenute durante il riavvio e quante connessioni sono state interrotte. È possibile consultare il registro degli errori del database per visualizzare ulteriori dettagli su ciò che è successo durante il riavvio.

## Tecnica di aggiornamento alternativa blue/green
<a name="AuroraMySQL.UpgradingMinor.BlueGreen"></a>

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 di Amazon Blue/Green Aurora Deployments per gli aggiornamenti del database](blue-green-deployments.md).

# Aggiornamento della versione principale di un cluster di database Amazon Aurora MySQL
<a name="AuroraMySQL.Updates.MajorVersionUpgrade"></a><a name="mvu"></a>

In un numero di versione di Aurora MySQL come 3.04.1, il 3 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.

**Contents**
+ [Aggiornamento da Aurora MySQL versione 2 alla versione 3](#AuroraMySQL.Updates.MajorVersionUpgrade.2to3)
+ [Procedure di aggiornamento a una versione principale di Aurora MySQL](#AuroraMySQL.Upgrading.Compatibility)
+ [Come funziona l'aggiornamento della versione principale di Aurora MySQL in loco](#AuroraMySQL.Upgrading.Sequence)
+ [Pianificazione di un aggiornamento della versione principale per un cluster Aurora MySQL](#AuroraMySQL.Upgrading.Planning)
  + [Simulazione dell’aggiornamento mediante clonazione del cluster di database](#AuroraMySQL.Upgrading.Planning.clone)
  + [Distribuzioni blu/verdi](#AuroraMySQL.UpgradingMajor.BlueGreen)
+ [Controlli preliminari per gli aggiornamenti a versioni principali per Aurora MySQL](AuroraMySQL.upgrade-prechecks.md)
  + [Processo di controllo preliminare per Aurora MySQL](AuroraMySQL.upgrade-prechecks.md#AuroraMySQL.upgrade-prechecks.process)
  + [Formato dei log dei controlli preliminari per Aurora MySQL](AuroraMySQL.upgrade-prechecks.md#AuroraMySQL.upgrade-prechecks.log-format)
  + [Esempi di output di log dei controlli preliminari per Aurora MySQL](AuroraMySQL.upgrade-prechecks.md#AuroraMySQL.upgrade-prechecks.log-examples)
  + [Verifica preliminare delle prestazioni per Aurora MySQL](AuroraMySQL.upgrade-prechecks.md#AuroraMySQL.upgrade-prechecks.performance)
  + [Riepilogo dei controlli preliminari per l’aggiornamento di Community MySQL](AuroraMySQL.upgrade-prechecks.md#AuroraMySQL.upgrade-prechecks.community)
  + [Riepilogo dei controlli preliminari per l’aggiornamento di Aurora MySQL](AuroraMySQL.upgrade-prechecks.md#AuroraMySQL.upgrade-prechecks.ams)
  + [Informazioni di riferimento per le descrizioni dei controlli preliminari per Aurora MySQL](AuroraMySQL.upgrade-prechecks.descriptions.md)
    + [Errori](AuroraMySQL.upgrade-prechecks.descriptions.md#precheck-descriptions-errors)
      + [Controlli preliminari MySQL che restituiscono errori](AuroraMySQL.upgrade-prechecks.descriptions.md#precheck-descriptions-errors.mysql)
      + [Controlli preliminari Aurora MySQL che restituiscono errori](AuroraMySQL.upgrade-prechecks.descriptions.md#precheck-descriptions-errors.aurora)
    + [Avvisi](AuroraMySQL.upgrade-prechecks.descriptions.md#precheck-descriptions-warnings)
      + [Controlli preliminari MySQL che restituiscono avvisi](AuroraMySQL.upgrade-prechecks.descriptions.md#precheck-descriptions-warnings.mysql)
      + [Controlli preliminari Aurora MySQL che restituiscono avvisi](AuroraMySQL.upgrade-prechecks.descriptions.md#precheck-descriptions-warnings.aurora)
    + [Note](AuroraMySQL.upgrade-prechecks.descriptions.md#precheck-descriptions-notices)
    + [Errori, avvisi o notifiche](AuroraMySQL.upgrade-prechecks.descriptions.md#precheck-descriptions-all)
+ [Come eseguire un aggiornamento in loco](AuroraMySQL.Upgrading.Procedure.md)
  + [Come gli aggiornamenti in loco influiscono sui gruppi di parametri per un cluster](AuroraMySQL.Upgrading.Procedure.md#AuroraMySQL.Upgrading.ParamGroups)
  + [Modifiche delle proprietà del cluster tra versioni di Aurora MySQL](AuroraMySQL.Upgrading.Procedure.md#AuroraMySQL.Upgrading.Attrs)
  + [Principali aggiornamenti in loco per database globali](AuroraMySQL.Upgrading.Procedure.md#AuroraMySQL.Upgrading.GlobalDB)
  + [Aggiornamenti in loco per cluster di database con repliche di lettura tra Regioni](AuroraMySQL.Upgrading.Procedure.md#AuroraMySQL.Upgrading.XRRR)
+ [Esercitazione sull'aggiornamento in loco di Aurora MySQL](AuroraMySQL.Upgrading.Tutorial.md)
+ [Individuazione delle cause degli errori di aggiornamento a una versione principale di Aurora MySQL](AuroraMySQL.Upgrading.failure-events.md)
+ [Risoluzione dei problemi relativi all'aggiornamento in loco di Aurora MySQL](AuroraMySQL.Upgrading.Troubleshooting.md)
+ [Pulizia post-aggiornamento per Aurora MySQL versione 3](AuroraMySQL.mysql80-post-upgrade.md)
  + [Indici spaziali](AuroraMySQL.mysql80-post-upgrade.md#AuroraMySQL.mysql80-spatial)

## Aggiornamento da Aurora MySQL versione 2 alla versione 3
<a name="AuroraMySQL.Updates.MajorVersionUpgrade.2to3"></a>

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](#AuroraMySQL.Upgrading.Sequence).

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, puoi scegliere tra più tecniche di aggiornamento:
+ [Aggiornamento locale](AuroraMySQL.Upgrading.Procedure.md)
+ [Implementazione blu/verde](#AuroraMySQL.UpgradingMajor.BlueGreen)
+ [Ripristino da snapshot](aurora-restore-snapshot.md)
**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](AuroraMySQL.MySQL80.md).

Per informazioni dettagliate sulla pianificazione di un aggiornamento, consultare [Pianificazione di un aggiornamento della versione principale per un cluster Aurora MySQL](#AuroraMySQL.Upgrading.Planning) e [Come eseguire un aggiornamento in loco](AuroraMySQL.Upgrading.Procedure.md).

## Procedure di aggiornamento a una versione principale di Aurora MySQL
<a name="AuroraMySQL.Upgrading.Compatibility"></a>

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 Aurora MySQL, versione 2  |  Sì  |  L’aggiornamento in loco è supportato per i cluster Aurora MySQL compatibili con MySQL 5.7. Per informazioni sull’aggiornamento ad Aurora MySQL versione 3, consulta [Pianificazione di un aggiornamento della versione principale per un cluster Aurora MySQL](#AuroraMySQL.Upgrading.Planning) e [Come eseguire un aggiornamento in loco](AuroraMySQL.Upgrading.Procedure.md).  | 
|   Cluster con provisioning Aurora MySQL, versione 3  |  Non applicabile  |  Utilizza una procedura di aggiornamento della versione secondaria per eseguire l'aggiornamento tra le versioni di Aurora MySQL versione 3.  | 
|  Aurora Serverless v1 cluster   |  Non applicabile  |  Aurora Serverless v1 è supportato solo per Aurora MySQL versione 2.  | 
|  Aurora Serverless v2 cluster   |  Non applicabile  | 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](AuroraMySQL.Upgrading.Procedure.md) 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'`ModifyGlobalCluster`operazione anziché o. `modify-db-cluster` `ModifyDBCluster` È possibile eseguire un aggiornamento in loco da Aurora MySQL versione 2 alla versione 3 solo se il parametro `lower_case_table_names` è impostato sull’opzione predefinita e il database globale viene riavviato. Per ulteriori informazioni, consulta [Aggiornamenti di una versione principale](aurora-global-database-upgrade.md#aurora-global-database-upgrade.major).  | 
|  Cluster di query parallele  |  Sì  |  È possibile eseguire l'aggiornamento locale.  | 
|  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 funzionalità 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
<a name="AuroraMySQL.Upgrading.Sequence"></a>

 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](USER_Events.md). 

**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.  Prima di iniziare il processo di aggiornamento, Aurora esegue una serie di [controlli preliminari](AuroraMySQL.upgrade-prechecks.md). 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](AuroraMySQL.Upgrading.Troubleshooting.md). Se Aurora rileva condizioni che potrebbero rallentare l'aggiornamento, pianifica il monitoraggio dell'aggiornamento per un periodo prolungato. 

1.  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. 

1.  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. Questo snapshot rimane permanentemente (se necessario) fino a quando non viene eliminato. Al termine di tutti i test successivi all'aggiornamento, è possibile eliminare questo snapshot per ridurre al minimo i costi di storage.

1.  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. 

1.  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. 

1.  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. 

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

1.  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. 

## Pianificazione di un aggiornamento della versione principale per un cluster Aurora MySQL
<a name="AuroraMySQL.Upgrading.Planning"></a>

Per aiutarti a decidere il momento e l’approccio giusti per l’aggiornamento, puoi apprendere le differenze tra Aurora MySQL versione 3 e il tuo attuale ambiente:
+ Se si esegue la conversione da RDS per MySQL 8.0 o MySQL 8.0 Community Edition, consulta [Confronto tra Aurora MySQL versione 3 e MySQL 8.0 Community Edition](AuroraMySQL.Compare-80-v3.md).
+ Se si esegue l’aggiornamento da Aurora MySQL versione 2, RDS per MySQL 5.7 o dalla versione Community di MySQL 5.7, consulta [Confronto tra Aurora MySQL versione 2 e Aurora MySQL versione 3](AuroraMySQL.Compare-v2-v3.md). 
+ 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](AuroraMySQL.Compare-v2-v3.md#AuroraMySQL.mysql80-parameter-changes) 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](https://dev.mysql.com/doc/mysqld-version-reference/en/keywords-8-0.html#keywords-new-in-8-0) 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)](https://dev.mysql.com/doc/refman/8.0/en/upgrading-from-previous-series.html)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](AuroraMySQL.mysql80-post-upgrade.md). Infine, testare la funzionalità e le prestazioni dell'applicazione. 

Se si sta convertendo da RDS per MySQL o dalla versione Community di MySQL, segui la procedura di migrazione spiegata in [Migrazione di dati a un cluster di database Amazon Aurora MySQL](AuroraMySQL.Migrating.md). 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 di database 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 scoprire 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](AuroraMySQL.Upgrading.Procedure.md#AuroraMySQL.Upgrading.ParamGroups) Consultare anche [Modifiche delle proprietà del cluster tra versioni di Aurora MySQL](AuroraMySQL.Upgrading.Procedure.md#AuroraMySQL.Upgrading.Attrs).

Per informazioni sui problemi che si possono verificare durante l’aggiornamento, consulta [Risoluzione dei problemi relativi all'aggiornamento in loco di Aurora MySQL](AuroraMySQL.Upgrading.Troubleshooting.md). 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**  
L’aggiornamento in loco comporta l’arresto del cluster di database durante l’operazione. Aurora MySQL esegue un arresto pulito e completa le operazioni in sospeso, come l’eliminazione delle operazioni di undo. Un aggiornamento potrebbe richiedere molto tempo se ci sono molti record di undo da eliminare. Si consiglia di eseguire l’aggiornamento solo quando la lunghezza dell’elenco della cronologia (HLL) si riduce. Un valore generalmente accettabile per HLL è pari o inferiore a 100.000. Per ulteriori informazioni, consulta questo [post del blog](https://aws.amazon.com/blogs/database/amazon-aurora-mysql-version-2-with-mysql-5-7-compatibility-to-version-3-with-mysql-8-0-compatibility-upgrade-checklist-part-2).

### Simulazione dell’aggiornamento mediante clonazione del cluster di database
<a name="AuroraMySQL.Upgrading.Planning.clone"></a>

È 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](Aurora.Managing.Clone.md).

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

1. Esegui un aggiornamento in loco del cluster clonato. Segui la procedura riportata in [Come eseguire un aggiornamento in loco](AuroraMySQL.Upgrading.Procedure.md).

   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.

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

1. 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.

1. 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.

1. 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.

### Distribuzioni blu/verdi
<a name="AuroraMySQL.UpgradingMajor.BlueGreen"></a>

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 di Amazon Blue/Green Aurora Deployments per gli aggiornamenti del database](blue-green-deployments.md).

# Controlli preliminari per gli aggiornamenti a versioni principali per Aurora MySQL
<a name="AuroraMySQL.upgrade-prechecks"></a>

L’aggiornamento di MySQL da una versione principale a un’altra, ad esempio da MySQL 5.7 a MySQL 8.0, comporta alcune significative modifiche architetturali che richiedono un’attenta pianificazione e preparazione. A differenza degli aggiornamenti a versioni secondarie, in cui l’attenzione si concentra principalmente sull’aggiornamento del software del motore di database e in alcuni casi sulle tabelle di sistema, gli aggiornamenti principali di MySQL spesso introducono modifiche fondamentali al modo in cui il database archivia e gestisce i propri metadati.

Per aiutarti a identificare tali incompatibilità, durante l’aggiornamento da Aurora MySQL versione 2 alla versione 3, Aurora esegue automaticamente controlli di compatibilità degli aggiornamenti (controlli preliminari) per esaminare gli oggetti nel cluster di database e identificare le incompatibilità note che possono impedire il proseguimento dell’aggiornamento. Per informazioni dettagliate sui controlli preliminari di Aurora MySQL, consulta [Informazioni di riferimento per le descrizioni dei controlli preliminari per Aurora MySQL](AuroraMySQL.upgrade-prechecks.descriptions.md). I controlli preliminari di Aurora vengono eseguiti in aggiunta a quelli eseguiti dall’[utilità di controllo aggiornamenti](https://dev.mysql.com/doc/mysql-shell/8.0/en/mysql-shell-utilities-upgrade.html) di Community MySQL.

Questi controlli preliminari sono obbligatori. Non puoi scegliere di saltarli. I controlli preliminari offrono i seguenti vantaggi:
+ Possono ridurre la possibilità di incorrere in errori di aggiornamento che possono portare a tempi di inattività prolungati.
+ Se sono presenti incompatibilità, Amazon Aurora impedisce la prosecuzione dell’aggiornamento e fornisce un log per ottenere informazioni sulle stesse. Puoi quindi utilizzare il log per preparare il database per l’aggiornamento alla versione 3 risolvendo le incompatibilità. Per informazioni dettagliate sulla risoluzione delle incompatibilità, consulta l’argomento relativo alla [preparazione dell’installazione per l’aggiornamento](https://dev.mysql.com/doc/refman/8.0/en/upgrade-prerequisites.html) nella documentazione di MySQL e il post relativo alle [informazioni sull’aggiornamento a MySQL 8.0 di MySQL 8.0](https://dev.mysql.com/blog-archive/upgrading-to-mysql-8-0-here-is-what-you-need-to-know/) nel blog di MySQL Server.

  Per ulteriori informazioni sull’aggiornamento a MySQL 8.0, consulta [Upgrading MySQL](https://dev.mysql.com/doc/refman/8.0/en/upgrading.html) nella documentazione di MySQL.

I controlli preliminari vengono eseguiti prima che il cluster di database venga messo offline per l’aggiornamento alla versione principale. Se i controlli preliminari rilevano un’incompatibilità, Aurora annulla automaticamente l’aggiornamento prima che l’istanza database venga arrestata. 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](USER_Events.md).

Una volta completati i controlli preliminari, Aurora memorizza le informazioni dettagliate su ciascuna incompatibilità nel file `upgrade-prechecks.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](USER_LogAccess.Procedural.Viewing.md).

**Nota**  
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. Per ulteriori informazioni sulle considerazioni relative alle prestazioni del controllo preliminare, consulta [Processo di controllo preliminare per Aurora MySQL](#AuroraMySQL.upgrade-prechecks.process).

**Contents**
+ [Processo di controllo preliminare per Aurora MySQL](#AuroraMySQL.upgrade-prechecks.process)
+ [Formato dei log dei controlli preliminari per Aurora MySQL](#AuroraMySQL.upgrade-prechecks.log-format)
+ [Esempi di output di log dei controlli preliminari per Aurora MySQL](#AuroraMySQL.upgrade-prechecks.log-examples)
+ [Verifica preliminare delle prestazioni per Aurora MySQL](#AuroraMySQL.upgrade-prechecks.performance)
+ [Riepilogo dei controlli preliminari per l’aggiornamento di Community MySQL](#AuroraMySQL.upgrade-prechecks.community)
+ [Riepilogo dei controlli preliminari per l’aggiornamento di Aurora MySQL](#AuroraMySQL.upgrade-prechecks.ams)
+ [Informazioni di riferimento per le descrizioni dei controlli preliminari per Aurora MySQL](AuroraMySQL.upgrade-prechecks.descriptions.md)
  + [Errori](AuroraMySQL.upgrade-prechecks.descriptions.md#precheck-descriptions-errors)
    + [Controlli preliminari MySQL che restituiscono errori](AuroraMySQL.upgrade-prechecks.descriptions.md#precheck-descriptions-errors.mysql)
    + [Controlli preliminari Aurora MySQL che restituiscono errori](AuroraMySQL.upgrade-prechecks.descriptions.md#precheck-descriptions-errors.aurora)
  + [Avvisi](AuroraMySQL.upgrade-prechecks.descriptions.md#precheck-descriptions-warnings)
    + [Controlli preliminari MySQL che restituiscono avvisi](AuroraMySQL.upgrade-prechecks.descriptions.md#precheck-descriptions-warnings.mysql)
    + [Controlli preliminari Aurora MySQL che restituiscono avvisi](AuroraMySQL.upgrade-prechecks.descriptions.md#precheck-descriptions-warnings.aurora)
  + [Note](AuroraMySQL.upgrade-prechecks.descriptions.md#precheck-descriptions-notices)
  + [Errori, avvisi o notifiche](AuroraMySQL.upgrade-prechecks.descriptions.md#precheck-descriptions-all)

## Processo di controllo preliminare per Aurora MySQL
<a name="AuroraMySQL.upgrade-prechecks.process"></a>

Come descritto in precedenza, il processo di aggiornamento di Aurora MySQL prevede l’esecuzione di controlli di compatibilità (controlli preliminari) sul database prima di procedere all’aggiornamento a una versione principale.

Per gli aggiornamenti in loco, i controlli preliminari vengono eseguiti sull’istanza database di scrittura mentre è online. Se il controllo preliminare ha esito positivo, l’aggiornamento procede. Se vengono rilevati errori, vengono registrati i relativi log nel file `upgrade-prechecks.log` e l’aggiornamento viene annullato. Prima di tentare nuovamente l’aggiornamento, risolvi gli eventuali errori restituiti nel file `upgrade-prechecks.log`.

Per gli aggiornamenti con ripristino tramite snapshot, il controllo preliminare viene eseguito durante il processo di ripristino. In caso di esito positivo, il database verrà aggiornato alla nuova versione di Aurora MySQL. Se vengono rilevati errori, vengono registrati i relativi log nel file `upgrade-prechecks.log` e l’aggiornamento viene annullato. Prima di tentare nuovamente l’aggiornamento, risolvi gli eventuali errori restituiti nel file `upgrade-prechecks.log`.

Per ulteriori informazioni, consultare [Individuazione delle cause degli errori di aggiornamento a una versione principale di Aurora MySQL](AuroraMySQL.Upgrading.failure-events.md) e [Informazioni di riferimento per le descrizioni dei controlli preliminari per Aurora MySQL](AuroraMySQL.upgrade-prechecks.descriptions.md).

Per monitorare lo stato del controllo preliminare, puoi visualizzare i seguenti eventi nel cluster di database.


| Controllo preliminare dello stato | Messaggio di evento | Azione | 
| --- | --- | --- | 
|  Avviato  |  Preparazione dell’aggiornamento in corso: avvio dei controlli preliminari di aggiornamento online.  | Nessuno | 
|  Non riuscito  |  Il cluster di database si trova in uno stato che non consente l’aggiornamento: esito negativo dei controlli preliminari di aggiornamento. Per ulteriori dettagli, consulta il file upgrade-prechecks.log. Per ulteriori informazioni sulla risoluzione della causa dell’errore di aggiornamento, consulta [https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/AuroraMySQL.Aggiornamento.Risoluzione dei problemi.html](https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/AuroraMySQL.Upgrading.Troubleshooting.html)  |  Controlla `upgrade-prechecks.log` per verificare la presenza di eventuali errori.  Risolvi gli errori. Tenta di eseguire nuovamente l’aggiornamento.  | 
|  Riuscito  |  Preparazione dell’aggiornamento in corso: completamento dei controlli preliminari di aggiornamento online.  |  Il controllo preliminare ha avuto esito positivo e non sono stati restituiti errori. Controlla `upgrade-prechecks.log` per verificare la presenza di eventuali avvisi e notifiche.  | 

Per ulteriori informazioni sulla visualizzazione degli eventi, consulta [Visualizzazione di eventi Amazon RDS](USER_ListEvents.md).

## Formato dei log dei controlli preliminari per Aurora MySQL
<a name="AuroraMySQL.upgrade-prechecks.log-format"></a>

Una volta completati i controlli di compatibilità dell’aggiornamento (controlli preliminari), puoi esaminare il file `upgrade-prechecks.log`. Il file di log contiene i risultati, gli oggetti interessati e le informazioni di correzione per ogni controllo preliminare.

Gli errori bloccano l’aggiornamento. È necessario risolverli prima di tentare di eseguire nuovamente l’aggiornamento.

Gli avvisi e le notifiche hanno un livello meno critico, ma è comunque consigliabile esaminarli attentamente per assicurarsi che non vi siano problemi di compatibilità con il carico di lavoro dell’applicazione. Risolvi tempestivamente gli eventuali problemi identificati.

Il file di log presenta il formato seguente:
+ `targetVersion`: versione compatibile con MySQL dell’aggiornamento di Aurora MySQL.
+ `auroraServerVersion`: versione di Aurora MySQL su cui è stato eseguito il controllo preliminare.
+ `auroraTargetVersion`: versione di Aurora MySQL a cui stai effettuando l’aggiornamento.
+ `checksPerformed`: contiene l’elenco dei controlli preliminari eseguiti.
+ `id`: nome del controllo preliminare in esecuzione.
+ `title`: descrizione del controllo preliminare in esecuzione.
+ `status`: non indica se il controllo preliminare è riuscito o meno, ma mostra lo stato della query di controllo preliminare:
  + `OK`: query di controllo preliminare eseguita e completata correttamente.
  + `ERROR`: query di controllo preliminare non eseguita. Ciò può verificarsi a causa di problemi quali vincoli di risorse, riavvii imprevisti dell’istanza o interruzione della query per il controllo preliminare della compatibilità.

    Per ulteriori informazioni, consulta [questo esempio](#precheck-query-failed).
+ `description`: descrizione generale dell’incompatibilità e delle modalità per correggere l’errore.
+ `documentationLink`: link alla documentazione pertinente di Aurora MySQL o MySQL (ove applicabile). Per ulteriori informazioni, consulta [Informazioni di riferimento per le descrizioni dei controlli preliminari per Aurora MySQL](AuroraMySQL.upgrade-prechecks.descriptions.md).
+ `detectedProblems`: se il controllo preliminare restituisce un errore, un avviso o una notifica, mostra i dettagli dell’incompatibilità e degli oggetti incompatibili (ove applicabile):
  + `level`: livello dell’incompatibilità rilevata dal controllo preliminare. I livelli validi sono i seguenti:
    + `Error`: l’aggiornamento non può proseguire finché non viene risolta l’incompatibilità.
    + `Warning`: l’aggiornamento può proseguire, ma sono stati rilevati un oggetto, una sintassi o una configurazione obsoleti. Esamina attentamente gli avvisi e risolvili al più presto per evitare problemi nelle versioni future. 
    + `Notice`: l’aggiornamento può proseguire, ma sono stati rilevati un oggetto, una sintassi o una configurazione obsoleti. Esamina attentamente le notifiche e risolvile al più presto per evitare problemi nelle versioni future. 
  + `dbObject`: nome dell’oggetto del database in cui è stata rilevata l’incompatibilità.
  + `description`: descrizione dettagliata dell’incompatibilità e delle modalità per correggere l’errore.
+ `errorCount`: numero di errori di incompatibilità rilevati. Questi impediscono l’aggiornamento.
+ `warningCount`: numero di avvisi di incompatibilità rilevati. Questi non impediscono l’aggiornamento, ma occorre risolverli tempestivamente per evitare problemi nelle versioni future.
+ `noticeCount`: numero di notifiche di incompatibilità rilevate. Queste non impediscono l’aggiornamento, ma occorre risolverle tempestivamente per evitare problemi nelle versioni future.
+ `Summary`: riepilogo del numero di errori, avvisi e notifiche relativi alla compatibilità del controllo preliminare.

## Esempi di output di log dei controlli preliminari per Aurora MySQL
<a name="AuroraMySQL.upgrade-prechecks.log-examples"></a>

Gli esempi seguenti mostrano l’output del log dei controlli preliminari che potrebbe essere visualizzato. Per informazioni dettagliate sui controlli preliminari eseguiti, consulta [Informazioni di riferimento per le descrizioni dei controlli preliminari per Aurora MySQL](AuroraMySQL.upgrade-prechecks.descriptions.md).

**Stato di controllo preliminare OK, nessuna incompatibilità rilevata**  
La query di controllo preliminare è stata completata correttamente. Non sono state rilevate incompatibilità.  

```
{
  "id": "auroraUpgradeCheckIndexLengthLimitOnTinytext",
  "title": "Check for the tables with indexes defined with prefix length greater than 255 bytes on tiny text columns",
  "status": "OK",
  "detectedProblems": []
},
```

**Stato di controllo preliminare OK, errore rilevato**  
La query di controllo preliminare è stata completata correttamente. È stato rilevato un errore.  

```
{
  "id": "auroraUpgradeCheckForPrefixIndexOnGeometryColumns",
  "title": "Check for geometry columns on prefix indexes",
  "status": "OK",
  "description": "Consider dropping the prefix indexes of geometry columns and restart the upgrade.",
  "detectedProblems": [
      {
        "level": "Error",
        "dbObject": "test25.sbtest1",
        "description": "Table `test25`.`sbtest1` has an index `idx_t1` on geometry column/s. Mysql 8.0 does not support this type of index on a geometry column https://dev.mysql.com/worklog/task/?id=11808. To upgrade to MySQL 8.0, Run 'DROP INDEX `idx_t1` ON `test25`.`sbtest1`;"
      },
 }
```

**Stato di controllo preliminare OK, avviso rilevato**  
Gli avvisi possono essere restituiti quando un controllo preliminare ha esito positivo o negativo.  
Qui la query di controllo preliminare è stata completata correttamente. Sono stati rilevati due avvisi.  

```
{
  "id": "zeroDatesCheck",
  "title": "Zero Date, Datetime, and Timestamp values",
  "status": "OK",
  "description": "Warning: By default zero date/datetime/timestamp values are no longer allowed in MySQL, as of 5.7.8 NO_ZERO_IN_DATE and NO_ZERO_DATE are included in SQL_MODE by default. These modes should be used with strict mode as they will be merged with strict mode in a future release. If you do not include these modes in your SQL_MODE setting, you are able to insert date/datetime/timestamp values that contain zeros. It is strongly advised to replace zero values with valid ones, as they may not work correctly in the future.",
  "documentationLink": "https://lefred.be/content/mysql-8-0-and-wrong-dates/",
  "detectedProblems": [
      {
        "level": "Warning",
        "dbObject": "global.sql_mode",
        "description": "does not contain either NO_ZERO_DATE or NO_ZERO_IN_DATE which allows insertion of zero dates"
      },
      {
        "level": "Warning",
        "dbObject": "session.sql_mode",
        "description": " of 10 session(s) does not contain either NO_ZERO_DATE or NO_ZERO_IN_DATE which allows insertion of zero dates"
      }
    ]
}
```

**Stato di controllo preliminare ERRORE, nessuna incompatibilità segnalata**  
La query di controllo preliminare ha avuto esito negativo con un errore, quindi non è stato possibile verificare le incompatibilità.  

```
{
  "id": "auroraUpgradeCheckForDatafilePathInconsistency",
  "title": "Check for inconsistency related to ibd file path.",
  "status": "ERROR",
  "description": "Can't connect to MySQL server on 'localhost:3306' (111) at 13/08/2024 12:22:20 UTC. This failure can occur due to low memory available on the instance for executing upgrade prechecks. Please check 'FreeableMemory' Cloudwatch metric to verify the available memory on the instance while executing prechecks. If instance ran out of memory, we recommend to retry the upgrade on a higher instance class."
}
```
Questo errore può verificarsi a causa di un riavvio imprevisto dell’istanza o dell’interruzione di una query di controllo preliminare della compatibilità sul database durante l’esecuzione. Ad esempio, su classi di istanza database di dimensioni inferiori, questo problema potrebbe verificarsi quando la memoria disponibile nell’istanza si esaurisce.  
Puoi utilizzare il CloudWatch parametro `FreeableMemory` Amazon per verificare la memoria disponibile sull'istanza durante l'esecuzione dei precontrolli. Se l’istanza ha esaurito la memoria, si consiglia di tentare di eseguire nuovamente l’aggiornamento su una classe di istanza database di dimensioni maggiori. In alcuni casi, è possibile utilizzare un’[implementazione blu/verde](blue-green-deployments-overview.md). Ciò consente l’esecuzione di controlli preliminari e aggiornamenti sul cluster di database “verde” indipendentemente dal carico di lavoro di produzione, che consuma anche risorse di sistema.  
Per ulteriori informazioni, consulta [Risoluzione dei problemi di utilizzo della memoria per i database Aurora MySQL](ams-workload-memory.md).

**Riepilogo del controllo preliminare, sono stati rilevati un errore e tre avvisi**  
I controlli preliminari di compatibilità contengono anche informazioni sulle versioni di origine e di destinazione di Aurora MySQL, nonché un riepilogo del numero di errori, avvisi e notifiche alla fine dell’output dei controlli preliminari.  
Ad esempio, l’output seguente mostra che è stato effettuato un tentativo di aggiornamento da Aurora MySQL 2.11.6 ad Aurora MySQL 3.07.1. L’aggiornamento ha restituito un errore, tre avvisi e nessuna notifica. Poiché gli aggiornamenti non possono procedere quando viene restituito un errore, devi risolvere il problema di [routineSyntaxCheck](AuroraMySQL.upgrade-prechecks.descriptions.md#routineSyntaxCheck)compatibilità e riprovare l'aggiornamento.  

```
{
  "serverAddress": "/tmp%2Fmysql.sock",
  "serverVersion": "5.7.12 - MySQL Community Server (GPL)",
  "targetVersion": "8.0.36",
  "auroraServerVersion": "2.11.6",
  "auroraTargetVersion": "3.07.1",
  "outfilePath": "/rdsdbdata/tmp/PreChecker.log",
  "checksPerformed": [{
      ... output for each individual precheck ...
      .
      .
      {
        "id": "oldTemporalCheck",
        "title": "Usage of old temporal type",
        "status": "OK",
          "detectedProblems": []
      },
      {
        "id": "routinesSyntaxCheck",
        "title": "MySQL 8.0 syntax check for routine-like objects",
        "status": "OK",
        "description": "The following objects did not pass a syntax check with the latest MySQL 8.0 grammar. A common reason is that they reference names that conflict with new reserved keywords. You must update these routine definitions and `quote` any such references before upgrading.",
        "documentationLink": "https://dev.mysql.com/doc/refman/en/keywords.html",
        "detectedProblems": [{
            "level": "Error",
            "dbObject": "test.select_res_word",
            "description": "at line 2,18: unexpected token 'except'"
        }]
      },
      .
      .
      .
      {
        "id": "zeroDatesCheck",
        "title": "Zero Date, Datetime, and Timestamp values",
        "status": "OK",
        "description": "Warning: By default zero date/datetime/timestamp values are no longer allowed in MySQL, as of 5.7.8 NO_ZERO_IN_DATE and NO_ZERO_DATE are included in SQL_MODE by default. These modes should be used with strict mode as they will be merged with strict mode in a future release. If you do not include these modes in your SQL_MODE setting, you are able to insert date/datetime/timestamp values that contain zeros. It is strongly advised to replace zero values with valid ones, as they may not work correctly in the future.",
        "documentationLink": "https://lefred.be/content/mysql-8-0-and-wrong-dates/",
        "detectedProblems": [{
            "level": "Warning",
            "dbObject": "global.sql_mode",
            "description": "does not contain either NO_ZERO_DATE or NO_ZERO_IN_DATE which allows insertion of zero dates"
            },
            {
            "level": "Warning",
            "dbObject": "session.sql_mode",
            "description": " of 8 session(s) does not contain either NO_ZERO_DATE or NO_ZERO_IN_DATE which allows insertion of zero dates"
            }
          ]
       },
       .
       .
       .
  }],
  "errorCount": 1,
  "warningCount": 3,
  "noticeCount": 0,
  "Summary": "1 errors were found. Please correct these issues before upgrading to avoid compatibility issues."
}
```

## Verifica preliminare delle prestazioni per Aurora MySQL
<a name="AuroraMySQL.upgrade-prechecks.performance"></a>

I controlli preliminari di compatibilità vengono eseguiti prima della disconnessione dell’istanza database per l’aggiornamento, quindi in circostanze normali non determinano alcun tempo di inattività dell’istanza database durante l’esecuzione. Tuttavia, possono influire sul carico di lavoro dell’applicazione in esecuzione sull’istanza database di scrittura. I controlli preliminari accedono al dizionario dei dati tramite le tabelle [information\$1schema](https://dev.mysql.com/doc/mysql-infoschema-excerpt/5.7/en/information-schema-introduction.html), che possono subire rallentamenti se vi sono molti oggetti del database. Considera i fattori seguenti:
+ La durata del controllo preliminare varia in base al numero di oggetti del database come tabelle, colonne, routine e vincoli. L’esecuzione dei cluster di database con un numero elevato di oggetti può richiedere più tempo.

  Ad esempio, [removedFunctionsCheck](AuroraMySQL.upgrade-prechecks.descriptions.md#removedFunctionsCheck)può richiedere più tempo e utilizzare più risorse in base al numero di oggetti [archiviati](https://dev.mysql.com/doc/refman/5.7/en/stored-objects.html).
+ Per gli aggiornamenti in loco, l’utilizzo di una classe di istanza database di dimensioni maggiori (ad esempio, db.r5.24xlarge o db.r6g.16xlarge) può aiutare a completare l’aggiornamento più rapidamente utilizzando più CPU. È possibile ridurre le dimensioni dopo l’aggiornamento.
+ Le query su `information_schema` eseguite su più database possono subire rallentamenti, specialmente con molti oggetti e su istanze database di dimensioni inferiori. In questi casi, valuta la possibilità di eseguire la clonazione, il ripristino tramite snapshot o un’[implementazione blu/verde](blue-green-deployments-overview.md) per gli aggiornamenti.
+ L’utilizzo delle risorse (CPU, memoria) per il controllo preliminare può aumentare se il numero di oggetti aumenta, determinando tempi di esecuzione più lunghi su istanze database di dimensioni inferiori. In questi casi, prendi in considerazione la possibilità di eseguire test utilizzando la clonazione, il ripristino delle istantanee o una Blue/Green distribuzione per gli aggiornamenti.

  Se i controlli preliminari hanno esito negativo a causa della carenza di risorse, è possibile rilevare tale condizione nel log del controllo preliminare utilizzando l’output di stato:

  ```
  "status": "ERROR",
  ```

Per ulteriori informazioni, consultare [Come funziona l'aggiornamento della versione principale di Aurora MySQL in loco](AuroraMySQL.Updates.MajorVersionUpgrade.md#AuroraMySQL.Upgrading.Sequence) e [Pianificazione di un aggiornamento della versione principale per un cluster Aurora MySQL](AuroraMySQL.Updates.MajorVersionUpgrade.md#AuroraMySQL.Upgrading.Planning).

## Riepilogo dei controlli preliminari per l’aggiornamento di Community MySQL
<a name="AuroraMySQL.upgrade-prechecks.community"></a>

Di seguito è riportato un elenco generale delle incompatibilità tra MySQL 5.7 e 8.0:
+ Il cluster di database compatibile con MySQL 5.7 non deve utilizzare funzionalità che non sono supportate in MySQL 8.0.

  Per ulteriori informazioni, consulta [ Features Removed in MySQL 8.0](https://dev.mysql.com/doc/refman/8.0/en/mysql-nutshell.html#mysql-nutshell-removals) nella documentazione MySQL.
+ Non devono essere presenti violazioni di parole chiave o parole riservate. Alcune parole chiave, che non erano riservate in precedenza, possono essere riservate in MySQL 8.0.

  Per ulteriori informazioni, consulta [Keywords and Reserved Words](https://dev.mysql.com/doc/refman/8.0/en/keywords.html) 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)](https://dev.mysql.com/doc/refman/8.0/en/charset-unicode-utf8mb3.html) nella documentazione MySQL.
+ Non devono essere presenti tabelle InnoDB con un formato di riga non predefinito.
+ Non devono essere presenti attributi di tipo lunghezza `ZEROFILL` o `display`.
+ 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 essere presenti tabelle o stored procedure con singoli elementi di colonna `ENUM` o `SET` la cui lunghezza è superiore a 255 caratteri.
+ Non devono essere presenti partizioni di tabella che risiedono in tablespace InnoDB condivisi.
+ Non devono essere presenti riferimenti circolari nei percorsi dei file di dati del tablespace.
+ Non devono essere presenti definizioni di query e di programmi memorizzati che utilizzano qualificatori `ASC` o `DESC` per clausole `GROUP BY`.
+ Non devono essere presenti variabili di sistema rimosse e le variabili di sistema devono utilizzare i nuovi valori predefiniti per MySQL 8.0.
+ Non devono essere presenti valori di date, datetime o timestamp pari a zero (`0`).
+ Non devono essere presenti incoerenze di schema derivanti dalla rimozione o dal danneggiamento dei file.
+ Non devono essere presenti nomi di tabella contenenti la stringa di caratteri `FTS`.
+ Non devono essere presenti tabelle InnoDB appartenenti a un motore diverso.
+ Non devono essere presenti nomi di tabelle o schemi non validi per MySQL 5.7.

Per informazioni dettagliate sui controlli preliminari eseguiti, consulta [Informazioni di riferimento per le descrizioni dei controlli preliminari per Aurora MySQL](AuroraMySQL.upgrade-prechecks.descriptions.md).

Per ulteriori informazioni sull’aggiornamento a MySQL 8.0, consulta [Upgrading MySQL](https://dev.mysql.com/doc/refman/8.0/en/upgrading.html) nella documentazione di MySQL. Per una descrizione generale delle modifiche apportate in MySQL 8.0, consulta [What is new in MySQL 8.0](https://dev.mysql.com/doc/refman/8.0/en/mysql-nutshell.html) nella documentazione di MySQL.

## Riepilogo dei controlli preliminari per l’aggiornamento di Aurora MySQL
<a name="AuroraMySQL.upgrade-prechecks.ams"></a>

Aurora MySQL ha i propri requisiti specifici per l’aggiornamento dalla versione 2 alla versione 3, tra cui:
+ Non deve essere presente alcuna sintassi SQL obsoleta, ad esempio `SQL_CACHE`, `SQL_NO_CACHE` e `QUERY_CACHE` nelle viste, nelle routine, nei trigger e negli eventi.
+ Non deve essere presente alcuna colonna `FTS_DOC_ID` in nessuna tabella senza l’indice `FTS`.
+ Non deve essere presente alcuna mancata corrispondenza delle definizioni delle colonne tra il dizionario dei dati InnoDB e la definizione effettiva della tabella.
+ Tutti i nomi di database e tabelle devono avere lettere minuscole quando il parametro `lower_case_table_names` è impostato su `1`.
+ Trigger ed eventi non devono avere un definer mancante o vuoto oppure 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 essere presenti artefatti nei database correlati a queste funzionalità.
+ Le tabelle con il formato di riga `REDUNDANT` o `COMPACT` non possono avere indici di dimensioni superiori a 767 byte.
+ La lunghezza dei prefissi degli indici definiti nelle colonne di testo `tiny` non può superare i 255 byte. Con il set di caratteri `utf8mb4`, ciò limita la lunghezza dei prefissi supportata a 63 caratteri.

  Una lunghezza maggiore era consentita in MySQL 5.7 utilizzando il parametro `innodb_large_prefix`. Questo parametro è obsoleto in MySQL 8.0.
+ Non deve essere presente alcuna incoerenza di metadati InnoDB nella tabella `mysql.host`.
+ Non deve essere presente alcuna mancata corrispondenza tra i tipi di dati delle colonne nelle tabelle di sistema.
+ Non devono essere presenti transazioni XA nello stato `prepared`.
+ I nomi delle colonne nelle viste non possono contenere più di 64 caratteri.
+ I caratteri speciali nelle stored procedure non possono essere incoerenti.
+ Le tabelle non possono presentare incoerenze nei percorsi dei file di dati.

Per informazioni dettagliate sui controlli preliminari eseguiti, consulta [Informazioni di riferimento per le descrizioni dei controlli preliminari per Aurora MySQL](AuroraMySQL.upgrade-prechecks.descriptions.md).

# Informazioni di riferimento per le descrizioni dei controlli preliminari per Aurora MySQL
<a name="AuroraMySQL.upgrade-prechecks.descriptions"></a>

I controlli preliminari per l’aggiornamento per Aurora MySQL sono descritti qui in dettaglio.

**Contents**
+ [Errori](#precheck-descriptions-errors)
  + [Controlli preliminari MySQL che restituiscono errori](#precheck-descriptions-errors.mysql)
  + [Controlli preliminari Aurora MySQL che restituiscono errori](#precheck-descriptions-errors.aurora)
+ [Avvisi](#precheck-descriptions-warnings)
  + [Controlli preliminari MySQL che restituiscono avvisi](#precheck-descriptions-warnings.mysql)
  + [Controlli preliminari Aurora MySQL che restituiscono avvisi](#precheck-descriptions-warnings.aurora)
+ [Note](#precheck-descriptions-notices)
+ [Errori, avvisi o notifiche](#precheck-descriptions-all)

## Errori
<a name="precheck-descriptions-errors"></a>

In caso di esito negativo, i seguenti controlli preliminari generano errori e l’aggiornamento non può essere eseguito.

**Topics**
+ [Controlli preliminari MySQL che restituiscono errori](#precheck-descriptions-errors.mysql)
+ [Controlli preliminari Aurora MySQL che restituiscono errori](#precheck-descriptions-errors.aurora)

### Controlli preliminari MySQL che restituiscono errori
<a name="precheck-descriptions-errors.mysql"></a>

I seguenti controlli preliminari sono forniti da Community MySQL:
+ [checkTableMysqlSchema](#checkTableMysqlSchema)
+ [circularDirectoryCheck](#circularDirectoryCheck)
+ [columnsWhichCannotHaveDefaultsCheck](#columnsWhichCannotHaveDefaultsCheck)
+ [depreciatedSyntaxCheck](#depreciatedSyntaxCheck)
+ [engineMixupCheck](#engineMixupCheck)
+ [enumSetElementLengthCheck](#enumSetElementLengthCheck)
+ [foreignKeyLengthCheck](#foreignKeyLengthCheck)
+ [getDuplicateTriggers](#getDuplicateTriggers)
+ [getEventsWithNullDefiner](#getEventsWithNullDefiner)
+ [getMismatchedMetadata](#getMismatchedMetadata)
+ [getTriggersWithNullDefiner](#getTriggersWithNullDefiner)
+ [getValueOfVariablelower\$1case\$1table\$1names](#getValueOfVariable)
+ [groupByAscSyntaxCheck](#groupByAscSyntaxCheck)
+ [mysqlEmptyDotTableSyntaxCheck](#mysqlEmptyDotTableSyntaxCheck)
+ [mysqlIndexTooLargeCheck](#mysqlIndexTooLargeCheck)
+ [mysqlInvalid57NamesCheck](#mysqlInvalid57NamesCheck)
+ [mysqlOrphanedRoutinesCheck](#mysqlOrphanedRoutinesCheck)
+ [mysqlSchemaCheck](#mysqlSchemaCheck)
+ [nonNativePartitioningCheck](#nonNativePartitioningCheck)
+ [oldTemporalCheck](#oldTemporalCheck)
+ [partitionedTablesInSharedTablespaceCheck](#partitionedTablesInSharedTablespace)
+ [removedFunctionsCheck](#removedFunctionsCheck)
+ [routineSyntaxCheck](#routineSyntaxCheck)
+ [schemaInconsistencyCheck](#schemaInconsistencyCheck)

**checkTableMysqlSchema**  
**Livello di controllo preliminare: errore**  
**Problemi segnalati dal comando `check table x for upgrade` per lo schema `mysql`**  
Prima di iniziare l’aggiornamento ad Aurora MySQL versione 3, `check table for upgrade` viene eseguito su ogni tabella dello schema `mysql` dell’istanza database. Il comando `check table for upgrade` esamina le tabelle per individuare eventuali problemi che potrebbero verificarsi durante l’aggiornamento a una versione più recente di MySQL. L’esecuzione di questo comando prima di tentare un aggiornamento può aiutare a identificare e risolvere eventuali incompatibilità in anticipo, rendendo più agevole l’effettivo processo di aggiornamento.  
Questo comando esegue diversi controlli su ogni tabella, come i seguenti:  
+ Verifica della compatibilità della struttura della tabella e dei metadati con la versione MySQL di destinazione
+ Verifica della presenza di eventuali funzionalità obsolete o rimosse utilizzate dalla tabella
+ Garanzia che la tabella possa essere aggiornata correttamente senza perdita di dati
Per ulteriori informazioni, consulta [CHECK TABLE statement](https://dev.mysql.com/doc/refman/5.7/en/check-table.html) nella documentazione di MySQL.  
**Output di esempio:**  

```
{
  "id": "checkTableMysqlSchema",
  "title": "Issues reported by 'check table x for upgrade' command for mysql schema.",
  "status": "OK",
  "detectedProblems": []
}
```
L’output di questo controllo preliminare dipende dall’errore riscontrato e dal momento in cui si verifica l’errore, poiché `check table for upgrade` esegue più controlli.  
Se riscontri errori con questo controllo preliminare, apri un caso con il [Supporto AWS](https://aws.amazon.com/support) per richiedere che l’incoerenza dei metadati venga risolta. In alternativa, puoi tentare nuovamente l’aggiornamento eseguendo un dump logico, quindi effettuando il ripristino su un nuovo cluster di database Aurora MySQL versione 3.

**circularDirectoryCheck**  
**Livello di controllo preliminare: errore**  
**Riferimenti circolari alle directory nei percorsi dei file di dati del tablespace**  
A partire da [MySQL 8.0.17](https://dev.mysql.com/doc/relnotes/mysql/8.0/en/news-8-0-17.html), la clausola `CREATE TABLESPACE ... ADD DATAFILE` non consente più i riferimenti circolari alle directory. Per evitare problemi di aggiornamento, rimuovi tutti i riferimenti circolari alle directory dai percorsi dei file di dati del tablespace prima di eseguire l’aggiornamento ad Aurora MySQL versione 3.  
**Output di esempio:**  

```
{
  "id": "circularDirectory",
  "title": "Circular directory references in tablespace data file paths",
  "status": "OK",
  "description": "Error: Following tablespaces contain circular directory references (e.g. the reference '/../') in data file paths which as of MySQL 8.0.17 are not permitted by the CREATE TABLESPACE ... ADD DATAFILE clause. An exception to the restriction exists on Linux, where a circular directory reference is permitted if the preceding directory is a symbolic link. To avoid upgrade issues, remove any circular directory references from tablespace data file paths before upgrading.",
  "documentationLink": "https://dev.mysql.com/doc/refman/8.0/en/upgrading-from-previous-series.html#upgrade-innodb-changes",
  "detectedProblems": [
      {
        "level": "Error",
        "dbObject": "ts2",
        "description": "circular reference in datafile path: '/home/ec2-user/dbdata/mysql_5_7_44/../ts2.ibd'",
        "dbObjectType": "Tablespace"
      }
  ]
}
```
[Se ricevi questo errore, crea nuovamente le tabelle utilizzando un tablespace file-per-table](https://dev.mysql.com/doc/refman/8.0/en/innodb-file-per-table-tablespaces.html). Utilizza i percorsi di file predefiniti per tutti i tablespace e le definizioni delle tabelle.  
Aurora MySQL non supporta i tablespace o i comandi `CREATE TABLESPACE` generici.  
Prima di creare nuovamente i tablespace, consulta le [operazioni Online DDL](https://dev.mysql.com/doc/refman/5.7/en/innodb-online-ddl-operations.html) nella documentazione di MySQL per comprendere gli effetti del blocco e dello spostamento dei dati sulle transazioni in primo piano.
Una volta creati nuovamente i tablespace, il controllo preliminare viene superato e l’aggiornamento può procedere.  

```
{
  "id": "circularDirectoryCheck",
  "title": "Circular directory references in tablespace data file paths",
  "status": "OK",
  "detectedProblems": []
},
```

**columnsWhichCannotHaveDefaultsCheck**  
**Livello di controllo preliminare: errore**  
**Colonne che non possono avere valori predefiniti**  
Prima di MySQL 8.0.13, le colonne `BLOB`, `TEXT`, `GEOMETRY` e `JSON` non possono avere [valori predefiniti](https://dev.mysql.com/doc/refman/5.7/en/data-type-defaults.html). Rimuovi tutte le clausole predefinite in queste colonne prima dell’aggiornamento ad Aurora MySQL versione 3. Per ulteriori informazioni sulle modifiche alla gestione predefinita per questi tipi di dati, consulta [Data type default values](https://dev.mysql.com/doc/refman/8.0/en/data-type-defaults.html) nella documentazione di MySQL.  
**Output di esempio:**  

```
{
  "id": "columnsWhichCannotHaveDefaultsCheck",
  "title": "Columns which cannot have default values",
  "status": "OK",
  "description": "Error: The following columns are defined as either BLOB, TEXT, GEOMETRY or JSON and have a default value set. These data types cannot have default values in MySQL versions prior to 8.0.13, while starting with 8.0.13, the default value must be specified as an expression. In order to fix this issue, please use the ALTER TABLE ... ALTER COLUMN ... DROP DEFAULT statement.",
  "documentationLink": "https://dev.mysql.com/doc/refman/8.0/en/data-type-defaults.html#data-type-defaults-explicit",
  "detectedProblems": [
      {
        "level": "Error",
        "dbObject": "test.test_blob_default.geo_col",
        "description": "geometry"
      }
  ]
},
```
Il controllo preliminare restituisce un errore perché la colonna `geo_col` della tabella `test.test_blob_default` utilizza un tipo di dati `BLOB`, `TEXT`, `GEOMETRY`, o `JSON` con un valore predefinito specificato.  
Guardando la definizione della tabella, possiamo vedere che la colonna `geo_col` è definita come `geo_col geometry NOT NULL default ''`.  

```
mysql> show create table test_blob_default\G
*************************** 1. row ***************************
       Table: test_blob_default
Create Table: CREATE TABLE `test_blob_default` (
  `geo_col` geometry NOT NULL DEFAULT ''
) ENGINE=InnoDB DEFAULT CHARSET=latin1
```
Rimuovi questa clausola predefinita per consentire il superamento del controllo preliminare.  
Prima di eseguire le istruzioni `ALTER TABLE` o creare nuovamente i tablespace, consulta le [operazioni Online DDL](https://dev.mysql.com/doc/refman/5.7/en/innodb-online-ddl-operations.html) nella documentazione di MySQL per comprendere gli effetti del blocco e dello spostamento dei dati sulle transazioni in primo piano.

```
mysql> ALTER TABLE test_blob_default modify COLUMN geo_col geometry NOT NULL;
Query OK, 0 rows affected (0.02 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> show create table test_blob_default\G
*************************** 1. row ***************************
       Table: test_blob_default
Create Table: CREATE TABLE `test_blob_default` (
  `geo_col` geometry NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1
1 row in set (0.00 sec)
```
Il controllo preliminare viene superato e puoi tentare nuovamente di eseguire l’aggiornamento.  

```
{
  "id": "columnsWhichCannotHaveDefaultsCheck",
  "title": "Columns which cannot have default values",
  "status": "OK",
  "detectedProblems": []
},
```

**depreciatedSyntaxCheck**  
**Livello di controllo preliminare: errore**  
**Utilizzo di parole chiave obsolete nella definizione**  
MySQL 8.0 ha rimosso la [cache delle query](https://dev.mysql.com/doc/refman/5.7/en/query-cache.html). Di conseguenza, è stata rimossa una parte della sintassi SQL specifica della cache delle query. Se uno qualsiasi degli oggetti del database contiene le parole chiave `QUERY CACHE`, `SQL_CACHE` o `SQL_NO_CACHE`, viene restituito un errore di controllo preliminare. Per risolvere il problema, crea nuovamente gli oggetti rimuovendo le parole chiave menzionate.  
**Output di esempio:**  

```
{
  "id": "depreciatedSyntaxCheck",
  "title": "Usage of depreciated keywords in definition",
  "status": "OK",
  "description": "Error: The following DB objects contain keywords like 'QUERY CACHE', 'SQL_CACHE', 'SQL_NO_CACHE' which are not supported in major version 8.0. It is recommended to drop these DB objects or rebuild without any of the above keywords before upgrade.",
  "detectedProblems": [
      {
"level": "Error",
"dbObject": "test.no_query_cache_check",
"description": "PROCEDURE uses depreciated words in definition"
      }
  ]
}
```
Il controllo preliminare segnala che la stored procedure `test.no_query_cache_check` utilizza una delle parole chiave rimosse. Guardando la definizione della procedura, possiamo vedere che utilizza `SQL_NO_CACHE`.  

```
mysql> show create procedure test.no_query_cache_check\G
*************************** 1. row ***************************
           Procedure: no_query_cache_check
            sql_mode:
    Create Procedure: CREATE DEFINER=`reinvent`@`%` PROCEDURE `no_query_cache_check`()
BEGIN
    SELECT SQL_NO_CACHE k from sbtest1 where id > 10 and id < 20 group by k asc;
END
character_set_client: utf8mb4
collation_connection: utf8mb4_0900_ai_ci
  Database Collation: latin1_swedish_ci
1 row in set (0.00 sec)
```
Rimuovi la parola chiave.  

```
mysql> drop procedure test.no_query_cache_check;
Query OK, 0 rows affected (0.01 sec)

mysql> delimiter //

mysql> CREATE DEFINER=`reinvent`@`%` PROCEDURE `no_query_cache_check`() BEGIN     SELECT k from sbtest1 where id > 10 and id < 20 group by k asc; END//
Query OK, 0 rows affected (0.00 sec)

mysql> delimiter ;
```
Dopo aver rimosso la parola chiave, il controllo preliminare viene completato correttamente.  

```
{
  "id": "depreciatedSyntaxCheck",
  "title": "Usage of depreciated keywords in definition",
  "status": "OK",
  "detectedProblems": []
}
```

**engineMixupCheck**  
**Livello di controllo preliminare: errore**  
**Tabelle riconosciute da InnoDB che appartengono a un motore diverso**  
In modo analogo a [schemaInconsistencyCheck](#schemaInconsistencyCheck), questo controllo preliminare verifica che i metadati delle tabelle in MySQL siano coerenti prima di procedere con l’aggiornamento.   
Se riscontri errori con questo controllo preliminare, apri un caso con il [Supporto AWS](https://aws.amazon.com/support) per richiedere che l’incoerenza dei metadati venga risolta. In alternativa, puoi tentare nuovamente l’aggiornamento eseguendo un dump logico, quindi effettuando il ripristino su un nuovo cluster di database Aurora MySQL versione 3.  
**Output di esempio:**  

```
{
  "id": "engineMixupCheck",
  "title": "Tables recognized by InnoDB that belong to a different engine",
  "status": "OK",
  "description": "Error: Following tables are recognized by InnoDB engine while the SQL layer believes they belong to a different engine. Such situation may happen when one removes InnoDB table files manually from the disk and creates e.g. a MyISAM table with the same name.\n\nA possible way to solve this situation is to e.g. in case of MyISAM table:\n\n1. Rename the MyISAM table to a temporary name (RENAME TABLE).\n2. Create some dummy InnoDB table (its definition does not need to match), then copy (copy, not move) and rename the dummy .frm and .ibd files to the orphan name using OS file commands.\n3. The orphan table can be then dropped (DROP TABLE), as well as the dummy table.\n4. Finally the MyISAM table can be renamed back to its original name.",
  "detectedProblems": [
      {
        "level": "Error",
        "dbObject": "mysql.general_log_backup",
        "description": "recognized by the InnoDB engine but belongs to CSV"
      }
  ]
}
```

**enumSetElementLengthCheck**  
**Livello di controllo preliminare: errore**  
**Definizioni delle colonne `ENUM` e `SET` che contengono elementi con più di 255 caratteri**  
Le tabelle e le stored procedure non devono contenere elementi colonna `ENUM` o `SET` con più di 255 caratteri o 1020 byte. Prima di MySQL 8.0, la lunghezza massima combinata era di 64K, ma la versione 8.0 limita i singoli elementi a 255 caratteri o 1020 byte (con supporto per i multibyte). Se si verifica un errore di controllo preliminare per `enumSetElementLengthCheck`, modifica tutti gli elementi che superano i nuovi limiti prima di tentare di eseguire nuovamente l’aggiornamento.  
**Output di esempio:**  

```
{
  "id": "enumSetElementLengthCheck",
  "title": "ENUM/SET column definitions containing elements longer than 255 characters",
  "status": "OK",
  "description": "Error: The following columns are defined as either ENUM or SET and contain at least one element longer that 255 characters. They need to be altered so that all elements fit into the 255 characters limit.",
  "documentationLink": "https://dev.mysql.com/doc/refman/8.0/en/string-type-overview.html",
  "detectedProblems": [
      {
        "level": "Error",
        "dbObject": "test.large_set.s",
        "description": "SET contains element longer than 255 characters"
      }
  ]
},
```
Il controllo preliminare segnala un errore perché la colonna `s` della tabella `test.large_set` contiene un elemento `SET` con più di 255 caratteri.  
Dopo aver ridotto le dimensioni `SET` di questa colonna, il controllo preliminare viene eseguito e l’aggiornamento può continuare.  

```
{
  "id": "enumSetElementLenghtCheck",
  "title": "ENUM/SET column definitions containing elements longer than 255 characters",
  "status": "OK",
  "detectedProblems": []
},
```

**foreignKeyLengthCheck**  
**Livello di controllo preliminare: errore**  
**Nomi di vincoli di chiave esterna con più di 64 caratteri**  
In MySQL, la lunghezza degli identificatori è limitata a 64 caratteri, come indicato nella [documentazione di MySQL](https://dev.mysql.com/doc/refman/8.0/en/identifier-length.html). A causa dei [problemi](https://bugs.mysql.com/bug.php?id=88118) identificati per cui la lunghezza delle chiavi esterne poteva essere uguale o superiore a questo valore, con conseguenti errori di aggiornamento, è stato implementato questo controllo preliminare. Se si verificano errori con questo controllo preliminare, è necessario [modificare o rinominare](https://dev.mysql.com/doc/refman/8.0/en/alter-table.html) il vincolo interessato in modo che sia inferiore a 64 caratteri prima di tentare di eseguire nuovamente l’aggiornamento.  
**Output di esempio:**  

```
{
  "id": "foreignKeyLength",
  "title": "Foreign key constraint names longer than 64 characters",
  "status": "OK",
  "detectedProblems": []
}
```

**getDuplicateTriggers**  
**Livello di controllo preliminare: errore**  
**Tutti i nomi dei trigger in un database devono essere univoci.**  
A causa delle modifiche nell’implementazione del dizionario dei dati, MySQL 8.0 non supporta i trigger con distinzione tra maiuscole e minuscole all’interno di un database. Questo controllo preliminare verifica che il cluster di database non disponga di uno o più database contenenti trigger duplicati. Per ulteriori informazioni, consulta [Identifier case sensitivity](https://dev.mysql.com/doc/refman/8.0/en/identifier-case-sensitivity.html) nella documentazione di MySQL.  
**Output di esempio:**  

```
{
  "id": "getDuplicateTriggers",
  "title": "MySQL pre-checks that all trigger names in a database are unique or not.",
  "status": "OK",
  "description": "Error: You have one or more database containing duplicate triggers. Mysql 8.0 does not support case sensitive triggers within a database https://dev.mysql.com/doc/refman/8.0/en/identifier-case-sensitivity.html. To upgrade to MySQL 8.0, drop the triggers with case-insensitive duplicate names and recreate with distinct names.",
  "detectedProblems": [
      {
        "level": "Error",
        "dbObject": "test",
        "description": "before_insert_product"
      },
      {
        "level": "Error",
        "dbObject": "test",
        "description": "before_insert_PRODUCT"
      }
  ]
}
```
Il controllo preliminare segnala un errore per cui il cluster di database ha due trigger con lo stesso nome, ma che utilizzano lettere maiuscole e minuscole diverse: `test.before_insert_product` e `test.before_insert_PRODUCT`.  
Prima dell’aggiornamento, rinomina i trigger o eliminali e creali di nuovo con un nuovo nome.  
Dopo la ridenominazione di `test.before_insert_PRODUCT` in `test.before_insert_product_2`, il controllo preliminare ha esito positivo.  

```
{
  "id": "getDuplicateTriggers",
  "title": "MySQL pre-checks that all trigger names in a database are unique or not.",
  "status": "OK",
  "detectedProblems": []
}
```

**getEventsWithNullDefiner**  
**Livello di controllo preliminare: errore**  
**La colonna definer per `mysql.event` non può essere nulla o vuota.**  
L’attributo `DEFINER` specifica l’account MySQL che possiede una definizione di oggetto memorizzato, come un trigger, una stored procedure o un evento. Questo attributo è particolarmente utile in situazioni in cui si desidera controllare il contesto di sicurezza in cui viene eseguito l’oggetto memorizzato. Quando si crea un oggetto memorizzato, se non è specificato un `DEFINER`, l’impostazione predefinita è l’utente che ha creato l’oggetto.  
Quando si esegue l’aggiornamento a MySQL 8.0, non è possibile avere oggetti memorizzati che abbiano un definer `null` o vuoto nel dizionario dei dati di MySQL. Se si dispone di tali oggetti memorizzati, viene generato un errore di controllo preliminare. È necessario correggerlo prima di procedere con l’aggiornamento.  
Esempio di errore:  

```
{
  "id": "getEventsWithNullDefiner",
  "title": "The definer column for mysql.event cannot be null or blank.",
  "status": "OK",
  "description": "Error: Set definer column in mysql.event to a valid non-null definer.",
  "detectedProblems": [
      {
        "level": "Error",
        "dbObject": "test.get_version",
        "description": "Set definer for event get_version in Schema test"
      }
  ]
}
```
Il controllo preliminare restituisce un errore per l’[evento](https://dev.mysql.com/doc/refman/5.7/en/events-overview.html) `test.get_version` perché ha un definer `null`.  
Per risolvere questo problema puoi controllare la definizione dell’evento. Come puoi vedere, il definer è `null` o vuoto.  

```
mysql> select db,name,definer from mysql.event where name='get_version';
+------+-------------+---------+
| db   | name        | definer |
+------+-------------+---------+
| test | get_version |         |
+------+-------------+---------+
1 row in set (0.00 sec)
```
Elimina o crea nuovamente l’evento con un definer valido.  
Prima di eliminare o ridefinire un `DEFINER`, esamina e controlla attentamente i requisiti dell’applicazione e dei privilegi. Per ulteriori informazioni, consulta [Stored object access control](https://dev.mysql.com/doc/refman/5.7/en/stored-objects-security.html) nella documentazione di MySQL.

```
mysql> drop event test.get_version;
Query OK, 0 rows affected (0.00 sec)

mysql> DELIMITER ;
mysql> delimiter $$
mysql> CREATE EVENT get_version
    ->     ON SCHEDULE
    ->       EVERY 1 DAY
    ->     DO
    ->      ///DO SOMETHING //
    -> $$
Query OK, 0 rows affected (0.01 sec)

mysql> DELIMITER ;

mysql> select db,name,definer from mysql.event where name='get_version';
+------+-------------+------------+
| db   | name        | definer    |
+------+-------------+------------+
| test | get_version | reinvent@% |
+------+-------------+------------+
1 row in set (0.00 sec)
```
Ora il controllo preliminare viene superato.  

```
{
  "id": "getEventsWithNullDefiner",
  "title": "The definer column for mysql.event cannot be null or blank.",
  "status": "OK",
  "detectedProblems": []},
```

**getMismatchedMetadata**  
**Livello di controllo preliminare: errore**  
**Mancata corrispondenza delle definizioni delle colonne tra il dizionario dei dati InnoDB e la definizione effettiva della tabella**  
In modo analogo a [schemaInconsistencyCheck](#schemaInconsistencyCheck), questo controllo preliminare verifica che i metadati delle tabelle in MySQL siano coerenti prima di procedere con l’aggiornamento. In questo caso, il controllo preliminare verifica che le definizioni delle colonne corrispondano tra il dizionario dei dati InnoDB e la definizione della tabella MySQL. Se viene rilevata una mancata corrispondenza, l’aggiornamento non procede.  
Se riscontri errori con questo controllo preliminare, apri un caso con il [Supporto AWS](https://aws.amazon.com/support) per richiedere che l’incoerenza dei metadati venga risolta. In alternativa, puoi tentare nuovamente l’aggiornamento eseguendo un dump logico, quindi effettuando il ripristino su un nuovo cluster di database Aurora MySQL versione 3.  
**Output di esempio:**  

```
{
  "id": "getMismatchedMetadata",
  "title": "Column definition mismatch between InnoDB Data Dictionary and actual table definition.",
  "status": "OK",
  "description": "Error: Your database has mismatched metadata. The upgrade to mysql 8.0 will not succeed until this is fixed.",
  "detectedProblems": [
      {
        "level": "Error",
        "dbObject": "test.mismatchTable",
        "description": "Table `test/mismatchTable` column names mismatch with InnoDb dictionary column names: iD <> id"
      }
  ]
}
```
Il controllo preliminare segnala una mancata corrispondenza nei metadati per la colonna `id` della tabella `test.mismatchTable`. In particolare, i metadati MySQL hanno il nome della colonna `iD`, mentre InnoDB ha il nome `id`.

**getTriggersWithNullDefiner**  
**Livello di controllo preliminare: errore**  
**La colonna definer per `information_schema.triggers` non può essere `null` o vuota.**  
Il controllo preliminare verifica che il database non abbia trigger definiti con definer `null` o vuoti. Per ulteriori informazioni sui requisiti del definer per gli oggetti memorizzati, consulta [getEventsWithNullDefiner](#getEventsWithNullDefiner).  
**Output di esempio:**  

```
{
  "id": "getTriggersWithNullDefiner",
  "title": "The definer column for information_schema.triggers cannot be null or blank.",
  "status": "OK",
  "detectedProblems": [
      {
        "level": "Error",
        "dbObject": "test.example_trigger",
        "description": "Set definer for trigger example_trigger in Schema test"
      }
  ]
}
```
Il controllo preliminare restituisce un errore perché il trigger `example_trigger` nello schema `test` ha un definer `null`. Per risolvere questo problema, correggi il definer creando nuovamente il trigger con un utente valido oppure elimina il trigger. Per ulteriori informazioni, consulta l’esempio in [getEventsWithNullDefiner](#getEventsWithNullDefiner).  
Prima di eliminare o ridefinire un `DEFINER`, esamina e controlla attentamente i requisiti dell’applicazione e dei privilegi. Per ulteriori informazioni, consulta [Stored object access control](https://dev.mysql.com/doc/refman/5.7/en/stored-objects-security.html) nella documentazione di MySQL.

**getValueOfVariablelower\$1case\$1table\$1names**  
**Livello di controllo preliminare: errore**  
**Tutti i nomi di database o tabelle devono avere lettere minuscole quando il parametro `lower_case_table_names` è impostato su `1`.**  
Prima di MySQL 8.0, i nomi dei database, i nomi delle tabelle e altri oggetti corrispondevano ai file nella directory dei dati, come i metadati basati su file (.frm). La variabile di sistema [lower\$1case\$1table\$1names](https://dev.mysql.com/doc/refman/5.7/en/identifier-case-sensitivity.html) consente di controllare il modo in cui il server gestisce la distinzione tra maiuscole e minuscole degli identificatori per gli oggetti del database e l’archiviazione di tali oggetti di metadati. Questo parametro può essere modificato su un server già inizializzato dopo un riavvio.  
Tuttavia, in MySQL 8.0, sebbene questo parametro controlli ancora il modo in cui il server gestisce la distinzione tra maiuscole e minuscole degli identificatori, non può essere modificato dopo l’inizializzazione del dizionario dei dati. Quando si aggiorna o si crea un database MySQL 8.0, il valore impostato per `lower_case_table_names` al primo avvio del dizionario dei dati su MySQL viene utilizzato per tutta la durata del database. Questa restrizione è stata messa in atto nell’ambito dell’implementazione di [Atomic Data Dictionary](https://dev.mysql.com/doc/refman/8.0/en/data-dictionary-file-removal.html), in cui viene eseguita la migrazione degli oggetti del database dai metadati basati su file alle tabelle InnoDB interne dello schema `mysql`.  
Per ulteriori informazioni, consulta [Data dictionary changes](https://dev.mysql.com/doc/refman/8.0/en/upgrading-from-previous-series.html#upgrade-data-dictionary-changes) nella documentazione di MySQL.  
Per evitare problemi durante l’aggiornamento mentre si aggiornano i metadati basati su file al nuovo Atomic Data Dictionary, questo controllo preliminare verifica che quando `lower_case_table_names = 1` tutte le tabelle vengano memorizzate su disco in lettere minuscole. In caso contrario, viene restituito un errore di controllo preliminare ed è necessario correggere i metadati prima di procedere con l’aggiornamento.  
**Output di esempio:**  

```
{
  "id": "getValueOfVariablelower_case_table_names",
  "title": "MySQL pre-checks that all database or table names are lowercase when the lower_case_table_names parameter is set to 1.",
  "status": "OK",
  "description": "Error: You have one or more databases or tables with uppercase letters in the names, but the lower_case_table_names parameter is set to 1. To upgrade to MySQL 8.0, either change all database or table names to lowercase, or set the parameter to 0.",
  "detectedProblems": [
      {
        "level": "Error",
        "dbObject": "test.TEST",
        "description": "Table test.TEST contains one or more capital letters in name while lower_case_table_names = 1"
      }
  ]
}
```
Viene restituito un errore perché la tabella `test.TEST` contiene lettere maiuscole, ma `lower_case_table_names` è impostato su `1`.  
Per risolvere questo problema, è possibile rinominare la tabella utilizzando lettere minuscole o modificare il parametro `lower_case_table_names` nel cluster di database prima di iniziare l’aggiornamento.  
Verifica ed esamina attentamente la documentazione sulla [distinzione tra maiuscole e minuscole](https://dev.mysql.com/doc/refman/5.7/en/identifier-case-sensitivity.html) in MySQL e scopri come tali modifiche potrebbero influire sulla tua applicazione.  
Consulta anche la documentazione di MySQL 8.0 che spiega come i [lower\$1case\$1table\$1names](https://dev.mysql.com/doc/refman/8.0/en/server-system-variables.html#sysvar_lower_case_table_names) vengono gestiti in modo diverso in MySQL 8.0.

**groupByAscSyntaxCheck**  
**Livello di controllo preliminare: errore**  
**Utilizzo della sintassi `GROUP BY ASC/DESC` rimossa**  
A partire da MySQL 8.0.13, la sintassi `ASC` o `DESC` obsoleta per le clausole `GROUP BY` è stata rimossa. Le query che si basano sull’ordinamento `GROUP BY` potrebbero ora produrre risultati diversi. Per ottenere un ordinamento specifico, utilizza invece una clausola `ORDER BY`. Se nel database sono presenti oggetti che utilizzano questa sintassi, è necessario crearli nuovamente utilizzando una clausola `ORDER BY` prima di tentare di eseguire di nuovo l’aggiornamento. Per ulteriori informazioni, consulta [SQL changes](https://dev.mysql.com/doc/refman/8.0/en/upgrading-from-previous-series.html#upgrade-sql-changes) nella documentazione di MySQL.  
**Output di esempio:**  

```
{
  "id": "groupbyAscSyntaxCheck",
  "title": "Usage of removed GROUP BY ASC/DESC syntax",
  "status": "OK",
  "description": "Error: The following DB objects use removed GROUP BY ASC/DESC syntax. They need to be altered so that ASC/DESC keyword is removed from GROUP BY clause and placed in appropriate ORDER BY clause.",
  "documentationLink": "https://dev.mysql.com/doc/relnotes/mysql/8.0/en/news-8-0-13.html#mysqld-8-0-13-sql-syntax",
  "detectedProblems": [
      {
        "level": "Error",
        "dbObject": "test.groupbyasc",
        "description": "PROCEDURE uses removed GROUP BY ASC syntax",
        "dbObjectType": "Routine"
      }
  ]
}
```

**mysqlEmptyDotTableSyntaxCheck**  
**Livello di controllo preliminare: errore**  
**Verifica la presenza di una sintassi `.<table>` obsoleta utilizzata nelle routine.**  
In MySQL 8.0, le routine non possono più contenere la sintassi dell’identificatore obsoleta (`\".<table>\"`). Se alcune routine o trigger memorizzati contengono tali identificatori, l’aggiornamento non riesce. Ad esempio, il seguente riferimento `.dot_table` non è più consentito:  

```
mysql> show create procedure incorrect_procedure\G
*************************** 1. row ***************************
           Procedure: incorrect_procedure
            sql_mode:
    Create Procedure: CREATE DEFINER=`reinvent`@`%` PROCEDURE `incorrect_procedure`()
BEGIN delete FROM .dot_table; select * from .dot_table where 1=1; END
character_set_client: utf8mb4
collation_connection: utf8mb4_0900_ai_ci
  Database Collation: latin1_swedish_ci
1 row in set (0.00 sec)
```
Dopo aver creato nuovamente le routine e i trigger per utilizzare la sintassi dell’identificatore e l’escape corretti, il controllo preliminare viene superato e l’aggiornamento può procedere. Per ulteriori informazioni, consulta [Schema object names](https://dev.mysql.com/doc/refman/8.0/en/identifiers.html) nella documentazione di MySQL.  
**Output di esempio:**  

```
{
  "id": "mysqlEmptyDotTableSyntaxCheck",
  "title": "Check for deprecated '.<table>' syntax used in routines.",
  "status": "OK",
  "description": "Error: The following routines contain identifiers in deprecated identifier syntax (\".<table>\"), and should be corrected before upgrade:\n",
  "detectedProblems": [
      {
        "level": "Error",
        "dbObject": "test.incorrect_procedure",
        "description": " routine body contains deprecated identifiers."
      }
  ]
}
```
Il controllo preliminare restituisce un errore per la routine `incorrect_procedure` nel database `test` perché contiene una sintassi obsoleta.  
Dopo aver corretto la routine, il controllo preliminare ha esito positivo ed è possibile tentare di eseguire nuovamente l’aggiornamento.

**mysqlIndexTooLargeCheck**  
**Livello di controllo preliminare: errore**  
**Verifica la presenza di indici troppo grandi per funzionare su versioni di MySQL successive alla 5.7**  
Per i formati di riga compatti o ridondanti, non dovrebbe essere possibile creare un indice con un prefisso con più di 767 byte. Tuttavia, prima della versione 5.7.35 di MySQL questo era possibile. Per ulteriori informazioni, consulta le [note di rilascio di MySQL 5.7.35](https://dev.mysql.com/doc/relnotes/mysql/5.7/en/news-5-7-35.html).  
Tutti gli indici interessati da questo bug diventeranno inaccessibili dopo l’aggiornamento a MySQL 8.0. Questo controllo preliminare identifica gli indici che causano l’errore, che devono essere creati nuovamente prima che l’aggiornamento possa procedere.  

```
 {
  "id": "mysqlIndexTooLargeCheck",
  "title": "Check for indexes that are too large to work on higher versions of MySQL Server than 5.7",
  "status": "OK",
  "description": "Error: The following indexes ware made too large for their format in an older version of MySQL (older than 5.7.34). Normally those indexes within tables with compact or redundant row formats shouldn't be larger than 767 bytes. To fix this problem those indexes should be dropped before upgrading or those tables will be inaccessible.",
  "detectedProblems": [
      {
        "level": "Error",
        "dbObject": "test.table_with_large_idx",
        "description": "IDX_2"
      }
  ]
}
```
Il controllo preliminare restituisce un errore perché la tabella `test.table_with_large_idx` contiene un indice su una tabella che utilizza un formato di riga compatto o ridondante con più di 767 byte. Queste tabelle diventerebbero inaccessibili dopo l’aggiornamento a MySQL 8.0. Prima di procedere con l’aggiornamento, esegui una delle seguenti operazioni:  
+ Elimina l’indice indicato nel controllo preliminare.
+ Aggiungi un indice menzionato nel controllo preliminare.
+ Cambia il formato di riga utilizzato dalla tabella.
In questo esempio, creiamo nuovamente la tabella per risolvere l’errore di controllo preliminare. Prima di ricostruire la tabella, assicurati che [innodb\$1file\$1format](https://dev.mysql.com/doc/refman/5.7/en/innodb-parameters.html#sysvar_innodb_file_format) sia impostato su `Barracuda` e che [innodb\$1default\$1row\$1format](https://dev.mysql.com/doc/refman/5.7/en/innodb-parameters.html#sysvar_innodb_default_row_format) sia impostato su `dynamic`. Queste sono le impostazioni predefinite in MySQL 5.7. Per ulteriori informazioni, consulta [InnoDB row formats](https://dev.mysql.com/doc/refman/5.7/en/innodb-row-format.html) e [InnoDB file-format management](https://dev.mysql.com/doc/refman/5.7/en/innodb-file-format.html) nella documentazione di MySQL.  
Prima di creare nuovamente i tablespace, consulta le [operazioni Online DDL](https://dev.mysql.com/doc/refman/5.7/en/innodb-online-ddl-operations.html) nella documentazione di MySQL per comprendere gli effetti del blocco e dello spostamento dei dati sulle transazioni in primo piano.

```
mysql > select @@innodb_file_format,@@innodb_default_row_format;
+----------------------+-----------------------------+
| @@innodb_file_format | @@innodb_default_row_format |
+----------------------+-----------------------------+
| Barracuda            | dynamic                     |
+----------------------+-----------------------------+
1 row in set (0.00 sec)

mysql> optimize table table_with_large_idx;
+---------------------------+----------+----------+-------------------------------------------------------------------+
| Table                     | Op       | Msg_type | Msg_text                                                          |
+---------------------------+----------+----------+-------------------------------------------------------------------+
| test.table_with_large_idx | optimize | note     | Table does not support optimize, doing recreate + analyze instead |
| test.table_with_large_idx | optimize | status   | OK                                                                |
+---------------------------+----------+----------+-------------------------------------------------------------------+
2 rows in set (0.02 sec)

# Verify FILE_FORMAT and ROW_FORMAT
mysql>  select * from information_schema.innodb_sys_tables where name like 'test/table_with_large_idx';
+----------+---------------------------+------+--------+-------+-------------+------------+---------------+------------+
| TABLE_ID | NAME                      | FLAG | N_COLS | SPACE | FILE_FORMAT | ROW_FORMAT | ZIP_PAGE_SIZE | SPACE_TYPE |
+----------+---------------------------+------+--------+-------+-------------+------------+---------------+------------+
|       43 | test/table_with_large_idx |   33 |      4 |    26 | Barracuda   | Dynamic    |             0 | Single     |
+----------+---------------------------+------+--------+-------+-------------+------------+---------------+------------+
1 row in set (0.00 sec)
```
Una volta creata nuovamente la tabella, il controllo preliminare viene superato e l’aggiornamento può procedere.  

```
{
  "id": "mysqlIndexTooLargeCheck",
  "title": "Check for indexes that are too large to work on higher versions of MySQL Server than 5.7",
  "status": "OK",
  "detectedProblems": []
},
```

**mysqlInvalid57NamesCheck**  
**Livello di controllo preliminare: errore**  
**Verifica la presenza di nomi di tabelle e schemi non validi utilizzati in MySQL 5.7**  
Durante la migrazione al nuovo dizionario dei dati in MySQL 8.0, l’istanza database in uso non può contenere schemi o tabelle con il prefisso `#mysql50#`. Se esistono oggetti di questo tipo, l’aggiornamento non riesce. Per risolvere questo problema, esegui [mysqlcheck](https://dev.mysql.com/doc/refman/8.0/en/mysqlcheck.html) sugli schemi e sulle tabelle restituiti.  
Assicurati di utilizzare una versione [MySQL 5.7](https://downloads.mysql.com/archives/community/) di `mysqlcheck`, poiché [--fix-db-names](https://dev.mysql.com/doc/refman/5.7/en/mysqlcheck.html#option_mysqlcheck_fix-db-names) e [--fix-table-names](https://dev.mysql.com/doc/refman/5.7/en/mysqlcheck.html#option_mysqlcheck_fix-table-names) sono stati rimossi da [MySQL 8.0](https://dev.mysql.com/doc/refman/8.0/en/mysql-nutshell.html).
**Output di esempio:**  

```
{
  "id": "mysqlInvalid57NamesCheck",
  "title": "Check for invalid table names and schema names used in 5.7",
  "status": "OK",
  "description": "The following tables and/or schemas have invalid names. In order to fix them use the mysqlcheck utility as follows:\n\n  $ mysqlcheck --check-upgrade --all-databases\n  $ mysqlcheck --fix-db-names --fix-table-names --all-databases\n\nOR via mysql client, for eg:\n\n  ALTER DATABASE `#mysql50#lost+found` UPGRADE DATA DIRECTORY NAME;",
  "documentationLink": "https://dev.mysql.com/doc/refman/5.7/en/identifier-mapping.html https://dev.mysql.com/doc/refman/5.7/en/alter-database.html https://dev.mysql.com/doc/refman/8.0/en/mysql-nutshell.html#mysql-nutshell-removals",
  "detectedProblems": [
      {
        "level": "Error",
        "dbObject": "#mysql50#fix_db_names",
        "description": "Schema name"
      }
  ]
}
```
Il controllo preliminare segnala che lo schema `#mysql50#fix_db_names` ha un nome non valido.  
Una volta corretto il nome dello schema, il controllo preliminare viene superato e l’aggiornamento può procedere.  

```
{
  "id": "mysqlInvalid57NamesCheck",
  "title": "Check for invalid table names and schema names used in 5.7",
  "status": "OK",
  "detectedProblems": []
},
```

**mysqlOrphanedRoutinesCheck**  
**Livello di controllo preliminare: errore**  
**Verifica la presenza di routine orfane in 5.7**  
Durante la migrazione al nuovo dizionario dei dati in MySQL 8.0, se nel database sono presenti stored procedure in cui lo schema non esiste più, l’aggiornamento non riesce. Questo controllo preliminare verifica che tutti gli schemi a cui si fa riferimento nelle stored procedure sull’istanza database esistano ancora. Per consentire il proseguimento dell’aggiornamento, elimina queste stored procedure.  
**Output di esempio:**  

```
{
  "id": "mysqlOrphanedRoutinesCheck",
  "title": "Check for orphaned routines in 5.7",
  "status": "OK",
  "description": "Error: The following routines have been orphaned. Schemas that they are referencing no longer exists.\nThey have to be cleaned up or the upgrade will fail.",
  "detectedProblems": [
      {
        "level": "Error",
        "dbObject": "dropped_db.get_version",
        "description": "is orphaned"
      }
  ]
},
```
Il controllo preliminare segnala che la stored procedure `get_version` nel database `dropped_db` è orfana.  
Per eseguire la pulizia di questa procedura, è possibile creare nuovamente lo schema mancante.  

```
mysql> create database dropped_db;
Query OK, 1 row affected (0.01 sec)
```
Una volta creato nuovamente lo schema, è possibile interrompere la procedura per consentire il proseguimento dell’aggiornamento.  

```
{
  "id": "mysqlOrphanedRoutinesCheck",
  "title": "Check for orphaned routines in 5.7",
  "status": "OK",
  "detectedProblems": []
},
```

**mysqlSchemaCheck**  
**Livello di controllo preliminare: errore**  
**I nomi delle tabelle nello schema `mysql` sono in conflitto con le nuove tabelle in MySQL 8.0**  
Il nuovo [Atomic Data Dictionary](https://dev.mysql.com/doc/refman/8.0/en/data-dictionary-file-removal.html) introdotto in MySQL 8.0 memorizza tutti i metadati in un set di tabelle InnoDB interne nello schema `mysql`. Durante l’aggiornamento, le nuove [tabelle interne del dizionario dei dati](https://dev.mysql.com/doc/refman/8.0/en/data-dictionary-schema.html) vengono create nello schema `mysql`. Per evitare collisioni di denominazione, che comporterebbero errori di aggiornamento, il controllo preliminare esamina tutti i nomi delle tabelle dello schema `mysql` per assicurarsi che nessuno dei nuovi nomi di tabella sia già in uso. In caso affermativo, viene restituito un errore e l’aggiornamento non può continuare.  
**Output di esempio:**  

```
{
  "id": "mysqlSchema",
  "title": "Table names in the mysql schema conflicting with new tables in the latest MySQL.",
  "status": "OK",
  "description": "Error: The following tables in mysql schema have names that will conflict with the ones introduced in the latest version. They must be renamed or removed before upgrading (use RENAME TABLE command). This may also entail changes to applications that use the affected tables.",
  "documentationLink": "https://dev.mysql.com/doc/refman/8.0/en/upgrade-before-you-begin.html",
  "detectedProblems": [
      {
        "level": "Error",
        "dbObject": "mysql.tablespaces",
        "description": "Table name used in mysql schema.",
        "dbObjectType": "Table"
      }
  ]
}
```
Viene restituito un errore perché nello schema `mysql` è presente una tabella denominata `tablespaces`. Questo è uno dei nuovi nomi di tabella del dizionario dei dati interno di MySQL 8.0. È necessario rinominare o rimuovere tali tabelle prima dell’aggiornamento, utilizzando il comando `RENAME TABLE`.

**nonNativePartitioningCheck**  
**Livello di controllo preliminare: errore**  
**Tabelle partizionate utilizzando motori con partizionamento non nativo**  
Secondo la [documentazione di MySQL 8.0](https://dev.mysql.com/doc/refman/8.0/en/mysql-nutshell.html), due motori di archiviazione attualmente forniscono supporto nativo per il partizionamento: [InnoDB](https://dev.mysql.com/doc/refman/8.0/en/innodb-storage-engine.html) e [NDB](https://dev.mysql.com/doc/refman/8.0/en/mysql-cluster.html). Di questi, solo InnoDB è supportato in Aurora MySQL versione 3, che è compatibile con MySQL 8.0. Ogni tentativo di creare tabelle partizionate in MySQL 8.0 utilizzando qualsiasi altro motore di archiviazione fallisce. Questo controllo preliminare cerca le tabelle nel cluster di database che utilizzano il partizionamento non nativo. Se ne vengono restituite alcune, è necessario rimuovere il partizionamento o convertire il motore di archiviazione in InnoDB.  
**Output di esempio:**  

```
{
  "id": "nonNativePartitioning",
  "title": "Partitioned tables using engines with non native partitioning",
  "status": "OK",
  "description": "Error: In the latest MySQL storage engine is responsible for providing its own partitioning handler, and the MySQL server no longer provides generic partitioning support. InnoDB and NDB are the only storage engines that provide a native partitioning handler that is supported in the latest MySQL. A partitioned table using any other storage engine must be altered—either to convert it to InnoDB or NDB, or to remove its partitioning—before upgrading the server, else it cannot be used afterwards.",
  "documentationLink": "https://dev.mysql.com/doc/refman/8.0/en/upgrading-from-previous-series.html#upgrade-configuration-changes",
  "detectedProblems": [
      {
        "level": "Error",
        "dbObject": "test.partMyisamTable",
         "description": "MyISAM engine does not support native partitioning",
         "dbObjectType": "Table"
      }
  ]
}
```
In questo esempio, una tabella MyISAM utilizza il partizionamento, che richiede un’azione prima che l’aggiornamento possa procedere.

**oldTemporalCheck**  
**Livello di controllo preliminare: errore**  
**Utilizzo di un tipo di dato temporale obsoleto**  
I dati temporali obsoleti sono le colonne di tipo temporale (come `TIMESTAMP` e `DATETIME`) create nelle versioni di MySQL 5.5 e precedenti. In MySQL 8.0, il supporto per questi tipi di dati temporali obsoleti è stato rimosso, il che significa che gli aggiornamenti in loco da MySQL 5.7 a 8.0 non sono possibili se il database contiene questi tipi di dati temporali obsoleti. Per risolvere questo problema, è necessario [creare nuovamente](https://dev.mysql.com/doc/refman/5.7/en/rebuilding-tables.html) tutte le tabelle contenenti questi tipi di dati temporali obsoleti prima di procedere con l’aggiornamento.  
Per ulteriori informazioni sulla definizione come obsoleti dei suddetti tipi di dati temporali in MySQL 5.7, consulta questo [blog](https://dev.mysql.com/blog-archive/how-to-easily-identify-tables-with-temporal-types-in-old-format/). Per ulteriori informazioni sulla rimozione dei tipi di dati temporali obsoleti in MySQL 8.0, consulta questo [blog](https://dev.mysql.com/blog-archive/mysql-8-0-removing-support-for-old-temporal-datatypes/).  
Prima di creare nuovamente i tablespace, consulta le [operazioni Online DDL](https://dev.mysql.com/doc/refman/5.7/en/innodb-online-ddl-operations.html) nella documentazione di MySQL per comprendere gli effetti del blocco e dello spostamento dei dati sulle transazioni in primo piano.
**Output di esempio:**  

```
{
  "id": "oldTemporalCheck",
  "title": "Usage of old temporal type",
  "status": "OK",
  "description": "Error: Following table columns use a deprecated and no longer supported temporal disk storage format. They must be converted to the new format before upgrading. It can by done by rebuilding the table using 'ALTER TABLE <table_name> FORCE' command",
  "documentationLink": "https://dev.mysql.com/blog-archive/mysql-8-0-removing-support-for-old-temporal-datatypes/",
  "detectedProblems": [
      {
        "level": "Error",
        "dbObject": "test.55_temporal_table.timestamp_column",
        "description": "timestamp /* 5.5 binary format */",
        "dbObjectType": "Column"
      }
  ]
},
```
Viene segnalato un errore per la colonna `timestamp_column` della tabella `test.55_temporal_table`, poiché utilizza un formato di archiviazione su disco con dati temporali obsoleti che non è più supportato.  
Per risolvere questo problema e consentire il proseguimento dell’aggiornamento, crea nuovamente la tabella per convertire il formato di archiviazione su disco temporale obsoleto in quello nuovo introdotto in MySQL 5.6. Per ulteriori informazioni e prerequisiti prima di procedere, consulta [Converting between 3-byte and 4-byte Unicode character sets](https://dev.mysql.com/doc/refman/8.0/en/charset-unicode-conversion.html) nella documentazione di MySQL.  
L’esecuzione del comando seguente per ricostruire le tabelle menzionate in questo controllo preliminare converte i tipi di dati temporali obsoleti nel formato più recente con una precisione di frazioni di secondo.  

```
ALTER TABLE ... ENGINE=InnoDB;
```
Per ulteriori informazioni su come creare nuovamente le tabelle, consulta [ALTER TABLE statement](https://dev.mysql.com/doc/refman/8.0/en/alter-table.html) nella documentazione di MySQL.  
Dopo aver creato nuovamente la tabella in questione e riavviato l’aggiornamento, il controllo di compatibilità viene superato e l’aggiornamento può procedere.  

```
{
  "id": "oldTemporalCheck",
  "title": "Usage of old temporal type",
  "status": "OK",
  "detectedProblems": []
}
```

**partitionedTablesInSharedTablespaceCheck**  
**Livello di controllo preliminare: errore**  
**Utilizzo di tabelle partizionate in tablespace condivisi**  
A partire da [MySQL 8.0.13](https://dev.mysql.com/doc/relnotes/mysql/8.0/en/news-8-0-13.html), il supporto per l’inserimento di partizioni di tabelle in tablespace condivisi è stato rimosso. Prima dell’aggiornamento, sposta tali tabelle dai tablespace condivisi ai tablespace file-per-table.  
Prima di creare nuovamente i tablespace, consulta le [operazioni di partizionamento](https://dev.mysql.com/doc/refman/5.7/en/innodb-online-ddl-operations.html#online-ddl-partitioning) nella documentazione di MySQL per comprendere gli effetti del blocco e dello spostamento dei dati sulle transazioni in primo piano.
**Output di esempio:**  

```
{
  "id": "partitionedTablesInSharedTablespaceCheck",
  "title": "Usage of partitioned tables in shared tablespaces",
  "status": "OK",
  "description": "Error: The following tables have partitions in shared tablespaces. They need to be moved to file-per-table tablespace before upgrading. You can do this by running query like 'ALTER TABLE table_name REORGANIZE PARTITION X INTO (PARTITION X VALUES LESS THAN (30) TABLESPACE=innodb_file_per_table);'",
  "documentationLink": "https://dev.mysql.com/doc/refman/8.0/en/mysql-nutshell.html#mysql-nutshell-removals",
  "detectedProblems": [
      {
        "level": "Error",
        "dbObject": "test.partInnoDBTable",
        "description": "Partition p1 is in shared tablespace innodb",
        "dbObjectType": "Table"
      }
  ]
}
```
Il controllo preliminare non riesce perché la partizione `p1` dalla tabella `test.partInnoDBTable` si trova nel tablespace di sistema.  
Per risolvere questo problema, crea nuovamente la tabella `test.partInnodbTable` inserendo la partizione `p1` che causa il problema in un tablespace file-per-table.  

```
mysql > ALTER TABLE partInnodbTable REORGANIZE PARTITION p1
    ->   INTO (PARTITION p1 VALUES LESS THAN ('2014-01-01') TABLESPACE=innodb_file_per_table);
Query OK, 0 rows affected, 1 warning (0.02 sec)
Records: 0  Duplicates: 0  Warnings: 0
```
A questo punto, il controllo preliminare viene superato.  

```
{
  "id": "partitionedTablesInSharedTablespaceCheck",
  "title": "Usage of partitioned tables in shared tablespaces",
  "status": "OK",
  "detectedProblems": []
}
```

**removedFunctionsCheck**  
**Livello di controllo preliminare: errore**  
**Utilizzo di funzioni rimosse dalla versione più recente di MySQL**  
In MySQL 8.0, sono state rimosse alcune funzioni integrate. Questo controllo preliminare esamina il database alla ricerca di oggetti che potrebbero utilizzare queste funzioni. Se vengono trovati tali oggetti, viene restituito un errore. È necessario risolvere i problemi prima di tentare di eseguire nuovamente l’aggiornamento.  
La maggior parte delle funzioni rimosse sono [funzioni spaziali](https://dev.mysql.com/doc/refman/5.7/en/gis-wkt-functions.html), che sono state sostituite con funzioni `ST_*` equivalenti. In questi casi, occorre modificare gli oggetti del database in modo da utilizzare la nuova denominazione delle procedure. Per ulteriori informazioni, consulta [ Features Removed in MySQL 8.0](https://dev.mysql.com/doc/refman/8.0/en/mysql-nutshell.html#mysql-nutshell-removals) nella documentazione MySQL.  
**Output di esempio:**  

```
{
  "id": "removedFunctionsCheck",
  "title": "Usage of removed functions",
  "status": "OK",
  "description": "Error: The following DB objects use functions that were removed in the latest MySQL version. Please make sure to update them to use supported alternatives before upgrade.",
  "documentationLink": "https://dev.mysql.com/doc/refman/8.0/en/mysql-nutshell.html#mysql-nutshell-removals",
  "detectedProblems": [
      {
        "level": "Error",
        "dbObject": "test.GetLocationsInPolygon",
        "description": "PROCEDURE uses removed function POLYGONFROMTEXT (consider using ST_POLYGONFROMTEXT instead)",
        "dbObjectType": "Routine"
      },
      {
        "level": "Error",
        "dbObject": "test.InsertLocation",
        "description": "PROCEDURE uses removed function POINTFROMTEXT (consider using ST_POINTFROMTEXT instead)",
        "dbObjectType": "Routine"
      }
  ]
},
```
Il controllo preliminare segnala che la stored procedure `test.GetLocationsInPolygon` utilizza due funzioni rimosse: [POLYGONFROMTEXT](https://dev.mysql.com/doc/refman/5.7/en/gis-wkt-functions.html#function_polyfromtext) e [POINTFROMTEXT](https://dev.mysql.com/doc/refman/5.7/en/gis-wkt-functions.html#function_st-mpointfromtext). Suggerisce inoltre di utilizzare le nuove funzioni [ST\$1POLYGONFROMTEXT](https://dev.mysql.com/doc/refman/8.0/en/gis-wkt-functions.html#function_st-polyfromtext) e [ST\$1POINTFROMTEXT](https://dev.mysql.com/doc/refman/8.0/en/gis-wkt-functions.html#function_st-mpointfromtext) come sostitute. Dopo aver creato nuovamente la procedura utilizzando i suggerimenti, il controllo preliminare viene completato correttamente.  

```
{
  "id": "removedFunctionsCheck",
  "title": "Usage of removed functions",
  "status": "OK",
  "detectedProblems": []
},
```
Sebbene nella maggior parte dei casi le funzioni obsolete siano sostituite direttamente, assicurati di testare l’applicazione e di consultare la documentazione per eventuali cambiamenti nel comportamento dovuti alla modifica.

**routineSyntaxCheck**  
**Livello di controllo preliminare: errore**  
**Controllo della sintassi MySQL per oggetti simili a routine**  
MySQL 8.0 ha introdotto delle [parole chiave riservate](https://dev.mysql.com/doc/mysqld-version-reference/en/keywords-8-0.html#keywords-new-in-8-0) che non erano riservate in precedenza. Il controllo preliminare dell’aggiornamento valuta l’uso di parole chiave riservate nei nomi degli oggetti del database, nonché nelle relative definizioni e nel relativo corpo. Se il controllo rileva l’uso di parole chiave riservate negli oggetti del database, ad esempio stored procedure, funzioni, eventi e trigger, l’aggiornamento non riesce e viene pubblicato un errore nel file `upgrade-prechecks.log`. Per risolvere il problema, è necessario aggiornare le definizioni degli oggetti e racchiudere tali riferimenti tra virgolette singole (’) prima dell’aggiornamento. Per ulteriori informazioni sull’escape delle parole riservate in MySQL, consulta [String literals](https://dev.mysql.com/doc/refman/8.0/en/string-literals.html) nella documentazione di MySQL.  
In alternativa, è possibile modificare il nome specificandone uno diverso, il che potrebbe richiedere modifiche all’applicazione.  
**Output di esempio:**  

```
{
  "id": "routineSyntaxCheck",
  "title": "MySQL syntax check for routine-like objects",
  "status": "OK",
  "description": "The following objects did not pass a syntax check with the latest MySQL grammar. A common reason is that they reference names that conflict with new reserved keywords. You must update these routine definitions and `quote` any such references before upgrading.",
  "documentationLink": "https://dev.mysql.com/doc/refman/en/keywords.html",
  "detectedProblems": [
      {
         "level": "Error",
         "dbObject": "test.select_res_word",
         "description": "at line 2,18: unexpected token 'except'",
         "dbObjectType": "Routine"
      }
  ]
}
```
Per risolvere il problema, consulta la definizione della routine.  

```
SHOW CREATE PROCEDURE test.select_res_word\G

*************************** 1. row ***************************
           Procedure: select_res_word
            sql_mode: ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
    Create Procedure: CREATE PROCEDURE 'select_res_word'()
BEGIN
    SELECT * FROM except;
END
character_set_client: utf8
collation_connection: utf8_general_ci
  Database Collation: latin1_swedish_ci
1 row in set (0.00 sec)
```
La procedura utilizza una tabella denominata `except`, che è una nuova parola chiave in MySQL 8.0. Crea nuovamente la procedura evitando il valore letterale della stringa.  

```
> drop procedure if exists select_res_word;
Query OK, 0 rows affected (0.00 sec)

> DELIMITER $$
 > CREATE PROCEDURE select_res_word()
    -> BEGIN
    ->     SELECT * FROM 'except';
    -> END$$
Query OK, 0 rows affected (0.00 sec)

 > DELIMITER ;
```
A questo punto, il controllo preliminare viene superato.  

```
{
  "id": "routineSyntaxCheck",
  "title": "MySQL syntax check for routine-like objects",
  "status": "OK",
  "detectedProblems": []
}
```

**schemaInconsistencyCheck**  
**Livello di controllo preliminare: errore**  
**Incongruenze dello schema derivanti dalla rimozione o dal danneggiamento dei file**  
Come descritto in precedenza, MySQL 8.0 ha introdotto l’[Atomic Data Dictionary](https://dev.mysql.com/doc/refman/8.0/en/data-dictionary-file-removal.html), che archivia tutti i metadati in un set di tabelle InnoDB interne nello schema `mysql`. Questa nuova architettura offre un modo transazionale e conforme agli standard [ACID](https://en.wikipedia.org/wiki/ACID) per gestire i metadati del database, risolvendo il problema di “Atomic DDL” derivante dal precedente approccio basato su file. Prima di MySQL 8.0, era possibile che gli oggetti dello schema diventassero orfani se un’operazione DDL veniva interrotta inaspettatamente. La migrazione dei metadati basati su file nelle nuove tabelle Atomic Data Dictionary durante l’aggiornamento garantisce che tali oggetti dello schema orfani non siano presenti nell’istanza database. Se vengono rilevati oggetti orfani, l’aggiornamento non riesce.  
Per contribuire al rilevamento di questi oggetti orfani prima di iniziare l’aggiornamento, viene eseguito il controllo preliminare `schemaInconsistencyCheck` per garantire che tutti gli oggetti di metadati del dizionario di dati siano sincronizzati. Se vengono rilevati oggetti di metadati orfani, l’aggiornamento non procede. Per procedere con l’aggiornamento, esegui la pulizia degli oggetti di metadati orfani.  
Se riscontri errori con questo controllo preliminare, apri un caso con il [Supporto AWS](https://aws.amazon.com/support) per richiedere che l’incoerenza dei metadati venga risolta. In alternativa, puoi tentare nuovamente l’aggiornamento eseguendo un dump logico, quindi effettuando il ripristino su un nuovo cluster di database Aurora MySQL versione 3.  
**Output di esempio:**  

```
{
  "id": "schemaInconsistencyCheck",
  "title": "Schema inconsistencies resulting from file removal or corruption",
  "status": "OK",
  "description": "Error: Following tables show signs that either table datadir directory or frm file was removed/corrupted. Please check server logs, examine datadir to detect the issue and fix it before upgrade",
  "detectedProblems": [
      {
        "level": "Error",
        "dbObject": "test.schemaInconsistencyCheck_failure",
        "description": "present in INFORMATION_SCHEMA's INNODB_SYS_TABLES table but missing from TABLES table"
      }
  ]
}
```
Il controllo preliminare segnala che la tabella `test.schemaInconsistencyCheck_failure` contiene metadati incoerenti. In questo caso, la tabella esiste nei metadati del motore di archiviazione InnoDB (`information_schema.INNODB_SYS_TABLES`), ma non nei metadati di MySQL (`information_schema.TABLES`).

### Controlli preliminari Aurora MySQL che restituiscono errori
<a name="precheck-descriptions-errors.aurora"></a>

I seguenti controlli preliminari sono specifici di Aurora MySQL:
+ [auroraCheckDDLRecovery](#auroraCheckDDLRecovery)
+ [auroraCheckRdsUpgradePrechecksTable](#auroraCheckRdsUpgradePrechecksTable)
+ [auroraFODUpgradeCheck](#auroraFODUpgradeCheck)
+ [auroraGetDanglingFulltextIndex](#auroraGetDanglingFulltextIndex)
+ [auroraUpgradeCheckForDatafilePathInconsistency](#auroraUpgradeCheckForDatafilePathInconsistency)
+ [auroraUpgradeCheckForFtsSpaceIdZero](#auroraUpgradeCheckForFtsSpaceIdZero)
+ [auroraUpgradeCheckForIncompleteXATransactions](#auroraUpgradeCheckForIncompleteXATransactions)
+ [auroraUpgradeCheckForInstanceLimit](#auroraUpgradeCheckForInstanceLimit)
+ [auroraUpgradeCheckForInternalUsers](#auroraUpgradeCheckForInternalUsers)
+ [auroraUpgradeCheckForInvalidUtf8mb3CharacterStringInViews](#auroraUpgradeCheckForInvalidUtf8mb3CharacterStringInViews)
+ [auroraUpgradeCheckForInvalidUtf8mb3ColumnComments](#auroraUpgradeCheckForInvalidUtf8mb3ColumnComments)
+ [auroraUpgradeCheckForInvalidUtf8mb3IndexComments](#auroraUpgradeCheckForInvalidUtf8mb3IndexComments)
+ [auroraUpgradeCheckForInvalidUtf8mb3TableComments](#auroraUpgradeCheckForInvalidUtf8mb3TableComments)
+ [auroraUpgradeCheckForMasterUser](#auroraUpgradeCheckForMasterUser)
+ [auroraUpgradeCheckForPrefixIndexOnGeometryColumns](#auroraUpgradeCheckForPrefixIndexOnGeometryColumns)
+ [auroraUpgradeCheckForSpecialCharactersInProcedures](#auroraUpgradeCheckForSpecialCharactersInProcedures)
+ [auroraUpgradeCheckForSysSchemaObjectTypeMismatch](#auroraUpgradeCheckForSysSchemaObjectTypeMismatch)
+ [auroraUpgradeCheckForViewColumnNameLength](#auroraUpgradeCheckForViewColumnNameLength)
+ [auroraUpgradeCheckIndexLengthLimitOnTinyColumns](#auroraUpgradeCheckIndexLengthLimitOnTinyColumns)
+ [auroraUpgradeCheckMissingInnodbMetadataForMysqlHostTable](#auroraUpgradeCheckMissingInnodbMetadataForMysqlHostTable)

**auroraCheckDDLRecovery**  
**Livello di controllo preliminare: errore**  
**Verifica la presenza di artefatti relativi alla funzionalità di ripristino Aurora DDL**  
Nell’ambito dell’implementazione della funzionalità di ripristino DDL (Data Definition Language) in Aurora MySQL, i metadati delle istruzioni DDL inflight vengono mantenuti nelle tabelle `ddl_log_md_table` e `ddl_log_table` nello schema `mysql`. L’implementazione di Aurora della funzionalità di ripristino DDL non è supportata dalla versione 3 in poi, poiché la funzionalità fa parte della nuova implementazione [Atomic Data Dictionary](https://dev.mysql.com/doc/refman/8.0/en/data-dictionary-file-removal.html) in MySQL 8.0. Se durante i controlli di compatibilità sono in esecuzione delle istruzioni DDL, questo controllo preliminare potrebbe avere esito negativo. Si consiglia di eseguire l’aggiornamento mentre non è in esecuzione alcuna istruzione DDL.  
Se questo controllo preliminare ha esito negativo senza che siano in esecuzione una o più istruzioni DDL, apri un caso con il [Supporto AWS](https://aws.amazon.com/support) per richiedere che l’incoerenza dei metadati venga risolta. In alternativa, puoi tentare nuovamente l’aggiornamento eseguendo un dump logico, quindi effettuando il ripristino su un nuovo cluster di database Aurora MySQL versione 3.  
Se sono in esecuzione delle istruzioni DDL, l’output del controllo preliminare stampa il seguente messaggio:  

```
“There are DDL statements in process. Please allow DDL statements to finish before upgrading.”
```
**Output di esempio:**  

```
{
  "id": "auroraCheckDDLRecovery",
  "title": "Check for artifacts related to Aurora DDL recovery feature",
  "status": "OK",
  "description": "Aurora implementation of DDL recovery is not supported from 3.x onwards. This check verifies that the database do not have artifacts realted to the feature",
  "detectedProblems": [
      {
        "level": "Error",
        "dbObject": "mysql.ddl_log_md_table",
        "description": "Table mysql.ddl_log_md_table is not empty. Your database has pending DDL recovery operations. Reachout to AWS support for assistance."
      },
      {
        "level": "Error",
        "dbObject": "mysql.ddl_log_table",
        "description": "Table mysql.ddl_log_table is not empty. Your database has pending DDL recovery operations. Reachout to AWS support for assistance."
      },
      {
        "level": "Error",
        "dbObject": "information_schema.processlist",
        "description": "There are DDL statements in process. Please allow DDL statements to finish before upgrading."
      }
  ]
}
```
Il controllo preliminare ha restituito un errore dovuto a un DDL inflight eseguito contemporaneamente ai controlli di compatibilità. Si consiglia di tentare di eseguire nuovamente l’aggiornamento senza che siano in esecuzione le istruzioni DDL.

**auroraCheckRdsUpgradePrechecksTable**  
**Livello di controllo preliminare: errore**  
**Verifica l’esistenza della tabella `mysql.rds_upgrade_prechecks`**  
Si tratta di un controllo preliminare solo interno eseguito dal servizio RDS. Eventuali errori vengono gestiti automaticamente durante l’aggiornamento e possono essere ignorati senza problemi.  
Se riscontri errori con questo controllo preliminare, apri un caso con il [Supporto AWS](https://aws.amazon.com/support) per richiedere che l’incoerenza dei metadati venga risolta. In alternativa, puoi tentare nuovamente l’aggiornamento eseguendo un dump logico, quindi effettuando il ripristino su un nuovo cluster di database Aurora MySQL versione 3.  

```
{
  "id": "auroraCheckRdsUpgradePrechecksTable",
  "title": "Check existence of mysql.rds_upgrade_prechecks table",
  "status": "OK",
  "detectedProblems": []
}
```

**auroraFODUpgradeCheck**  
**Livello di controllo preliminare: errore**  
**Verifica la presenza di artefatti relativi alla funzionalità Fast DDL di Aurora**  
L’ottimizzazione [Fast DDL](AuroraMySQL.Managing.FastDDL.md) è stata introdotta in [modalità Lab](AuroraMySQL.Updates.LabMode.md) in Aurora MySQL versione 2 per migliorare l’efficienza di alcune operazioni DDL. In Aurora MySQL versione 3, la modalità Lab è stata rimossa e l’implementazione Fast DDL è stata sostituita dalla funzionalità MySQL 8.0 denominata [Instant DDL](https://dev.mysql.com/doc/refman/8.4/en/innodb-online-ddl-operations.html).  
Prima dell’aggiornamento ad Aurora MySQL versione 3, tutte le tabelle che utilizzano Fast DDL in modalità Lab dovranno essere create nuovamente eseguendo il comando `OPTIMIZE TABLE` o `ALTER TABLE ... ENGINE=InnoDB` per garantire la compatibilità con Aurora MySQL versione 3.  
Questo controllo preliminare restituisce un elenco di tutte le tabelle di questo tipo. Dopo che le tabelle restituite sono state create nuovamente, è possibile tentare di eseguire nuovamente l’aggiornamento.  
**Output di esempio:**  

```
{
  "id": "auroraFODUpgradeCheck",
  "title": "Check for artifacts related to Aurora fast DDL feature",
  "status": "OK",
  "description": "Aurora fast DDL is not supported from 3.x onwards. This check verifies that the database does not have artifacts related to the feature",
  "documentationLink": "https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/AuroraMySQL.Managing.FastDDL.html#AuroraMySQL.Managing.FastDDL-v2",
  "detectedProblems": [
      {
        "level": "Error",
        "dbObject": "test.test",
        "description": "Your table has pending Aurora fast DDL operations. Run 'OPTIMIZE TABLE <table name>' for the table to apply all the pending DDL updates. Then try the upgrade again."
      }
  ]
}
```
Il controllo preliminare segnala che nella tabella `test.test` sono presenti operazioni Fast DDL in sospeso.  
Per consentire il proseguimento dell’aggiornamento, è possibile creare nuovamente la tabella, quindi tentare di eseguire di nuovo l’aggiornamento.  
Prima di creare nuovamente i tablespace, consulta le [operazioni Online DDL](https://dev.mysql.com/doc/refman/5.7/en/innodb-online-ddl-operations.html) nella documentazione di MySQL per comprendere gli effetti del blocco e dello spostamento dei dati sulle transazioni in primo piano.

```
mysql> optimize table test.test;
+-----------+----------+----------+-------------------------------------------------------------------+
| Table     | Op       | Msg_type | Msg_text                                                          |
+-----------+----------+----------+-------------------------------------------------------------------+
| test.test | optimize | note     | Table does not support optimize, doing recreate + analyze instead |
| test.test | optimize | status   | OK                                                                |
+-----------+----------+----------+-------------------------------------------------------------------+
2 rows in set (0.04 sec)
```
Dopo aver creato nuovamente la tabella, il controllo preliminare ha esito positivo.  

```
{
  "id": "auroraFODUpgradeCheck",
  "title": "Check for artifacts related to Aurora fast DDL feature",
  "status": "OK",
  "detectedProblems": []
}
```

**auroraGetDanglingFulltextIndex**  
**Livello di controllo preliminare: errore**  
**Tabelle con riferimento all’indice `FULLTEXT` dangling**  
Prima di MySQL 5.6.26, era possibile che, dopo aver eliminato un indice di ricerca full-text, le colonne nascoste `FTS_DOC_ID` e `FTS_DOC_ID_INDEX` diventassero orfane. Per ulteriori informazioni, consulta [Bug \$176012](https://bugs.mysql.com/bug.php?id=76012).  
Se sono presenti tabelle create in versioni precedenti di MySQL per cui è stato riscontrato quanto descritto sopra, l’aggiornamento ad Aurora MySQL versione 3 può non riuscire. Questo controllo preliminare verifica che nel cluster di database non esistano tali indici full-text orfani o dangling prima dell’aggiornamento a MySQL 8.0. Se questo controllo preliminare ha esito negativo, crea nuovamente tutte le tabelle che contengono tali indici full-text dangling.  
**Output di esempio:**  

```
{
  "id": "auroraGetDanglingFulltextIndex",
  "title": "Tables with dangling FULLTEXT index reference",
  "status": "OK",
  "description": "Error: The following tables contain dangling FULLTEXT index which is not supported. It is recommended to rebuild the table before upgrade.",
  "detectedProblems": [
      {
        "level": "Error",
        "dbObject": "test.table_with_fts_index",
        "description": "Table `test.table_with_fts_index` contains dangling FULLTEXT index. Kindly recreate the table before upgrade."
      }
  ]
},
```
Il controllo preliminare segnala un errore per la tabella `test.table_with_fts_index` perché contiene un indice full-text dangling. Per consentire il proseguimento dell’aggiornamento, crea nuovamente la tabella per eseguire la pulizia delle tabelle ausiliarie con indice full-text. Utilizza `OPTIMIZE TABLE test.table_with_fts_index` o `ALTER TABLE test.table_with_fts_index, ENGINE=INNODB`.  
Dopo aver creato nuovamente la tabella, il controllo preliminare ha esito positivo.  

```
{
  "id": "auroraGetDanglingFulltextIndex",
  "title": "Tables with dangling FULLTEXT index reference",
  "status": "OK",
  "detectedProblems": []
},
```

**auroraUpgradeCheckForDatafilePathInconsistency**  
**Livello di controllo preliminare: errore**  
**Verifica l’eventuale presenza di incoerenze relative al percorso di file `ibd`**  
Questo controllo preliminare si applica solo ad Aurora MySQL versione 3.03.0 e precedenti. Se si verifica un errore con questo controllo preliminare, esegui l’aggiornamento ad Aurora MySQL versione 3.04 o successive.  
**Output di esempio:**  

```
{
  "id": "auroraUpgradeCheckForDatafilePathInconsistency",
  "title": "Check for inconsistency related to ibd file path.",
  "status": "OK",
  "detectedProblems": []
}
```

**auroraUpgradeCheckForFtsSpaceIdZero**  
**Livello di controllo preliminare: errore**  
**Verifica la presenza di un indice full-text con ID di spazio pari a zero**  
In MySQL, quando si aggiunge un [indice full-text](https://dev.mysql.com/doc/refman/5.7/en/innodb-fulltext-index.html) a una tabella InnoDB, vengono creati alcuni tablespace di indici ausiliari. A causa di un [bug](https://bugs.mysql.com/bug.php?id=72132) nelle versioni precedenti di MySQL, poi corretto nella versione 5.6.20, era possibile che queste tabelle di indici ausiliari fossero state create nel [tablespace di sistema](https://dev.mysql.com/doc/refman/5.7/en/glossary.html#glos_system_tablespace), anziché nel tablespace InnoDB.  
Se esistono tablespace ausiliari di questo tipo, l’aggiornamento non riesce. Crea nuovamente gli indici full-text indicati nell’errore del controllo preliminare, quindi tenta di eseguire di nuovo l’aggiornamento.  
**Output di esempio:**  

```
{
  "id": "auroraUpgradeCheckForFtsSpaceIdZero",
  "title": "Check for fulltext index with space id as zero",
  "status": "OK",
  "description": "The auxiliary tables of FTS indexes on the table are created in system table-space. Due to this DDL queries executed on MySQL8.0 shall cause database unavailability. To avoid that, drop and recreate all the FTS indexes on the table or rebuild the table using ALTER TABLE query before the upgrade.",
  "detectedProblems": [
      {
        "level": "Error",
        "dbObject": "test.fts_space_zero_check",
        "description": " The auxiliary tables of FTS indexes on the table 'test.fts_space_zero_check' are created in system table-space due to https://bugs.mysql.com/bug.php?id=72132. In MySQL8.0, DDL queries executed on this table shall cause database unavailability. To avoid that, drop and recreate all the FTS indexes on the table or rebuild the table using ALTER TABLE query before the upgrade."
      }
  ]
},
```
Il controllo preliminare segnala un errore per la tabella `test.fts_space_zero_check`, poiché include tabelle ausiliarie di ricerca full-text (FTS) nel tablespace di sistema.  
Dopo aver eliminato e creato nuovamente gli indici FTS associati a questa tabella, il controllo preliminare ha esito positivo.  
Prima di creare nuovamente i tablespace, consulta le [operazioni di partizionamento](https://dev.mysql.com/doc/refman/5.7/en/innodb-online-ddl-operations.html#online-ddl-partitioning) nella documentazione di MySQL per comprendere gli effetti del blocco e dello spostamento dei dati sulle transazioni in primo piano.

```
{
 "id": "auroraUpgradeCheckForFtsSpaceIdZero",
 "title": "Check for fulltext index with space id as zero",
 "status": "OK",
 "detectedProblems": []
}
```

**auroraUpgradeCheckForIncompleteXATransactions**  
**Livello di controllo preliminare: errore**  
**Verifica la presenza di transazioni XA in stato preparato**  
Durante l’esecuzione del processo di aggiornamento a una versione principale, è essenziale che l’istanza database Aurora MySQL versione 2 sia sottoposta a un [arresto pulito](https://dev.mysql.com/doc/refman/5.7/en/glossary.html#glos_slow_shutdown). Ciò garantisce che tutte le transazioni vengano eseguite o ripristinate e che InnoDB abbia eliminato tutti i record del log di undo. Poiché il rollback delle transazioni è necessario, se il database contiene [transazioni XA](https://dev.mysql.com/doc/refman/5.7/en/xa.html) in stato preparato, può impedire il proseguimento dell’arresto pulito. Per questo motivo, se vengono rilevate transazioni XA preparate, l’aggiornamento non potrà procedere finché non si interverrà per eseguirne il commit o il rollback.  
Per ulteriori informazioni sulla ricerca di transazioni XA in stato preparato utilizzando `XA RECOVER`, consulta [XA transaction SQL statements](https://dev.mysql.com/doc/refman/5.7/en/xa-statements.html) nella documentazione di MySQL. Per ulteriori informazioni sugli stati delle transazioni XA, consulta [XA transaction states](https://dev.mysql.com/doc/refman/5.7/en/xa-states.html) nella documentazione di MySQL.  
**Output di esempio:**  

```
{
  "id": "auroraUpgradeCheckForIncompleteXATransactions",
  "title": "Pre-checks for XA Transactions in prepared state.",
  "status": "OK",
  "description": "Your cluster currently has XA transactions in the prepared state. To proceed with the upgrade, commit or rollback these transactions.",
  "detectedProblems": [
      {
        "level": "Error",
        "dbObject": "all",
        "description": "Your cluster currently has XA transactions in the prepared state. To proceed with the upgrade, commit or rollback these transactions."
      }
  ]
}
```
Questo controllo preliminare segnala un errore perché vi sono transazioni in stato preparato di cui deve essere eseguito il commit o il rollback.  
Dopo aver effettuato l’accesso al database, puoi controllare la tabella [information\$1schema.innodb\$1trx](https://dev.mysql.com/doc/refman/5.7/en/information-schema-innodb-trx-table.html) e l’output `XA RECOVER` per ulteriori informazioni.  
Prima di eseguire il commit o il rollback di una transazione, è consigliabile consultare la [documentazione di MySQL](https://dev.mysql.com/doc/refman/5.7/en/xa-restrictions.html) e i requisiti dell’applicazione.

```
mysql> select trx_started,
    trx_mysql_thread_id,
    trx_id,trx_state,
    trx_operation_state,
    trx_rows_modified,
    trx_rows_locked 
from 
    information_schema.innodb_trx;
+---------------------+---------------------+---------+-----------+---------------------+-------------------+-----------------+
| trx_started         | trx_mysql_thread_id | trx_id  | trx_state | trx_operation_state | trx_rows_modified | trx_rows_locked |
+---------------------+---------------------+---------+-----------+---------------------+-------------------+-----------------+
| 2024-08-12 01:09:39 |                   0 | 2849470 | RUNNING   | NULL                |                 1 |               0 |
+---------------------+---------------------+---------+-----------+---------------------+-------------------+-----------------+
1 row in set (0.00 sec)

mysql> xa recover;
+----------+--------------+--------------+--------+
| formatID | gtrid_length | bqual_length | data   |
+----------+--------------+--------------+--------+
|        1 |            6 |            0 | xatest |
+----------+--------------+--------------+--------+
1 row in set (0.00 sec)
```
In questo esempio, viene eseguito il rollback della transazione preparata.  

```
mysql> XA ROLLBACK 'xatest';
Query OK, 0 rows affected (0.00 sec)
v
mysql> xa recover;
Empty set (0.00 sec)
```
Dopo il rollback della transazione XA, il controllo preliminare ha esito positivo.  

```
{
  "id": "auroraUpgradeCheckForIncompleteXATransactions",
  "title": "Pre-checks for XA Transactions in prepared state.",
  "status": "OK",
  "detectedProblems": []
}
```

**auroraUpgradeCheckForInstanceLimit**  
**Livello di controllo preliminare: errore**  
**Verifica se l’aggiornamento è supportato nella classe di istanza corrente**  
L’esecuzione di un aggiornamento in loco da Aurora MySQL versione 2.12.0 o 2.12.1, in cui la [classe di istanza database](Concepts.DBInstanceClass.md) di scrittura è db.r6i.32xlarge, al momento non è supportata. In questo caso, il controllo preliminare restituisce un errore. Per consentire il proseguimento dell’aggiornamento, puoi modificare la classe dell’istanza database impostandola su db.r6i.24xlarge o una versione precedente. Altrimenti puoi eseguire l’aggiornamento ad Aurora MySQL versione 2.12.2 o successiva, in cui l’aggiornamento in loco ad Aurora MySQL versione 3 è supportato su db.r6i.32xlarge.  
**Output di esempio:**  

```
{
  "id": "auroraUpgradeCheckForInstanceLimit",
  "title": "Checks if upgrade is supported on the current instance class",
  "status": "OK",
  "description": "Upgrade from Aurora Version 2.12.0 and 2.12.1 may fail for 32.xl and above instance class.",
  "detectedProblems": [
      {
        "level": "Error",
        "dbObject": "all",
        "description": "Upgrade is not supported on this instance size for Aurora MySql Version 2.12.1. Before upgrading to Aurora MySql 3, please consider either: 1. Changing the instance class to 24.xl or lower. -or- 2. Upgrading to patch version 2.12.2 or higher."
      }
  ]
},
```
Il controllo preliminare restituisce un errore perché l’istanza database di scrittura utilizza la classe di istanza db.r6i.32xlarge ed è in esecuzione su Aurora MySQL versione 2.12.1.

**auroraUpgradeCheckForInternalUsers**  
**Livello di controllo preliminare: errore**  
**Verifica la presenza di utenti interni 8.0**  
Questo controllo preliminare si applica solo ad Aurora MySQL versione 3.03.0 e precedenti. Se si verifica un errore con questo controllo preliminare, esegui l’aggiornamento ad Aurora MySQL versione 3.04 o successive.  
**Output di esempio:**  

```
{
  "id": "auroraUpgradeCheckForInternalUsers",
  "title": "Check for 8.0 internal users.",
  "status": "OK",
  "detectedProblems": []
}
```

**auroraUpgradeCheckForInvalidUtf8mb3CharacterStringInViews**  
**Livello di controllo preliminare: errore**  
**Verifica la presenza di caratteri utf8mb3 non validi nella definizione della vista**  
Questo controllo preliminare identifica le viste che contengono commenti con codifica dei caratteri non validi `utf8mb3`. In MySQL 8.0, viene applicata una convalida più rigorosa alla codifica dei caratteri nei metadati, inclusi i commenti delle viste. Se la definizione di una vista contiene caratteri che non sono validi nel set di caratteri `utf8mb3`, l’aggiornamento non riesce.  
Per risolvere questo problema, modifica la definizione della vista per rimuovere o sostituire eventuali caratteri non BMP prima di tentare l’aggiornamento.  
**Output di esempio:**  

```
{
"id": "auroraUpgradeCheckForInvalidUtf8mb3CharacterStringInViews",
"title": "Check for invalid utf8mb3 character string.",
"status": "OK",
"description": "Definition of following view(s) has/have invalid utf8mb3 character string.",
"detectedProblems": [
        {
            "level": "Error",
            "dbObject": "precheck.utf8mb3_invalid_char_view",
            "description": "Definition of view precheck.utf8mb3_invalid_char_view contains an invalid utf8mb3 character string. This is due to https://bugs.mysql.com/bug.php?id=110177. To fix the inconsistency, we recommend you to modify the view definition to not use non-BMP characters and try the upgrade again."
        }
    ]
},
```
Il controllo preliminare segnala che la definizione della vista `utf8mb3_invalid_char_view` contiene caratteri `utf8mb3` non validi nella relativa definizione.  
Per risolvere questo problema, identifica la vista che contiene i caratteri non supportati e aggiorna i commenti. Innanzitutto, esamina la struttura della vista e identifica i commenti.  

```
MySQL> SHOW CREATE VIEW precheck.utf8mb3_invalid_char_view\G
*************************** 1. row ***************************
                View: utf8mb3_invalid_char_view
        Create View: CREATE ALGORITHM=UNDEFINED DEFINER=`admin`@`%` SQL SECURITY DEFINER VIEW `utf8mb3_invalid_char_view` AS select 'This row contains a dolphin 🐬' AS `message`
character_set_client: utf8
collation_connection: utf8_general_ci
1 row in set, 1 warning (0.00 sec)
```
Dopo aver identificato la vista che contiene l’errore, sostituisci la vista con l’istruzione `CREATE OR REPLACE VIEW`.  

```
MySQL> CREATE OR REPLACE VIEW precheck.utf8mb3_invalid_char_view AS select 'This view definition to not use non-BMP characters' AS message;
```
Dopo aver aggiornato tutte le definizioni di viste che contengono caratteri non supportati, il controllo preliminare viene superato e l’aggiornamento può procedere.  

```
{
"id": "auroraUpgradeCheckForInvalidUtf8mb3ColumnComments",
"title": "Check for invalid utf8mb3 column comments.",
"status": "OK",
"detectedProblems": []
}
```

**auroraUpgradeCheckForInvalidUtf8mb3ColumnComments**  
**Livello di controllo preliminare: errore**  
**Verifica la presenza di commenti non validi nella colonna utf8mb3**  
Questo controllo preliminare identifica le tabelle che contengono commenti delle colonne con codifica dei caratteri non validi `utf8mb3`. In MySQL 8.0, viene applicata una convalida più rigorosa alla codifica dei caratteri nei metadati, inclusi i commenti delle colonne. Se un commento di colonna contiene caratteri che non sono validi nel set di caratteri utf8mb3, l’aggiornamento non riuscirà.  
Per risolvere questo problema, è necessario modificare i commenti delle colonne per rimuovere o sostituire eventuali caratteri non BMP prima di tentare l’aggiornamento. È possibile utilizzare l’istruzione `ALTER TABLE` per aggiornare i commenti della colonna.  
**Output di esempio:**  

```
{
  "id": "auroraUpgradeCheckForInvalidUtf8mb3ColumnComments",
  "title": "Check for invalid utf8mb3 column comments.",
  "status": "OK",
  "description": "Following table(s) has/have invalid utf8mb3 comments on the column/columns.",
  "detectedProblems": [
      {
        "level": "Error",
        "dbObject": "test.t2",
        "description": "Table test.t2 has invalid utf8mb3 comments in it's column/columns. This is due to non-BMP characters in the comment field. To fix the inconsistency, we recommend you to modify comment fields to not use non-BMP characters and try the upgrade again."
      }
  ]
}
```
Il controllo preliminare segnala che la tabella `test.t2` contiene caratteri `utf8mb3` non validi in uno o più commenti della colonna, in particolare a causa della presenza di caratteri non BMP.  
Per risolvere il problema, è possibile identificare le colonne problematiche e aggiornare i relativi commenti. Innanzitutto, esamina la struttura della tabella per identificare le colonne con commenti:  

```
mysql> SHOW CREATE TABLE test.t2\G
```
Dopo aver identificato le colonne con commenti problematici, aggiornale utilizzando l’istruzione `ALTER TABLE`. Per esempio:  

```
mysql> ALTER TABLE test.t2 MODIFY COLUMN column_name data_type COMMENT 'Updated comment without non-BMP characters';
```
In alternativa, è possibile rimuovere completamente il commento:  

```
mysql> ALTER TABLE test.t2 MODIFY COLUMN column_name data_type COMMENT '';
```
Dopo aver aggiornato tutti i commenti delle colonne problematiche, il controllo preliminare verrà superato e l’aggiornamento potrà procedere:  

```
{
  "id": "auroraUpgradeCheckForInvalidUtf8mb3ColumnComments",
  "title": "Check for invalid utf8mb3 column comments.",
  "status": "OK",
  "detectedProblems": []
}
```
Prima di modificare i commenti delle colonne, assicurati che eventuale documentazione o codice dell’applicazione che si basa su questi commenti siano aggiornati di conseguenza. Valuta la possibilità di eseguire la migrazione al set di caratteri utf8mb4 per un migliore supporto Unicode se l’applicazione richiede caratteri non BMP.

**auroraUpgradeCheckForInvalidUtf8mb3IndexComments**  
**Livello di controllo preliminare: errore**  
**Verifica la presenza di commenti non validi nell’indice utf8mb3**  
Questo controllo preliminare identifica le tabelle che contengono commenti degli indici con codifica dei caratteri non validi `utf8mb3`. In MySQL 8.0, viene applicata una convalida più rigorosa alla codifica dei caratteri nei metadati, inclusi i commenti degli indici. Se i commenti degli indici contengono caratteri che non sono validi nel set di caratteri `utf8mb3`, l’aggiornamento non riesce.  
Per risolvere questo problema, è necessario modificare i commenti degli indici per rimuovere o sostituire eventuali caratteri non BMP prima di tentare l’aggiornamento.  
**Output di esempio:**  

```
{
    "id": "auroraUpgradeCheckForInvalidUtf8mb3IndexComments",
    "title": "Check for invalid utf8mb3 index comments.",
    "status": "OK",
    "description": "Following table(s) has/have invalid utf8mb3 comments on the index.",
    "detectedProblems": [
        {
            "level": "Error",
            "dbObject": "precheck.utf8mb3_tab_index_comment",
            "description": "Table precheck.utf8mb3_tab_index_comment has invalid utf8mb3 comments in it's index. This is due to https://bugs.mysql.com/bug.php?id=110177. To fix the inconsistency, we recommend you to modify comment fields to not use non-BMP characters and try the upgrade again."
        }
    ]
},
```
Il controllo preliminare segnala che la tabella `utf8mb3_tab_index_comment` contiene caratteri `utf8mb3` non validi in uno o più commenti della colonna, in particolare a causa della presenza di caratteri non BMP.  
Per risolvere questo problema, esamina innanzitutto la struttura della tabella per identificare l’indice con commenti problematici.  

```
MySQL> SHOW CREATE TABLE precheck.utf8mb3_tab_index_comment\G
*************************** 1. row ***************************
    Table: utf8mb3_tab_index_comment
Create Table: CREATE TABLE `utf8mb3_tab_index_comment` (
`id` int(11) DEFAULT NULL,
`name` varchar(100) DEFAULT NULL,
KEY `idx_name` (`name`) COMMENT 'Name index 🐬'
) ENGINE=InnoDB DEFAULT CHARSET=utf8
1 row in set (0.01 sec)
```
Una volta identificato l’indice che contiene commenti che utilizzano caratteri non supportati, eliminalo e crealo di nuovo.  
L’eliminazione e la nuova creazione di un indice della tabella possono causare tempi di inattività. Si consiglia di pianificare e programmare l’operazione durante la manutenzione.

```
MySQL> ALTER TABLE precheck.utf8mb3_tab_index_comment DROP INDEX idx_name;
MySQL> ALTER TABLE precheck.utf8mb3_tab_index_comment ADD INDEX idx_name(name);
```
L’esempio seguente mostra un altro modo per creare nuovamente l’indice.  

```
MySQL> ALTER TABLE utf8mb3_tab_index_comment DROP INDEX idx_name, ADD INDEX idx_name (name) COMMENT 'Updated comment without non-BMP characters';
```
Dopo aver rimosso o aggiornato tutti i commenti degli indici non supportati, il controllo preliminare viene superato e l’aggiornamento può procedere.  

```
{
"id": "auroraUpgradeCheckForInvalidUtf8mb3IndexComments",
"title": "Check for invalid utf8mb3 index comments.",
"status": "OK",
"detectedProblems": []
},
```

**auroraUpgradeCheckForInvalidUtf8mb3TableComments**  
**Livello di controllo preliminare: errore**  
**Verifica la presenza di caratteri utf8mb3 non validi nella definizione della tabella**  
Questo controllo preliminare identifica le tabelle che contengono commenti con codifica dei caratteri non validi `utf8mb3`. In MySQL 8.0, viene applicata una convalida più rigorosa alla codifica dei caratteri nei metadati, inclusi i commenti delle tabelle. Se i commenti delle tabelle contengono caratteri che non sono validi nel set di caratteri `utf8mb3`, l’aggiornamento non riesce.  
Per risolvere questo problema, è necessario modificare i commenti delle tabelle per rimuovere o sostituire eventuali caratteri non BMP prima di tentare l’aggiornamento.  
**Output di esempio:**  

```
{
    "id": "auroraUpgradeCheckForInvalidUtf8mb3TableComments",
    "title": "Check for invalid utf8mb3 table comments.",
    "status": "OK",
    "description": "Following table(s) has/have invalid utf8mb3 comments.",
    "detectedProblems": [
        {
            "level": "Error",
            "dbObject": "precheck.utf8mb3_table_with_comment",
            "description": "Table precheck.utf8mb3_table_with_comment has invalid utf8mb3 comments. This is due to https://bugs.mysql.com/bug.php?id=110177. To fix the inconsistency, we recommend you to modify comment fields to not use non-BMP characters and try the upgrade again."
        }
        
    ]
},
```
Il controllo preliminare segnala i commenti `utf8mb3` non validi definiti per le tabelle `utf8mb3_table_with_comment` nel database di test.  
Per risolvere questo problema, identifica la tabella che contiene i caratteri non supportati e aggiorna i commenti. Innanzitutto, esamina la struttura della tabella vista e identifica i commenti.  

```
MySQL> SHOW CREATE TABLE precheck.utf8mb3_table_with_comment\G
*************************** 1. row ***************************
    Table: utf8mb3_table_with_comment
Create Table: CREATE TABLE `utf8mb3_table_with_comment` (
`id` int(11) NOT NULL,
`name` varchar(100) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 COMMENT='This table comment contains flag 🏳️'
1 row in set (0.00 sec)
```
Dopo aver identificato i commenti delle tabelle che contengono caratteri non supportati, aggiorna i commenti con l’istruzione `ALTER TABLE`.  

```
MySQL> ALTER TABLE precheck.utf8mb3_table_with_comment COMMENT='Updated comment without non-BMP characters';
```
In alternativa, è possibile rimuovere il commento.  

```
MySQL> ALTER TABLE precheck.utf8mb3_table_with_comment COMMENT='';
```
Dopo aver rimosso tutti i caratteri non supportati da tutti i commenti delle tabelle, il controllo preliminare ha esito positivo.  

```
{
"id": "auroraUpgradeCheckForInvalidUtf8mb3TableComments",
"title": "Check for invalid utf8mb3 table comments.",
"status": "OK",
"detectedProblems": []
},
```

**auroraUpgradeCheckForMasterUser**  
**Livello di controllo preliminare: errore**  
**Verifica se esiste un utente master RDS**  
MySQL 8 ha aggiunto un nuovo modello di privilegi con supporto per il [ruolo](https://dev.mysql.com/doc/refman/8.0/en/roles.html) e i [privilegi dinamici](https://dev.mysql.com/doc/refman/8.0/en/privileges-provided.html#static-dynamic-privileges) per rendere la gestione dei privilegi più semplice e dettagliata. Come parte di questa modifica, Aurora MySQL ha introdotto il nuovo `rds_superuser_role`, che viene automaticamente concesso all’utente master del database al momento dell’aggiornamento da Aurora MySQL versione 2 alla versione 3.  
Per ulteriori informazioni sui ruoli e i privilegi assegnati all’utente master in Aurora MySQL, consulta [Privilegi dell'account utente master](UsingWithRDS.MasterAccounts.md). Per ulteriori informazioni sul modello di privilegi basato su ruolo in Aurora MySQL versione 3, consulta [Privilegio basato sui ruoli](AuroraMySQL.Compare-80-v3.md#AuroraMySQL.privilege-model).  
Questo controllo preliminare verifica che l’utente master esista nel database. Se l’utente master non esiste, il controllo preliminare avrà esito negativo. Per consentire il proseguimento dell’aggiornamento, crea nuovamente l’utente master reimpostando la password dell’utente principale o creando manualmente l’utente. Prova quindi a eseguire nuovamente l’aggiornamento. Per ulteriori informazioni sulla reimpostazione della password dell’utente master, consulta [Modifica della password per l’utente master del database](Aurora.Modifying.md#Aurora.Modifying.Password).  
**Output di esempio:**  

```
{
  "id": "auroraUpgradeCheckForMasterUser",
  "title": "Check if master user exists",
  "status": "OK",
  "description": "Throws error if master user has been dropped!",
  "documentationLink": "https://docs.aws.amazon.com/AmazonRDS/latest/AuroraUserGuide/UsingWithRDS.MasterAccounts.html",
  "detectedProblems": [
      {
        "level": "Error",
        "dbObject": "all",
        "description": "Your Master User on host '%' has been dropped. To proceed with the upgrade, recreate the master user `reinvent` on default host '%'"
      }
  ]
}
```
Dopo aver reimpostato la password dell’utente master, il controllo preliminare verrà superato e potrai tentare di eseguire nuovamente l’aggiornamento.  
L’esempio seguente utilizza l’interfaccia AWS CLI per reimpostare la password. Le modifiche alla password vengono applicate immediatamente.  

```
aws rds modify-db-cluster \
    --db-cluster-identifier my-db-cluster \
    --master-user-password my-new-password
```
Quindi il controllo preliminare ha esito positivo.  

```
{
  "id": "auroraUpgradeCheckForMasterUser",
  title": "Check if master user exists",
  "status": "OK",
  "detectedProblems": []
}
```

**auroraUpgradeCheckForPrefixIndexOnGeometryColumns**  
**Livello di controllo preliminare: errore**  
**Verifica la presenza di colonne di geometria negli indici dei prefissi**  
A partire da [MySQL 8.0.12](https://dev.mysql.com/doc/relnotes/mysql/8.0/en/news-8-0-12.html#mysqld-8-0-12-spatial-support), non è più possibile creare un indice [con prefisso](https://dev.mysql.com/doc/refman/5.7/en/column-indexes.html#column-indexes-prefix) in una colonna utilizzando il tipo di dati [GEOMETRY](https://dev.mysql.com/doc/refman/5.7/en/gis-data-formats.html). Per ulteriori informazioni, consulta [WL\$111808](https://dev.mysql.com/worklog/task/?id=11808).  
Se esistono indici di questo tipo, l’aggiornamento non riesce. Per risolvere il problema, elimina gli indici `GEOMETRY` con prefisso nelle tabelle menzionate nell’errore del controllo preliminare.  
**Output di esempio:**  

```
{
  "id": "auroraUpgradeCheckForPrefixIndexOnGeometryColumns",
  "title": "Check for geometry columns on prefix indexs",
  "status": "OK",
  "description": "Consider dropping the prefix Indexes of geometry columns and restart the upgrade.",
  "detectedProblems": [
      {
        "level": "Error",
        "dbObject": "test.geom_index_prefix",
        "description": "Table `test`.`geom_index_prefix` has an index `LatLon` on geometry column/s. Mysql 8.0 does not support this type of index on a geometry column https://dev.mysql.com/worklog/task/?id=11808. To upgrade to MySQL 8.0, Run 'DROP INDEX `LatLon` ON `test`.`geom_index_prefix`;"
      }
  ]
}
```
Il controllo preliminare segnala un errore perché la tabella `test.geom_index_prefix` contiene un indice con un prefisso in una colonna `GEOMETRY`.  
Dopo aver eliminato questo indice, il controllo preliminare ha esito positivo.  

```
{
  "id": "auroraUpgradeCheckForPrefixIndexOnGeometryColumns",
  "title": "Check for geometry columns on prefix indexs",
  "status": "OK",
  "detectedProblems": []
}
```

**auroraUpgradeCheckForSpecialCharactersInProcedures**  
**Livello di controllo preliminare: errore**  
**Verifica l’eventuale presenza di incoerenze relative ai caratteri speciali nelle stored procedure**  
Prima di MySQL 8.0, i nomi dei database, i nomi delle tabelle e altri oggetti corrispondevano ai file nella directory dei dati, ossia a metadati basati su file. Nell’ambito dell’aggiornamento a MySQL 8.0, viene eseguita la migrazione di tutti gli oggetti del database nelle nuove tabelle interne del dizionario dei dati, che sono archiviate nello schema `mysql` per supportare l’[Atomic Data Dictionary](https://dev.mysql.com/doc/refman/8.0/en/data-dictionary-file-removal.html) appena implementato. Nell’ambito della migrazione delle stored procedure, la definizione e il corpo di ciascuna procedura vengono convalidati man mano che vengono acquisiti nel nuovo dizionario di dati.  
Prima di MySQL 8, in alcuni casi era possibile creare routine memorizzate o inserire direttamente nella tabella `mysql.proc` procedure che contenevano caratteri speciali. Ad esempio, era possibile creare una stored procedure contenente un commento con il [carattere spazio non divisibile](https://en.wikipedia.org/wiki/Non-breaking_space) non conforme `\xa0`. Se viene rilevata una di queste procedure, l’aggiornamento non riesce.  
Questo controllo preliminare verifica che i corpi e le definizioni delle stored procedure non contengano tali caratteri. Per consentire il proseguimento dell’aggiornamento, crea nuovamente queste stored procedure senza caratteri nascosti o speciali.  
**Output di esempio:**  

```
{
  "id": "auroraUpgradeCheckForSpecialCharactersInProcedures",
  "title": "Check for inconsistency related to special characters in stored procedures.",
  "status": "OK",
  "description": "Following procedure(s) has special characters inconsistency.",
  "detectedProblems": [
      {
        "level": "Error",
        "dbObject": "information_schema.routines",
        "description": "Data Dictionary Metadata is inconsistent for the procedure `get_version_proc` in the database `test` due to usage of special characters in procedure body. To avoid that, drop and recreate the procedure without any special characters before proceeding with the Upgrade."
      }
  ]
}
```
Il controllo preliminare segnala che il cluster di database contiene una procedura denominata `get_version_proc` nel database `test` che contiene caratteri speciali nel corpo della procedura.  
Dopo aver eliminato e creato nuovamente la stored procedure, il controllo preliminare ha esito positivo e consente di procedere con l’aggiornamento.  

```
{
  "id": "auroraUpgradeCheckForSpecialCharactersInProcedures",
  "title": "Check for inconsistency related to special characters in stored procedures.",
  "status": "OK",
  "detectedProblems": []
},
```

**auroraUpgradeCheckForSysSchemaObjectTypeMismatch**  
**Livello di controllo preliminare: errore**  
**Verifica l’eventuale mancata corrispondenza del tipo di oggetto per lo schema `sys`**  
Lo [schema sys](https://dev.mysql.com/doc/refman/8.0/en/sys-schema.html) è un set di oggetti e viste in un database MySQL che aiuta gli utenti a eseguire la risoluzione dei problemi, l’ottimizzazione e il monitoraggio per le relative istanze database. Quando si esegue un aggiornamento di versione principale da Aurora MySQL versione 2 alla versione 3, le viste dello schema `sys` vengono create nuovamente e aggiornate alle nuove definizioni di Aurora MySQL versione 3.  
Nell’ambito dell’aggiornamento, se alcuni oggetti dello schema `sys` vengono definiti utilizzando i motori di archiviazione (`sys_config/BASE TABLE` in [INFORMATION\$1SCHEMA.TABLES](https://dev.mysql.com/doc/refman/5.7/en/information-schema-tables-table.html)) anziché le viste, l’aggiornamento non riesce. Tali tabelle si trovano nella tabella `information_schema.tables`. Questo non è un comportamento previsto, ma in alcuni casi può verificarsi a causa di un errore dell’utente.  
Questo controllo preliminare convalida tutti gli oggetti dello schema `sys` per garantire che utilizzino le definizioni di tabella corrette e che le viste non vengano erroneamente definite come tabelle InnoDB o MyISAM. Per risolvere il problema, correggi manualmente gli oggetti restituiti rinominandoli o eliminandoli. Prova quindi a eseguire nuovamente l’aggiornamento.  
**Output di esempio:**  

```
{
  "id": "auroraUpgradeCheckForSysSchemaObjectTypeMismatch",
  "title": "Check object type mismatch for sys schema.",
  "status": "OK",
  "description": "Database contains objects with type mismatch for sys schema.",
  "detectedProblems": [
      {
        "level": "Error",
        "dbObject": "sys.waits_global_by_latency",
        "description": "Your object sys.waits_global_by_latency has a type mismatch. To fix the inconsistency we recommend to rename or remove the object before upgrading (use RENAME TABLE command). "
      }
  ]
}
```
Il controllo preliminare segnala che la vista [sys.waits\$1global\$1by\$1latency](https://dev.mysql.com/doc/refman/5.7/en/sys-waits-global-by-latency.html) nello schema `sys` presenta una mancata corrispondenza del tipo che impedisce il proseguimento dell’aggiornamento.  
Dopo aver effettuato l’accesso all’istanza database, puoi vedere che questo oggetto è definito come una tabella InnoDB, mentre invece dovrebbe essere una vista.  

```
mysql> show create table sys.waits_global_by_latency\G
*************************** 1. row ***************************
       Table: waits_global_by_latency
Create Table: CREATE TABLE `waits_global_by_latency` (
  `events` varchar(128) DEFAULT NULL,
  `total` bigint(20) unsigned DEFAULT NULL,
  `total_latency` text,
  `avg_latency` text,
  `max_latency` text
) ENGINE=InnoDB DEFAULT CHARSET=utf8
1 row in set (0.00 sec)
```
Per risolvere questo problema, è possibile eliminare e creare nuovamente la vista con la [definizione corretta](https://github.com/mysql/mysql-server/blob/mysql-5.7.44/scripts/sys_schema/views/p_s/waits_global_by_latency.sql) o rinominarla. Durante il processo di aggiornamento, la vista viene creata automaticamente con la definizione di tabella corretta.  

```
mysql> RENAME TABLE sys.waits_global_by_latency to sys.waits_global_by_latency_old;
Query OK, 0 rows affected (0.01 sec)
```
A questo punto, il controllo preliminare viene superato.  

```
{
  "id": "auroraUpgradeCheckForSysSchemaObjectTypeMismatch",
  "title": "Check object type mismatch for sys schema.",
  "status": "OK",
  "detectedProblems": []
}
```

**auroraUpgradeCheckForViewColumnNameLength**  
**Livello di controllo preliminare: errore**  
**Controlla il limite massimo per il nome della colonna nella vista**  
La [lunghezza massima consentita per un nome di colonna](https://dev.mysql.com/doc/refman/5.7/en/identifier-length.html) in MySQL è di 64 caratteri. Prima di MySQL 8.0, in alcuni casi era possibile creare una vista con un nome di colonna più lungo di 64 caratteri. Se nell’istanza database sono presenti viste di questo tipo, viene restituito un errore di controllo preliminare e l’aggiornamento non riesce. Per consentire il proseguimento dell’aggiornamento, è necessario creare nuovamente le viste in questione, assicurandosi che la lunghezza delle colonne sia inferiore a 64 caratteri. Prova quindi a eseguire nuovamente l’aggiornamento.  
**Output di esempio:**  

```
{
  "id": "auroraUpgradeCheckForViewColumnNameLength",
  "title": "Check for upperbound limit related to column name in view.",
  "status": "OK",
  "description": "Following view(s) has column(s) with length greater than 64.",
  "detectedProblems": [
      {
        "level": "Error",
        "dbObject": "test.colname_view_test.col2_pad_pad_pad_pad_pad_pad_pad_pad_pad_pad_pad_pad_pad_pad_pad_pad_pad",
        "description": "View `test`.`colname_view_test`has column `col2_pad_pad_pad_pad_pad_pad_pad_pad_pad_pad_pad_pad_pad_pad_pad_pad_pad` with invalid column name length. To avoid Upgrade errors, view should be altered by renaming the column name so that its length is not 0 and doesn't exceed 64."
      }
  ]
}
```
Il controllo preliminare segnala che la vista `test.colname_view_test` contiene una colonna `col2_pad_pad_pad_pad_pad_pad_pad_pad_pad_pad_pad_pad_pad_pad_pad_pad_pad` che supera la lunghezza massima consentita di 64 caratteri.  
Osservando la definizione della vista, possiamo individuare la colonna che causa l’errore.  

```
mysql> desc `test`.`colname_view_test`;
+------------------------------------------------------------------+-------------+------+-----+---------+-------+
| Field                                                            | Type        | Null | Key | Default | Extra |
+------------------------------------------------------------------+-------------+------+-----+---------+-------+
| col1                                                             | varchar(20) | YES  |     | NULL    |       |
| col2_pad_pad_pad_pad_pad_pad_pad_pad_pad_pad_pad_pad_pad_pad_pad | int(11)     | YES  |     | NULL    |       |
+------------------------------------------------------------------+-------------+------+-----+---------+-------+
2 rows in set (0.00 sec)
```
Per consentire il proseguimento dell’aggiornamento, crea nuovamente la vista, assicurandoti che la lunghezza delle colonne non superi i 64 caratteri.  

```
mysql> drop view `test`.`colname_view_test`;
Query OK, 0 rows affected (0.01 sec)

mysql> create view `test`.`colname_view_test`(col1, col2_nopad) as select inf, fodcol from test;
Query OK, 0 rows affected (0.01 sec)

mysql> desc `test`.`colname_view_test`;
+------------+-------------+------+-----+---------+-------+
| Field      | Type        | Null | Key | Default | Extra |
+------------+-------------+------+-----+---------+-------+
| col1       | varchar(20) | YES  |     | NULL    |       |
| col2_nopad | int(11)     | YES  |     | NULL    |       |
+------------+-------------+------+-----+---------+-------+
2 rows in set (0.00 sec)
```
A questo punto, il controllo preliminare viene superato.  

```
{
  "id": "auroraUpgradeCheckForViewColumnNameLength",
  "title": "Check for upperbound limit related to column name in view.",
  "status": "OK",
  "detectedProblems": []
}
```

**auroraUpgradeCheckIndexLengthLimitOnTinyColumns**  
**Livello di controllo preliminare: errore**  
**Verifica la presenza di tabelle con indici definiti con una lunghezza del prefisso superiore a 255 byte in colonne di dimensioni piccolissime**  
Quando si crea un indice su una colonna utilizzando un [tipo di dati binario](https://dev.mysql.com/doc/refman/5.7/en/binary-varbinary.html) in MySQL, è necessario aggiungere una lunghezza del [prefisso](https://dev.mysql.com/doc/refman/5.7/en/column-indexes.html#column-indexes-prefix) nella definizione dell’indice. Prima di MySQL 8.0, in alcuni casi era possibile specificare una lunghezza del prefisso superiore alle dimensioni massime consentite per tali tipi di dati. Un esempio è rappresentato dalle colonne `TINYTEXT` e `TINYBLOB`, in cui le dimensioni massime consentite dei dati sono di 255 byte, ma sono consentiti prefissi di indice di dimensioni superiori. Per ulteriori informazioni, consulta [InnoDB limits](https://dev.mysql.com/doc/refman/8.0/en/innodb-limits.html) nella documentazione di MySQL.  
Se questo controllo preliminare ha esito negativo, elimina l’indice che causa l’errore o riduci la lunghezza del prefisso delle colonne `TINYTEXT` e `TINYBLOB` dell’indice a meno di 255 byte. Prova quindi a eseguire nuovamente l’aggiornamento.  
**Output di esempio:**  

```
{
  "id": "auroraUpgradeCheckIndexLengthLimitOnTinyColumns",
  "title": "Check for the tables with indexes defined with prefix length greater than 255 bytes on tiny columns",
  "status": "OK",
  "description": "Prefix length of the indexes defined on tiny columns cannot exceed 255 bytes. With utf8mb4 char set, this limits the prefix length supported upto 63 characters only. A larger prefix length was allowed in MySQL5.7 using innodb_large_prefix parameter. This parameter is deprecated in MySQL 8.0.",
  "documentationLink": "https://dev.mysql.com/doc/refman/8.0/en/innodb-limits.html, https://dev.mysql.com/doc/refman/8.0/en/storage-requirements.html",
  "detectedProblems": [
      {
        "level": "Error",
        "dbObject": "test.tintxt_prefixed_index.col1",
        "description": "Index 'PRIMARY' on tinytext/tinyblob column `col1` of table `test.tintxt_prefixed_index` is defined with prefix length exceeding 255 bytes. Reduce the prefix length to <=255 bytes depending on character set used. For utf8mb4, it should be <=63."
      }
  ]
}
```
Il controllo preliminare segnala un errore per la tabella `test.tintxt_prefixed_index`, poiché ha un indice `PRIMARY` con un prefisso di dimensioni superiori a 255 byte in una colonna TINYTEXT o TINYBLOB.  
Osservando la definizione di questa tabella, possiamo vedere che la chiave primaria ha un prefisso 65 sulla colonna `TINYTEXT` `col1`. Poiché la tabella è definita utilizzando il set di caratteri `utf8mb4`, che memorizza 4 byte per carattere, il prefisso supera il limite di 255 byte.  

```
mysql> show create table `test`.`tintxt_prefixed_index`\G
*************************** 1. row ***************************
       Table: tintxt_prefixed_index
Create Table: CREATE TABLE `tintxt_prefixed_index` (
  `col1` tinytext NOT NULL,
  `col2` tinytext,
  `col_id` tinytext,
  PRIMARY KEY (`col1`(65))
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC
1 row in set (0.00 sec)
```
Modificando il prefisso dell’indice su 63 durante l’utilizzo del set di caratteri `utf8mb4`, l’aggiornamento potrà proseguire.  

```
mysql> alter table `test`.`tintxt_prefixed_index` drop PRIMARY KEY, ADD  PRIMARY KEY (`col1`(63));
Query OK, 0 rows affected (0.04 sec)
Records: 0  Duplicates: 0  Warnings: 0
```
A questo punto, il controllo preliminare viene superato.  

```
{
  "id": "auroraUpgradeCheckIndexLengthLimitOnTinyColumns",
  "title": "Check for the tables with indexes defined with prefix length greater than 255 bytes on tiny columns",
  "status": "OK",
  "detectedProblems": []
}
```

**auroraUpgradeCheckMissingInnodbMetadataForMysqlHostTable**  
**Livello di controllo preliminare: errore**  
**Verifica eventuali incoerenze nei metadati InnoDB mancanti per la tabella `mysql.host`**  
Si tratta di un controllo preliminare solo interno eseguito dal servizio RDS. Eventuali errori vengono gestiti automaticamente durante l’aggiornamento e possono essere ignorati senza problemi.  
Se riscontri errori con questo controllo preliminare, apri un caso con il [Supporto AWS](https://aws.amazon.com/support) per richiedere che l’incoerenza dei metadati venga risolta. In alternativa, puoi tentare nuovamente l’aggiornamento eseguendo un dump logico, quindi effettuando il ripristino su un nuovo cluster di database Aurora MySQL versione 3.

## Avvisi
<a name="precheck-descriptions-warnings"></a>

In caso di esito negativo, i seguenti controlli preliminari generano avvisi ma l’aggiornamento può comunque essere eseguito.

**Topics**
+ [Controlli preliminari MySQL che restituiscono avvisi](#precheck-descriptions-warnings.mysql)
+ [Controlli preliminari Aurora MySQL che restituiscono avvisi](#precheck-descriptions-warnings.aurora)

### Controlli preliminari MySQL che restituiscono avvisi
<a name="precheck-descriptions-warnings.mysql"></a>

I seguenti controlli preliminari sono forniti da Community MySQL:
+ [defaultAuthenticationPlugin](#defaultAuthenticationPlugin)
+ [maxdbFlagCheck](#maxdbFlagCheck)
+ [mysqlDollarSignNameCheck](#mysqlDollarSignNameCheck)
+ [reservedKeywordsCheck](#reservedKeywordsCheck)
+ [utf8mb3Check](#utf8mb3Check)
+ [zeroDatesCheck](#zeroDatesCheck)

**defaultAuthenticationPlugin**  
**Livello di controllo preliminare: avviso**  
**Nuove considerazioni sul plugin di autenticazione predefinito**  
In MySQL 8.0, è stato introdotto il plugin di autenticazione `caching_sha2_password`, che offre una crittografia delle password più sicura e prestazioni migliori rispetto al plugin `mysql_native_password` obsoleto. Per Aurora MySQL versione 3, il plugin di autenticazione predefinito utilizzato per gli utenti del database è il plugin `mysql_native_password`.  
Questo controllo preliminare avverte che tale plugin verrà rimosso e l’impostazione predefinita verrà modificata in una futura versione principale. Prendi in considerazione la possibilità di valutare la compatibilità dei client e degli utenti delle applicazioni prima di questa modifica.  
Per ulteriori informazioni, consulta [caching\$1sha2\$1password compatibility issues and solutions](https://dev.mysql.com/doc/refman/8.0/en/upgrading-from-previous-series.html#upgrade-caching-sha2-password-compatibility-issues) nella documentazione di MySQL.  
**Output di esempio:**  

```
{
  "id": "defaultAuthenticationPlugin",
  "title": "New default authentication plugin considerations",
  "description": "Warning: The new default authentication plugin 'caching_sha2_password' offers more secure password hashing than previously used 'mysql_native_password' (and consequent improved client connection authentication). However, it also has compatibility implications that may affect existing MySQL installations. If your MySQL installation must serve pre-8.0 clients and you encounter compatibility issues after upgrading, the simplest way to address those issues is to reconfigure the server to revert to the previous default authentication plugin (mysql_native_password). For example, use these lines in the server option file:\n\n[mysqld]\ndefault_authentication_plugin=mysql_native_password\n\nHowever, the setting should be viewed as temporary, not as a long term or permanent solution, because it causes new accounts created with the setting in effect to forego the improved authentication security.\nIf you are using replication please take time to understand how the authentication plugin changes may impact you.",
  "documentationLink": "https://dev.mysql.com/doc/refman/8.0/en/upgrading-from-previous-series.html#upgrade-caching-sha2-password-compatibility-issues\nhttps://dev.mysql.com/doc/refman/8.0/en/upgrading-from-previous-series.html#upgrade-caching-sha2-password-replication"
},
```

**maxdbFlagCheck**  
**Livello di controllo preliminare: avviso**  
**Utilizzo di un flag `sql_mode` `MAXDB` obsoleto**  
In MySQL 8.0, sono state [rimosse](https://dev.mysql.com/doc/refman/8.0/en/mysql-nutshell.html) alcune opzioni di variabili di sistema [sql\$1mode](https://dev.mysql.com/doc/refman/5.7/en/server-system-variables.html#sysvar_sql_mode) obsolete, una delle quali era `MAXDB`. Questo controllo preliminare esamina tutte le sessioni attualmente connesse, insieme alle routine e ai trigger, per garantire che `sql_mode` non sia impostato su una combinazione contenente `MAXDB` in alcun caso.  
**Output di esempio:**  

```
{
  "id": "maxdbFlagCheck",
  "title": "Usage of obsolete MAXDB sql_mode flag",
  "status": "OK",
  "description": "Warning: The following DB objects have the obsolete MAXDB option persisted for sql_mode, which will be cleared during the upgrade. It can potentially change the datatype DATETIME into TIMESTAMP if it is used inside object's definition, and this in turn can change the behavior in case of dates earlier than 1970 or later than 2037. If this is a concern, please redefine these objects so that they do not rely on the MAXDB flag before running the upgrade.",
  "documentationLink": "https://dev.mysql.com/doc/refman/8.0/en/mysql-nutshell.html#mysql-nutshell-removals",
  "detectedProblems": [
      {
        "level": "Warning",
        "dbObject": "test.maxdb_stored_routine",
        "description": "PROCEDURE uses obsolete MAXDB sql_mode",
        "dbObjectType": "Routine"
      }
  ]
}
```
Il controllo preliminare segnala che la routine `test.maxdb_stored_routine` contiene un’opzione `sql_mode` non supportata.  
Dopo aver effettuato l’accesso al database, è possibile visualizzare la definizione di routine in cui `sql_mode` contiene `MAXDB`.  

```
 > SHOW CREATE PROCEDURE test.maxdb_stored_routine\G

*************************** 1. row ***************************
           Procedure: maxdb_stored_routine
            sql_mode: PIPES_AS_CONCAT,ANSI_QUOTES,IGNORE_SPACE,MAXDB,NO_KEY_OPTIONS,NO_TABLE_OPTIONS,NO_FIELD_OPTIONS,NO_AUTO_CREATE_USER
    Create Procedure: CREATE DEFINER="msandbox"@"localhost" PROCEDURE "maxdb_stored_routine"()
BEGIN
    SELECT * FROM test;
END
character_set_client: utf8
collation_connection: utf8_general_ci
  Database Collation: latin1_swedish_ci
1 row in set (0.00 sec)
```
Per risolvere il problema, crea nuovamente la procedura dopo aver impostato l’opzione `sql_mode` corretta sul client.  
Secondo la [documentazione di MySQL](https://dev.mysql.com/doc/refman/5.7/en/create-procedure.html), MySQL memorizza l’impostazione `sql_mode` attiva quando una routine viene creata o modificata. Esegue sempre la routine con questa impostazione, indipendentemente dall’impostazione `sql_mode` al momento dell’avvio della routine.  
Prima di modificare `sql_mode`, consulta [Server SQL modes](https://dev.mysql.com/doc/refman/5.7/en/sql-mode.html) nella documentazione di MySQL. Valuta attentamente qualsiasi potenziale impatto di questa operazione sulla tua applicazione.
Crea nuovamente la procedura senza l’opzione `sql_mode` non supportata.  

```
mysql > set sql_mode='PIPES_AS_CONCAT,ANSI_QUOTES,IGNORE_SPACE';
Query OK, 0 rows affected, 1 warning (0.00 sec)

mysql > DROP PROCEDURE test.maxdb_stored_routine\G
Query OK, 0 rows affected (0.00 sec)

mysql >
mysql > DELIMITER $$
mysql >
mysql > CREATE PROCEDURE test.maxdb_stored_routine()
    -> SQL SECURITY DEFINER
    -> BEGIN
    ->     SELECT * FROM test;
    -> END$$
Query OK, 0 rows affected (0.00 sec)

mysql >
mysql > DELIMITER ;
mysql > show create procedure test.maxdb_stored_routine\G
*************************** 1. row ***************************
           Procedure: maxdb_stored_routine
            sql_mode: PIPES_AS_CONCAT,ANSI_QUOTES,IGNORE_SPACE
    Create Procedure: CREATE DEFINER="msandbox"@"localhost" PROCEDURE "maxdb_stored_routine"()
BEGIN
    SELECT * FROM test;
END
character_set_client: utf8
collation_connection: utf8_general_ci
  Database Collation: latin1_swedish_ci
1 row in set (0.00 sec)
```
Il controllo preliminare ha esito positivo.  

```
{
  "id": "maxdbFlagCheck",
  "title": "Usage of obsolete MAXDB sql_mode flag",
  "status": "OK",
  "detectedProblems": []
}
```

**mysqlDollarSignNameCheck**  
**Livello di controllo preliminare: avviso**  
**Verifica l’utilizzo obsoleto dei simboli del dollaro singoli nei nomi degli oggetti**  
A partire da [MySQL 8.0.32](https://dev.mysql.com/doc/relnotes/mysql/8.0/en/news-8-0-32.html#mysqld-8-0-32-deprecation-removal), l’utilizzo del simbolo del dollaro (`$`) come primo carattere di un identificatore senza virgolette è obsoleto. Se sono presenti schemi, tabelle, viste, colonne o routine contenenti un `$` come primo carattere, il controllo preliminare restituisce un avviso. Sebbene questo avviso non impedisca il proseguimento dell’aggiornamento, è consigliabile agire subito per risolvere il problema. A partire da [MySQL 8.4](https://dev.mysql.com/doc/refman/8.4/en/mysql-nutshell.html) qualsiasi identificatore di questo tipo restituisce un errore di sintassi anziché un avviso.  
**Output di esempio:**  

```
{
  "id": "mysqlDollarSignNameCheck",
  "title": "Check for deprecated usage of single dollar signs in object names",
  "status": "OK",
  "description": "Warning: The following objects have names with deprecated usage of dollar sign ($) at the begining of the identifier. To correct this warning, ensure, that names starting with dollar sign, also end with it, similary to quotes ($example$). ",
  "detectedProblems": [
      {
        "level": "Warning",
        "dbObject": "test.$deprecated_syntx",
        "description": " name starts with $ sign."
      }
  ]
},
```
Il controllo preliminare segnala un avviso perché la tabella `$deprecated_syntx` nello schema `test` contiene un `$` come primo carattere.

**reservedKeywordsCheck**  
**Livello di controllo preliminare: avviso**  
**Utilizzo di oggetti di database con nomi in conflitto con nuove parole chiave riservate**  
Questo controllo è simile a [routineSyntaxCheck](#routineSyntaxCheck), in quanto verifica l’utilizzo di oggetti di database con nomi in conflitto con nuove parole chiave riservate. Sebbene i due controlli non impediscano gli aggiornamenti, è necessario valutare attentamente gli avvisi.  
**Output di esempio:**  
Utilizzando l’esempio precedente con la tabella denominata `except`, il controllo preliminare restituisce un avviso:  

```
{
  "id": "reservedKeywordsCheck",
  "title": "Usage of db objects with names conflicting with new reserved keywords",
  "status": "OK",
  "description": "Warning: The following objects have names that conflict with new reserved keywords. Ensure queries sent by your applications use `quotes` when referring to them or they will result in errors.",
  "documentationLink": "https://dev.mysql.com/doc/refman/en/keywords.html",
  "detectedProblems": [
      {
        "level": "Warning",
        "dbObject": "test.except",
        "description": "Table name",
        "dbObjectType": "Table"
      }
  ]
}
```
Questo avviso segnala che potrebbero esserci alcune query dell’applicazione da esaminare. Se le query dell’applicazione non eseguono correttamente l’[escape dei valori letterali delle stringhe](https://dev.mysql.com/doc/refman/8.0/en/string-literals.html), potrebbero verificarsi degli errori dopo l’aggiornamento a MySQL 8.0. Esamina le tue applicazioni per verificare, eseguendo test rispetto a un clone o uno snapshot del cluster di database Aurora MySQL in esecuzione sulla versione 3.  
Esempio di una query dell’applicazione senza escape che avrà esito negativo dopo l’aggiornamento:  

```
SELECT * FROM escape;
```
Esempio di una query dell’applicazione con escape corretto che avrà esito positivo dopo l’aggiornamento:  

```
SELECT * FROM 'escape';
```

**utf8mb3Check**  
**Livello di controllo preliminare: avviso**  
**Utilizzo del set di caratteri `utf8mb3`**  
In MySQL 8.0, il set di caratteri `utf8mb3` è obsoleto e verrà rimosso in una futura versione principale di MySQL. Questo controllo preliminare è implementato per generare un avviso se vengono rilevati oggetti di database che utilizzano tale set di caratteri. Anche se ciò non impedisce il proseguimento dell’aggiornamento, si consiglia vivamente di valutare la possibilità di eseguire la migrazione delle tabelle al set di caratteri `utf8mb4`, che è l’impostazione predefinita a partire da MySQL 8.0. Per ulteriori informazioni su [utf8mb3](https://dev.mysql.com/doc/refman/8.0/en/charset-unicode-utf8mb3.html) e [utf8mb4](https://dev.mysql.com/doc/refman/8.0/en/charset-unicode-utf8mb4.html), consulta [Converting between 3-byte and 4-byte Unicode character sets](https://dev.mysql.com/doc/refman/8.0/en/charset-unicode-conversion.html) nella documentazione di MySQL.  
**Output di esempio:**  

```
{
  "id": "utf8mb3",
  "title": "Usage of utf8mb3 charset",
  "status": "OK",
  "description": "Warning: The following objects use the deprecated utf8mb3 character set. It is recommended to convert them to use utf8mb4 instead, for improved Unicode support. The utf8mb3 character is subject to removal in the future.",
  "documentationLink": "https://dev.mysql.com/doc/refman/8.0/en/charset-unicode-utf8mb3.html",
  "detectedProblems": [
      {
        "level": "Warning",
        "dbObject": "test.t1.col1",
        "description": "column's default character set: utf8",
        "dbObjectType": "Column"
      },
      {
        "level": "Warning",
        "dbObject": "test.t1.col2",
        "description": "column's default character set: utf8",
        "dbObjectType": "Column"
      }
  ]
}
```
Per risolvere il problema, è necessario creare nuovamente gli oggetti e le tabelle a cui si fa riferimento. Per ulteriori informazioni e prerequisiti prima di procedere, consulta [Converting between 3-byte and 4-byte Unicode character sets](https://dev.mysql.com/doc/refman/8.0/en/charset-unicode-conversion.html) nella documentazione di MySQL.

**zeroDatesCheck**  
**Livello di controllo preliminare: avviso**  
**Valori zero in date, datetime e timestamp**  
MySQL ora applica regole più rigide per quanto riguardo l’uso di valori zero nelle colonne di date, datetime e timestamp. Si consiglia di utilizzare le modalità `NO_ZERO_IN_DATE` e `NO_ZERO_DATE SQL` insieme alla modalità `strict`, poiché verranno unite alla modalità `strict` in una futura versione di MySQL.  
Se, al momento dell’esecuzione del controllo preliminare, l’impostazione `sql_mode` per una qualsiasi delle connessioni al database non include queste modalità, viene generato un avviso nel controllo preliminare. Gli utenti potrebbero comunque essere in grado di inserire valori di date, datetime e timestamp contenenti valori zero. Tuttavia, si consiglia vivamente di sostituire i valori zero con valori validi, poiché potrebbero avere un comportamento diverso in futuro e non funzionare correttamente. Poiché si tratta di un avviso, non impedisce l’esecuzione degli aggiornamenti, ma si consiglia di iniziare a pianificare le azioni necessarie.  
**Output di esempio:**  

```
{
  "id": "zeroDatesCheck",
  "title": "Zero Date, Datetime, and Timestamp values",
  "status": "OK",
  "description": "Warning: By default zero date/datetime/timestamp values are no longer allowed in MySQL, as of 5.7.8 NO_ZERO_IN_DATE and NO_ZERO_DATE are included in SQL_MODE by default. These modes should be used with strict mode as they will be merged with strict mode in a future release. If you do not include these modes in your SQL_MODE setting, you are able to insert date/datetime/timestamp values that contain zeros. It is strongly advised to replace zero values with valid ones, as they may not work correctly in the future.",
  "documentationLink": "https://lefred.be/content/mysql-8-0-and-wrong-dates/",
  "detectedProblems": [
      {
        "level": "Warning",
        "dbObject": "global.sql_mode",
        "description": "does not contain either NO_ZERO_DATE or NO_ZERO_IN_DATE which allows insertion of zero dates"
      },
      {
        "level": "Warning",
        "dbObject": "session.sql_mode",
        "description": " of 10 session(s) does not contain either NO_ZERO_DATE or NO_ZERO_IN_DATE which allows insertion of zero dates"
      }
  ]
}
```

### Controlli preliminari Aurora MySQL che restituiscono avvisi
<a name="precheck-descriptions-warnings.aurora"></a>

I seguenti controlli preliminari sono specifici di Aurora MySQL:
+ [auroraUpgradeCheckForRollbackSegmentHistoryLength](#auroraUpgradeCheckForRollbackSegmentHistoryLength)
+ [auroraUpgradeCheckForUncommittedRowModifications](#auroraUpgradeCheckForUncommittedRowModifications)

**auroraUpgradeCheckForRollbackSegmentHistoryLength**  
**Livello di controllo preliminare: avviso**  
**Verifica se la lunghezza dell’elenco della cronologia dei segmenti di rollback per il cluster è elevata**  
Come indicato in [auroraUpgradeCheckForIncompleteXATransactions](#auroraUpgradeCheckForIncompleteXATransactions), durante l’esecuzione del processo di aggiornamento a una versione principale, è essenziale che venga eseguito un [arresto pulito](https://dev.mysql.com/doc/refman/5.7/en/glossary.html#glos_slow_shutdown) dell’istanza database Aurora MySQL versione 2. Ciò garantisce che tutte le transazioni vengano eseguite o ripristinate e che InnoDB abbia eliminato tutti i record del log di undo.  
Se l’elenco della cronologia dei segmenti di rollback (HLL) del cluster di database ha una lunghezza elevata, il cluster può prolungare il tempo impiegato da InnoDB per completare l’eliminazione dei record del log di undo, con conseguenti tempi di inattività prolungati durante il processo di aggiornamento alla versione principale. Se il controllo preliminare rileva che l’HLL del cluster di database è elevata, genera un avviso. Sebbene ciò non impedisca il proseguimento dell’aggiornamento, ti consigliamo di monitorare attentamente l’HLL del tuo cluster di database. Mantenendola bassa, è possibile ridurre i tempi di inattività necessari per un aggiornamento a una versione principale. Per ulteriori informazioni sul monitoraggio dell’HLL, consulta [La lunghezza dell'elenco della cronologia di InnoDB è aumentata in modo significativo](proactive-insights.history-list.md).  
**Output di esempio:**  

```
{
  "id": "auroraUpgradeCheckForRollbackSegmentHistoryLength",
  "title": "Checks if the rollback segment history length for the cluster is high",
  "status": "OK",
  "description": "Rollback Segment History length is greater than 1M. Upgrade may take longer time.",
  "detectedProblems": [
      {
        "level": "Warning",
        "dbObject": "information_schema.innodb_metrics",
        "description": "The InnoDB undo history list length('trx_rseg_history_len') is 82989114. Upgrade may take longer due to purging of undo information for old row versions."
      }
  ]
}
```
Il controllo preliminare restituisce un avviso perché ha rilevato che l’HLL di undo di InnoDB era elevata nel cluster di database (82989114). Sebbene l’aggiornamento proceda, a seconda della quantità di operazioni di undo da eliminare, i tempi di inattività necessari durante il processo di aggiornamento vengono prolungati.  
Ti consigliamo di [esaminare le transazioni aperte](proactive-insights.history-list.md) nel tuo cluster di database prima di eseguire l’aggiornamento nell’ambiente di produzione, per assicurarti che l’HLL rimanga di dimensioni gestibili.

**auroraUpgradeCheckForUncommittedRowModifications**  
**Livello di controllo preliminare: avviso**  
**Verifica se ci sono numerose modifiche alle righe di cui non è stato eseguito il commit**  
Come indicato in [auroraUpgradeCheckForIncompleteXATransactions](#auroraUpgradeCheckForIncompleteXATransactions), durante l’esecuzione del processo di aggiornamento a una versione principale, è essenziale che venga eseguito un [arresto pulito](https://dev.mysql.com/doc/refman/5.7/en/glossary.html#glos_slow_shutdown) dell’istanza database Aurora MySQL versione 2. Ciò garantisce che tutte le transazioni vengano eseguite o ripristinate e che InnoDB abbia eliminato tutti i record del log di undo.  
Se il cluster di database ha transazioni che hanno modificato un elevato numero di righe, può prolungare il tempo impiegato da InnoDB per completare un rollback della transazione nell’ambito del processo di arresto pulito. Se il controllo preliminare rileva transazioni di lunga durata, con un elevato numero di righe modificate nel cluster di database, genera un avviso. Sebbene ciò non impedisca il proseguimento dell’aggiornamento, ti consigliamo di monitorare attentamente le dimensioni delle transazioni attive del tuo cluster di database. Mantenendola bassa, è possibile ridurre i tempi di inattività necessari per un aggiornamento a una versione principale.  
**Output di esempio:**  

```
{
  "id": "auroraUpgradeCheckForUncommittedRowModifications",
  "title": "Checks if there are many uncommitted modifications to rows",
  "status": "OK",
  "description": "Database contains uncommitted row changes greater than 10M. Upgrade may take longer time.",
  "detectedProblems": [
      {
        "level": "Warning",
        "dbObject": "information_schema.innodb_trx",
        "description": "The database contains 11000000 uncommitted row change(s) in 1 transaction(s). Upgrade may take longer due to transaction rollback."
      }
  ]
},
```
Il controllo preliminare segnala che il cluster di database contiene una transazione con 11.000.000 di modifiche alle righe senza commit, di cui dovrà essere eseguito il rollback durante il processo di arresto pulito. L’aggiornamento proseguirà, ma per ridurre i tempi di inattività durante il processo di aggiornamento, si consiglia di monitorare ed esaminare la situazione prima di eseguire l’aggiornamento sui cluster di produzione.  
Per visualizzare le transazioni attive nell’istanza database di scrittura, puoi utilizzare la tabella [information\$1schema.innodb\$1trx](https://dev.mysql.com/doc/refman/5.7/en/information-schema-innodb-trx-table.html). La seguente query dell’istanza database di scrittura mostra le transazioni correnti, il tempo di esecuzione, lo stato e le righe modificate per il cluster di database.  

```
# Example of uncommitted transaction
mysql> SELECT trx_started,
       TIME_TO_SEC(TIMEDIFF(now(), trx_started)) AS seconds_trx_has_been_running,
       trx_mysql_thread_id AS show_processlist_connection_id,
       trx_id,
       trx_state,
       trx_rows_modified AS rows_modified
FROM information_schema.innodb_trx;
+---------------------+------------------------------+--------------------------------+----------+-----------+---------------+
| trx_started         | seconds_trx_has_been_running | show_processlist_connection_id | trx_id   | trx_state | rows_modified |
+---------------------+------------------------------+--------------------------------+----------+-----------+---------------+
| 2024-08-12 18:32:52 |                         1592 |                          20041 | 52866130 | RUNNING   |      11000000 |
+---------------------+------------------------------+--------------------------------+----------+-----------+---------------+
1 row in set (0.01 sec)

# Example of transaction rolling back
mysql> SELECT trx_started,
       TIME_TO_SEC(TIMEDIFF(now(), trx_started)) AS seconds_trx_has_been_running,
       trx_mysql_thread_id AS show_processlist_connection_id,
       trx_id,
       trx_state,
       trx_rows_modified AS rows_modified
FROM information_schema.innodb_trx;
+---------------------+------------------------------+--------------------------------+----------+--------------+---------------+
| trx_started         | seconds_trx_has_been_running | show_processlist_connection_id | trx_id   | trx_state    | rows_modified |
+---------------------+------------------------------+--------------------------------+----------+--------------+---------------+
| 2024-08-12 18:32:52 |                         1719 |                          20041 | 52866130 | ROLLING BACK |      10680479 |
+---------------------+------------------------------+--------------------------------+----------+--------------+---------------+
1 row in set (0.01 sec)
```
Dopo il commit o il rollback della transazione, il controllo preliminare non restituisce più un avviso. Consulta la documentazione di MySQL e contatta il tuo team applicativo prima di eseguire il rollback di transazioni di grandi dimensioni, poiché il completamento del rollback può richiedere tempo, a seconda delle dimensioni delle transazioni.  

```
{
  "id": "auroraUpgradeCheckForUncommittedRowModifications",
  "title": "Checks if there are many uncommitted modifications to rows",
  "status": "OK",
  "detectedProblems": []
},
```
Per ulteriori informazioni sull’ottimizzazione della gestione delle transazioni InnoDB e sul potenziale impatto dell’esecuzione e del rollback di transazioni di grandi dimensioni sulle istanze database MySQL, consulta [Optimizing InnoDB transaction management](https://dev.mysql.com/doc/refman/5.7/en/optimizing-innodb-transaction-management.html) nella documentazione di MySQL.

## Note
<a name="precheck-descriptions-notices"></a>

In caso di esito negativo, i seguenti controlli preliminari generano notifiche ma l’aggiornamento può comunque procedere.

**sqlModeFlagCheck**  
**Livello di controllo preliminare: notifica**  
**Utilizzo di flag `sql_mode` obsoleti**  
Oltre a `MAXDB`, altre opzioni `sql_mode` sono state [rimosse](https://dev.mysql.com/doc/refman/8.0/en/mysql-nutshell.html): `DB2`, `MSSQL`, `MYSQL323`, `MYSQL40`, `ORACLE`, `POSTGRESQL`, `NO_FIELD_OPTIONS`, `NO_KEY_OPTIONS` e `NO_TABLE_OPTIONS`. A partire da MySQL 8.0, nessuno di questi valori può essere assegnato alla variabile di sistema `sql_mode`. Se questo controllo preliminare rileva sessioni aperte che utilizzano queste impostazioni `sql_mode`, assicurati che l’istanza database e i gruppi di parametri del cluster di database, nonché le applicazioni e le configurazioni client, siano aggiornati per disabilitarle. Per ulteriori informazioni, consulta la [documentazione di MySQL](https://dev.mysql.com/doc/refman/8.0/en/mysql-nutshell.html).  
**Output di esempio:**  

```
{
  "id": "sqlModeFlagCheck",
  "title": "Usage of obsolete sql_mode flags",
  "status": "OK",
  "detectedProblems": []
}
```
Per risolvere questi errori di controllo preliminare, consulta [maxdbFlagCheck](#maxdbFlagCheck).

## Errori, avvisi o notifiche
<a name="precheck-descriptions-all"></a>

Il seguente controllo preliminare può restituire un errore, un avviso o una notifica a seconda dell’output del controllo preliminare.

**checkTableOutput**  
**Livello di controllo preliminare: errore, avviso o notifica**  
**Problemi segnalati dal comando `check table x for upgrade`**  
Prima di avviare l’aggiornamento ad Aurora MySQL versione 3, `check table for upgrade` viene eseguito su ogni tabella degli schemi utente del cluster di database. Questo controllo preliminare non equivale a [checkTableMysqlSchema](#checkTableMysqlSchema).  
Il comando `check table for upgrade` esamina le tabelle per individuare eventuali problemi che potrebbero verificarsi durante l’aggiornamento a una versione più recente di MySQL. L’esecuzione di questo comando prima di tentare un aggiornamento può aiutare a identificare e risolvere eventuali incompatibilità in anticipo, rendendo più agevole l’effettivo processo di aggiornamento.  
Questo comando esegue diversi controlli su ogni tabella, come i seguenti:  
+ Verifica della compatibilità della struttura della tabella e dei metadati con la versione MySQL di destinazione
+ Verifica della presenza di eventuali funzionalità obsolete o rimosse utilizzate dalla tabella
+ Garanzia che la tabella possa essere aggiornata correttamente senza perdita di dati
A differenza di altri controlli preliminari, questo può restituire un errore, un avviso o una notifica a seconda dell’output di `check table`. Se questo controllo preliminare restituisce delle tabelle, esaminale attentamente insieme al messaggio e al codice restituito prima di iniziare l’aggiornamento. Per ulteriori informazioni, consulta [CHECK TABLE statement](https://dev.mysql.com/doc/refman/5.7/en/check-table.html) nella documentazione di MySQL.  
Vengono riportati un esempio di errore e un esempio di avviso.  
**Esempio di errore:**  

```
{
  "id": "checkTableOutput",
  "title": "Issues reported by 'check table x for upgrade' command",
  "status": "OK",
  "detectedProblems": [
      {
        "level": "Error",
        "dbObject": "test.parent",
        "description": "Table 'test.parent' doesn't exist"
      }
  ]
},
```
Il controllo preliminare segnala un errore che indica che la tabella `test.parent` non esiste.  
Il file `mysql-error.log` per l’istanza database di scrittura mostra che c’è un errore di chiave esterna.  

```
2024-08-13T15:32:10.676893Z 62 [Warning] InnoDB: Load table `test`.`parent` failed, the table has missing foreign key indexes. Turn off 'foreign_key_checks' and try again.
2024-08-13T15:32:10.676905Z 62 [Warning] InnoDB: Cannot open table test/parent from the internal data dictionary of InnoDB though the .frm file for the table exists.
Please refer to http://dev.mysql.com/doc/refman/5.7/en/innodb-troubleshooting.html for how to resolve the issue.
```
Accedi all’istanza database di scrittura ed esegui `show engine innodb status\G` per ottenere maggiori informazioni sull’errore della chiave esterna.  

```
mysql> show engine innodb status\G
*************************** 1. row ***************************
  Type: InnoDB
  Name:
Status:
=====================================
2024-08-13 15:33:33 0x14ef7b8a1700 INNODB MONITOR OUTPUT
=====================================
.
.
.
------------------------
LATEST FOREIGN KEY ERROR
------------------------
2024-08-13 15:32:10 0x14ef6dbbb700 Error in foreign key constraint of table test/child:
there is no index in referenced table which would contain
the columns as the first columns, or the data types in the
referenced table do not match the ones in table. Constraint:
,
  CONSTRAINT `fk_pname` FOREIGN KEY (`p_name`) REFERENCES `parent` (`name`)
The index in the foreign key in table is p_name_idx
Please refer to http://dev.mysql.com/doc/refman/5.7/en/innodb-foreign-key-constraints.html for correct foreign key definition.
.
.
```
Il messaggio `LATEST FOREIGN KEY ERROR` segnala che il vincolo di chiave esterna `fk_pname` nella tabella `test.child`, che fa riferimento alla tabella `test.parent`, presenta un indice mancante o una mancata corrispondenza del tipo di dati. La documentazione di MySQL sui [vincoli di chiave esterna](https://dev.mysql.com/doc/refman/5.7/en/create-table-foreign-keys.html) spiega che le colonne a cui si fa riferimento in una chiave esterna devono avere un indice associato e che le colonne principale/secondaria devono utilizzare lo stesso tipo di dati.  
Per verificare se il problema è correlato a un indice mancante o a una mancata corrispondenza del tipo di dati, accedi al database e controlla le definizioni della tabella disabilitando temporaneamente la variabile di sessione [foreign\$1key\$1checks](https://dev.mysql.com/doc/refman/5.7/en/create-table-foreign-keys.html#foreign-key-checks). Una volta fatto ciò, possiamo vedere che il vincolo secondario in questione (`fk_pname`) utilizza `p_name varchar(20) CHARACTER SET latin1 DEFAULT NULL` per fare riferimento alla tabella principale `name varchar(20) NOT NULL`. La tabella principale utilizza `DEFAULT CHARSET=utf8`, ma la colonna `p_name` della tabella secondaria utilizza `latin1`, quindi viene generato l’errore di mancata corrispondenza del tipo di dati.  

```
mysql> show create table parent\G
ERROR 1146 (42S02): Table 'test.parent' doesn't exist

mysql> show create table child\G
*************************** 1. row ***************************
       Table: child
Create Table: CREATE TABLE `child` (
  `id` int(11) NOT NULL,
  `p_name` varchar(20) CHARACTER SET latin1 DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `p_name_idx` (`p_name`),
  CONSTRAINT `fk_pname` FOREIGN KEY (`p_name`) REFERENCES `parent` (`name`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
1 row in set (0.00 sec)

mysql> set foreign_key_checks=0;
Query OK, 0 rows affected (0.00 sec)

mysql> show create table parent\G
*************************** 1. row ***************************
       Table: parent
Create Table: CREATE TABLE `parent` (
  `name` varchar(20) NOT NULL,
  PRIMARY KEY (`name`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
1 row in set (0.00 sec)

mysql> show create table child\G
*************************** 1. row ***************************
       Table: child
Create Table: CREATE TABLE `child` (
  `id` int(11) NOT NULL,
  `p_name` varchar(20) CHARACTER SET latin1 DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `p_name_idx` (`p_name`),
  CONSTRAINT `fk_pname` FOREIGN KEY (`p_name`) REFERENCES `parent` (`name`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
1 row in set (0.00 sec)
```
Per risolvere questo problema, possiamo modificare la tabella secondaria in modo che utilizzi lo stesso set di caratteri della tabella principale oppure modificare la tabella principale in modo che utilizzi lo stesso set di caratteri della tabella secondaria. In questo esempio, poiché la tabella secondaria utilizza esplicitamente `latin1` nella definizione della colonna `p_name`, viene eseguito `ALTER TABLE` per modificare il set di caratteri in `utf8`.  

```
mysql> alter table child modify p_name varchar(20) character set utf8 DEFAULT NULL;
Query OK, 0 rows affected (0.06 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> flush tables;
Query OK, 0 rows affected (0.01 sec)
```
Una volta fatto ciò, il controllo preliminare viene superato e l’aggiornamento può procedere.  
**Esempio di avviso:**  

```
{
  "id": "checkTableOutput",
  "title": "Issues reported by 'check table x for upgrade' command",
  "status": "OK",
  "detectedProblems": [
      {
        "level": "Warning",
        "dbObject": "test.orders",
        "description": "Trigger test.orders.delete_audit_trigg does not have CREATED attribute."
      }
  ]
}
```
Il controllo preliminare segnala un avviso per il trigger `delete_audit_trigg` sulla tabella `test.orders` perché non ha un attributo `CREATED`. Secondo quanto riportato in [Checking version compatibility](https://dev.mysql.com/doc/refman/5.7/en/check-table.html#check-table-version-compatibility) nella documentazione di MySQL, questo messaggio è informativo e viene stampato per i trigger creati prima di MySQL 5.7.2.  
Poiché si tratta di un avviso, non impedisce il proseguimento dell’aggiornamento. Tuttavia, se desideri risolvere il problema, puoi creare nuovamente il trigger in questione; una volta fatto ciò, il controllo preliminare ha esito positivo senza avvisi.  

```
{
  "id": "checkTableOutput",
  "title": "Issues reported by 'check table x for upgrade' command",
  "status": "OK",
  "detectedProblems": []
},
```

# Come eseguire un aggiornamento in loco
<a name="AuroraMySQL.Upgrading.Procedure"></a>

Ti consigliamo di rivedere il materiale di background in [Come funziona l'aggiornamento della versione principale di Aurora MySQL in loco](AuroraMySQL.Updates.MajorVersionUpgrade.md#AuroraMySQL.Upgrading.Sequence).

Esegui eventuali operazioni di pianificazione e test pre-aggiornamento, come descritto in [Pianificazione di un aggiornamento della versione principale per un cluster Aurora MySQL](AuroraMySQL.Updates.MajorVersionUpgrade.md#AuroraMySQL.Upgrading.Planning).

## Console
<a name="AuroraMySQL.Upgrading.ModifyingDBCluster.CON"></a>

Nell'esempio seguente viene aggiornato il cluster database `mydbcluster-cluster` ad Aurora MySQL versione 3.04.1.

**Per aggiornare la versione principale di un cluster di database Aurora MySQL**

1. Accedi alla Console di gestione AWS e apri la console Amazon RDS all'indirizzo [https://console.aws.amazon.com/rds/](https://console.aws.amazon.com/rds/).

1. 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](#AuroraMySQL.Upgrading.ParamGroups).

1.  Nel riquadro di navigazione, scegliere **Databases (Database)**. 

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

1.  Scegliere **Modify (Modifica)**. 

1.  Per **Versione**, scegli una versione principale di Aurora MySQL.

   In genere consigliamo di utilizzare la versione secondaria più recente della versione principale. In questo caso viene scelta la versione predefinita corrente.  
![\[Aggiornamento locale di un cluster di database Aurora MySQL da versione 2 a versione 3\]](http://docs.aws.amazon.com/it_it/AmazonRDS/latest/AuroraUserGuide/images/ams-upgrade-v2-v3.png)

1.  Scegli **Continua**. 

1.  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)**. 

1.  (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](AuroraMySQL.Upgrading.Troubleshooting.md) per la procedura da intraprendere. 

1. 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](#AuroraMySQL.Upgrading.ParamGroups).
**Nota**  
 Per eseguire questo passaggio, è necessario riavviare nuovamente il cluster per applicare il nuovo gruppo di parametri. 

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

## AWS CLI
<a name="AuroraMySQL.Upgrading.ModifyingDBCluster.CLI"></a>

Per aggiornare la versione principale di un cluster di database Aurora MySQL, utilizzare il comando AWS CLI CLI [modify-db-cluster](https://docs.aws.amazon.com/cli/latest/reference/rds/modify-db-cluster.html) con i seguenti parametri obbligatori:
+ `--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

Nell'esempio seguente viene aggiornato il cluster database `sample-cluster` ad Aurora MySQL versione 3.04.1. L'aggiornamento avviene immediatamente, invece di attendere la successiva finestra di manutenzione.

**Example**  
Per Linux, macOS o 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
```
È possibile combinare altri comandi della CLI con `modify-db-cluster` per creare un processo end-to-end automatizzato per l'esecuzione e la verifica degli aggiornamenti. Per maggiori informazioni ed esempi, vedi [Esercitazione sull'aggiornamento in loco di Aurora MySQL](AuroraMySQL.Upgrading.Tutorial.md).

**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](https://docs.aws.amazon.com/cli/latest/reference/rds/modify-global-cluster.html) invece di `modify-db-cluster`. Per ulteriori informazioni, consulta [Principali aggiornamenti in loco per database globali](#AuroraMySQL.Upgrading.GlobalDB).

## API RDS
<a name="AuroraMySQL.Upgrading.ModifyingDBCluster.API"></a>

Per aggiornare la versione principale di un cluster di database Aurora MySQL, utilizza l'operazione [ModifyDBCluster](https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_ModifyDBCluster.html) 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](https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_ModifyGlobalClusterParameterGroup.html) invece di `ModifyDBCluster`. Per ulteriori informazioni, consulta [Principali aggiornamenti in loco per database globali](#AuroraMySQL.Upgrading.GlobalDB).

## Come gli aggiornamenti in loco influiscono sui gruppi di parametri per un cluster
<a name="AuroraMySQL.Upgrading.ParamGroups"></a>

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, è possibile eseguire un aggiornamento in loco da Aurora MySQL versione 2 alla versione 3 solo se il parametro `lower_case_table_names` è impostato sull’opzione predefinita e il database globale viene riavviato. Per ulteriori informazioni sui metodi disponibili all'uso, consulta [Aggiornamenti di una versione principale](aurora-global-database-upgrade.md#aurora-global-database-upgrade.major).

## Modifiche delle proprietà del cluster tra versioni di Aurora MySQL
<a name="AuroraMySQL.Upgrading.Attrs"></a>

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
<a name="AuroraMySQL.Upgrading.GlobalDB"></a>

 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](AuroraMySQL.Updates.MajorVersionUpgrade.md#AuroraMySQL.Upgrading.Sequence). Quando specifichi cosa aggiornare, assicurati di scegliere il cluster di database globale anziché uno dei cluster in esso contenuti.

Se utilizzi il plugin Console di gestione AWS, scegli l'articolo con il ruolo **Global database (Database globale)**.

![\[Aggiornamento del cluster di database globale\]](http://docs.aws.amazon.com/it_it/AmazonRDS/latest/AuroraUserGuide/images/aurora-global-databases-major-upgrade-global-cluster.png)


 Se si utilizza la AWS CLI o l'API RDS, avviare il processo di aggiornamento chiamando il comando [modify-global-cluster](https://docs.aws.amazon.com/cli/latest/reference/rds/modify-global-cluster.html) o l'operazione [ModifyGlobalCluster](https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_ModifyGlobalCluster.html). 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 database globale Aurora MySQL mediante la AWS CLI, utilizza il comando [modify-global-cluster](https://docs.aws.amazon.com/cli/latest/reference/rds/modify-global-cluster.html) con i seguenti parametri obbligatori: 
+  `--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 3.04.2.

**Example**  
Per Linux, macOS o Unix:  

```
aws rds modify-global-cluster \
          --global-cluster-identifier global_cluster_identifier \
          --engine aurora-mysql \
          --engine-version 8.0.mysql_aurora.3.04.2 \
          --allow-major-version-upgrade
```
Per Windows:  

```
aws rds modify-global-cluster ^
          --global-cluster-identifier global_cluster_identifier ^
          --engine aurora-mysql ^
          --engine-version 8.0.mysql_aurora.3.04.2 ^
          --allow-major-version-upgrade
```

## Aggiornamenti in loco per cluster di database con repliche di lettura tra Regioni
<a name="AuroraMySQL.Upgrading.XRRR"></a>

È possibile aggiornare un cluster di database Aurora con una replica di lettura tra Regioni utilizzando la procedura di aggiornamento in loco, ma occorre tenere a mente alcune considerazioni:
+ È necessario prima aggiornare il cluster di database della replica di lettura. Se si tenta di eseguire prima l’aggiornamento del cluster primario, si riceverà un messaggio di errore del tipo seguente:

  Unable to upgrade DB cluster test-xr-primary-cluster because the associated Aurora cross-Region replica test-xr-replica-cluster isn’t patched yet. Upgrade the Aurora cross-Region replica and try again.

  Ciò significa che il cluster di database primario non può avere una versione del motore di database superiore a quella del cluster di replica.
+ Prima di aggiornare il cluster di database primario, interrompi il carico di lavoro di scrittura e disabilita tutte le nuove richieste di connessione all’istanza database di scrittura del cluster primario.
+ Quando aggiorni il cluster primario, scegli un gruppo di parametri del cluster di database personalizzato con il parametro `binlog_format` impostato su un valore che supporti la replica con registrazione di log binari, ad esempio `MIXED`.

  Per ulteriori informazioni sull'utilizzo di registrazione binaria con Aurora, consulta [Replica tra Aurora e MySQL o tra Aurora e un altro cluster di database Aurora (replica dei log binari)](AuroraMySQL.Replication.MySQL.md). Per ulteriori informazioni sulla modifica dei parametri di configurazione di Aurora MySQL, consulta [Parametri di configurazione Aurora MySQL](AuroraMySQL.Reference.ParameterGroups.md) e [Gruppi di parametri per Amazon Aurora](USER_WorkingWithParamGroups.md).
+ Non lasciar passare troppo tempo tra l’aggiornamento del cluster di replica e l’aggiornamento del cluster di database primario. Si consiglia di non attendere oltre la finestra di manutenzione successiva.
+ Dopo aver aggiornato il cluster di database primario, riavvia la relativa istanza database di scrittura. Il gruppo di parametri del cluster di database personalizzato che abilita la replica binlog non ha effetto finché l’istanza database di scrittura non viene riavviata.
+ Non riavviare il carico di lavoro di scrittura e non abilitare le connessioni all’istanza database di scrittura prima di aver verificato che la replica tra Regioni sia stata riavviata e che il ritardo di replica nella Regione AWS sia pari a 0.

# Esercitazione sull'aggiornamento in loco di Aurora MySQL
<a name="AuroraMySQL.Upgrading.Tutorial"></a>

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.11.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 Aurora MySQL 3.x alle quali è possibile aggiornare il cluster dipendono dalla versione 2.x attualmente in esecuzione sul cluster e dalla Regione AWS in cui si trova il cluster. 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.04.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.11.2

aws rds describe-db-engine-versions --engine aurora-mysql --engine-version 5.7.mysql_aurora.2.11.2 \
  --query '*[].[ValidUpgradeTarget]'
...
{
    "Engine": "aurora-mysql",
    "EngineVersion": "8.0.mysql_aurora.3.04.0",
    "Description": "Aurora MySQL 3.04.0 (compatible with MySQL 8.0.28)",
    "AutoUpgrade": false,
    "IsMajorVersionUpgrade": true,
    "SupportedEngineModes": [
        "provisioned"
    ],
    "SupportsParallelQuery": true,
    "SupportsGlobalDatabases": true,
    "SupportsBabelfish": false,
    "SupportsIntegrations": 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.11.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.04.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.04.0 --apply-immediately --allow-major-version-upgrade
{
  "DBClusterIdentifier": "mynewdbcluster",
  "Status": "available",
  "Engine": "aurora-mysql",
  "EngineVersion": "5.7.mysql_aurora.2.11.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.11.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.04.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.11.2. Nell’output di `describe-db-engine-versions`, i valori `False` e `True` rappresentano la proprietà `IsMajorVersionUpgrade`. Dalla versione 2.11.2, è possibile eseguire l'aggiornamento ad altre versioni 2.\$1. 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.\$1 visualizzate nell'elenco.

```
aws rds describe-db-clusters --db-cluster-identifier mynewdbcluster \
  --query '*[].{EngineVersion:EngineVersion}' --output text
5.7.mysql_aurora.2.11.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.11.3 False
5.7.mysql_aurora.2.11.4 False
5.7.mysql_aurora.2.11.5 False
5.7.mysql_aurora.2.11.6 False
5.7.mysql_aurora.2.12.0 False
5.7.mysql_aurora.2.12.1 False
5.7.mysql_aurora.2.12.2 False
5.7.mysql_aurora.2.12.3 False
8.0.mysql_aurora.3.04.0 True
8.0.mysql_aurora.3.04.1 True
8.0.mysql_aurora.3.04.2 True
8.0.mysql_aurora.3.04.3 True
8.0.mysql_aurora.3.05.2 True
8.0.mysql_aurora.3.06.0 True
8.0.mysql_aurora.3.06.1 True
8.0.mysql_aurora.3.07.1 True

aws rds modify-db-cluster --db-cluster-identifier mynewdbcluster \
  --engine-version 8.0.mysql_aurora.3.04.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, `describe-events` restituisce 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 delle cause degli errori di aggiornamento a una versione principale di Aurora MySQL
<a name="AuroraMySQL.Upgrading.failure-events"></a>

Nel [tutorial](AuroraMySQL.Upgrading.Tutorial.md), l’aggiornamento dalla versione 2 alla versione 3 di Aurora MySQL è riuscito. Ma se l’aggiornamento non fosse riuscito, vorresti sapere perché.

È possibile iniziare utilizzando il comando `describe-events` dell’interfaccia AWS CLI per esaminare gli eventi del cluster di database. Questo esempio mostra gli eventi delle ultime 10 ore di `mydbcluster`.

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

In questo caso, si è verificato un errore nei controlli preliminari 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.Upgrading.Troubleshooting.html",
            "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, esaminare i log del database per l’istanza database di scrittura. Quando un aggiornamento alla versione 3 di Aurora MySQL non riesce, l’istanza di scrittura contiene un file di log denominato `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 i campi oggetto e 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 inesatto.

```
OPTIMIZE TABLE problematic_upgrade.dangling_fulltext_index;
```

Provare quindi a eseguire nuovamente l’aggiornamento.

# Risoluzione dei problemi relativi all'aggiornamento in loco di Aurora MySQL
<a name="AuroraMySQL.Upgrading.Troubleshooting"></a>

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 | 
| --- | --- | --- | 
| Non sono ancora state applicate patch alla replica tra Regioni Aurora associata | Aurora annulla l'aggiornamento. | Aggiorna la replica tra Regioni Aurora 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 per questa condizione è la lunghezza dell’elenco della cronologia (HLL). Il processo di aggiornamento esegue il rollback delle modifiche non salvate. È possibile controllare l’HLL nell’output del comando SQL `SHOW ENGINE INNODB STATUS` o direttamente utilizzando la seguente query SQL: <pre>SELECT count FROM information_schema.innodb_metrics WHERE name = 'trx_rseg_history_len';</pre> Puoi monitorare la metrica `RollbackSegmentHistoryListLength` anche in Amazon CloudWatch. Valuta la possibilità di eseguire l’aggiornamento solo dopo che la lunghezza dell’elenco della cronologia sarà diminuita.  | 
| 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: [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/it_it/AmazonRDS/latest/AuroraUserGuide/AuroraMySQL.Upgrading.Troubleshooting.html)  | 
| L’utente master è stato eliminato | Aurora annulla l'aggiornamento. |   Non eliminare l’utente master.  Tuttavia, se per qualche motivo dovessi eliminare l’utente master, ripristinalo utilizzando i seguenti comandi SQL: <pre>CREATE USER 'master_username'@'%' IDENTIFIED BY 'master_user_password' REQUIRE NONE PASSWORD EXPIRE DEFAULT ACCOUNT UNLOCK;<br /><br />GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, RELOAD, PROCESS, REFERENCES, INDEX, ALTER, SHOW DATABASES, CREATE TEMPORARY TABLES, <br />LOCK TABLES, EXECUTE, REPLICATION SLAVE, REPLICATION CLIENT, CREATE VIEW, SHOW VIEW, CREATE ROUTINE, ALTER ROUTINE, CREATE USER, EVENT, <br />TRIGGER, LOAD FROM S3, SELECT INTO S3, INVOKE LAMBDA, INVOKE SAGEMAKER, INVOKE COMPREHEND ON *.* TO 'master_username'@'%' WITH GRANT OPTION;</pre>  | 

Per ulteriori dettagli sulla risoluzione dei problemi che causano l’esito negativo dei controlli preliminari di aggiornamento, consulta i seguenti blog:
+ [Amazon Aurora MySQL version 2 (with MySQL 5.7 compatibility) to version 3 (with MySQL 8.0 compatibility) upgrade checklist, Part 1](https://aws.amazon.com/blogs/database/amazon-aurora-mysql-version-2-with-mysql-5-7-compatibility-to-version-3-with-mysql-8-0-compatibility-upgrade-checklist-part-1/)
+ [Amazon Aurora MySQL version 2 (with MySQL 5.7 compatibility) to version 3 (with MySQL 8.0 compatibility) upgrade checklist, Part 2](https://aws.amazon.com/blogs/database/amazon-aurora-mysql-version-2-with-mysql-5-7-compatibility-to-version-3-with-mysql-8-0-compatibility-upgrade-checklist-part-2/)

 È 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
<a name="AuroraMySQL.mysql80-post-upgrade"></a>

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 allarmi di CloudWatch, script di configurazione e così via per utilizzare i nuovi nomi per tutte le metriche i cui nomi sono stati influenzati da modifiche linguistiche inclusive. Per un elenco di parametri, consultare [Cambiamenti linguistici inclusivi per Aurora MySQL versione 3](AuroraMySQL.Compare-v2-v3.md#AuroraMySQL.8.0-inclusive-language).
+ Aggiornare qualsiasi modello CloudFormation per utilizzare i nuovi nomi per qualsiasi parametro di configurazione i cui nomi sono stati influenzati da modifiche linguistiche inclusive. Per l'elenco completo dei parametri, consultare [Cambiamenti linguistici inclusivi per Aurora MySQL versione 3](AuroraMySQL.Compare-v2-v3.md#AuroraMySQL.8.0-inclusive-language).

## Indici spaziali
<a name="AuroraMySQL.mysql80-spatial"></a>

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)](https://dev.mysql.com/doc/refman/8.0/en/upgrading-from-previous-series.html)nel *Manuale di riferimento MySQL*.