Questa pagina descrive i problemi e le incompatibilità noti che potresti riscontrare dopo aver eseguito un upgrade della versione principale da Cloud SQL per MySQL 5.7 a Cloud SQL per MySQL 8.0.
Per ulteriori informazioni sull'upgrade della versione principale, consulta Eseguire l'upgrade della versione principale del database sul posto. Per saperne di più sui log degli errori, consulta e Visualizzare i log degli errori.
Problemi di prestazioni
Le sezioni seguenti trattano i problemi di rendimento noti.
Problemi con la query SELECT DISTINCT
Se utilizzi la query SELECT DISTINCT in MySQL 8.0.18 fino a MySQL 8.0.20, potresti riscontrare
prestazioni ridotte. I tempi di esecuzione delle query potrebbero triplicarsi rispetto a MySQL 5.7.
Per ulteriori informazioni, consulta MySQL Bug #99593.
Per risolvere il problema, segui questi consigli per la risoluzione dei problemi:
- Esegui l'aggiornamento a MySQL 8.0.21, a qualsiasi versione secondaria successiva o all'ultima release.
- Se utilizzi MySQL 8.0.18 fino a MySQL 8.0.20, aggiorna
il valore del flag di database
internal_tmp_mem_storage_engineamemory:SET SESSION internal_tmp_mem_storage_engine='memory' ;
Problemi con le query GROUP BY
Se utilizzi query SELECT... GROUP BY in MySQL 8.0.36 o versioni precedenti,
potresti riscontrare prestazioni ridotte e tempi di esecuzione delle query più lunghi.
Ciò potrebbe accadere se la query utilizza il motore TempTable.
Per ulteriori informazioni, consulta il bug n. 107700 di MySQL.
Per risolvere il problema, segui questi consigli per la risoluzione dei problemi:
- Esegui l'aggiornamento a MySQL 8.0.37, a qualsiasi versione secondaria successiva o all'ultima release.
- Se utilizzi MySQL 8.0.36 o versioni precedenti, aggiorna il flag del database
internal_tmp_mem_storage_engineper utilizzare il motore di memoria anziché il motore delle tabelle temporanee:SET SESSION internal_tmp_mem_storage_engine='memory' ;
Problemi relativi ai thread con bassa concorrenza
Le istanze create in MySQL 8.0.22 o versioni successive che supportano applicazioni client con thread a bassa concorrenza potrebbero riscontrare problemi di prestazioni e tempi di esecuzione delle query più lunghi.
MySQL 8.0.22 ha introdotto il flag innodb_log_writer_threads per migliorare le prestazioni sui sistemi ad alta concorrenza. Questo flag è attivo per
impostazione predefinita. Se hai istanze create in MySQL 8.0.22 o versioni successive che supportano
applicazioni client con thread a bassa concorrenza, ti consigliamo di disattivare
il flag innodb_log_writer_threads.
Per ulteriori informazioni, consulta MySQL Bug #93734.
Problemi con JOINS
Se utilizzi query JOIN con la visualizzazione
eq_ref nelle istanze che utilizzano MySQL 8.0.29 fino a MySQL 8.0.32, potresti
riscontrare problemi di prestazioni significativi.
Per ulteriori informazioni, consulta il bug n. 109361 di MySQL.
Per risolvere il problema, esegui l'aggiornamento a MySQL 8.0.33, a qualsiasi versione secondaria successiva o all'ultima release.
Problemi con la clausola LIMIT e ORDER BY
Se esegui una query con le clausole LIMIT e ORDER BY in MySQL 8.0.32 o versioni precedenti, potresti riscontrare un problema di prestazioni. In
alcuni casi, per la stessa query potrebbe essere utilizzato un piano di query diverso in MySQL 8.0 rispetto a MySQL
5.7.
Per ulteriori informazioni, consulta Modifiche in MySQL 8.0.33.
Per risolvere il problema, esegui l'aggiornamento a MySQL 8.0.33, a qualsiasi versione secondaria successiva o all'ultima release.
Problemi di perdita di memoria in MySQL 8.0
Le seguenti sezioni trattano i problemi noti di perdita di memoria in MySQL 8.0 o versioni successive. Questi problemi influiscono probabilmente anche sulle prestazioni dell'istanza.
Perdita di memoria causata dalle query di intervallo
Se utilizzi l'ottimizzatore di intervalli nelle istanze con MySQL 8.0.16 fino a MySQL 8.0.28, potrebbe verificarsi un elevato consumo di memoria da parte del file di codice e della funzione memory/sql/THD::main_mem_root. Ciò può causare l'esaurimento della memoria (OOM) dell'istanza.
Per maggiori informazioni, consulta il bug n. 105331 di MySQL.
Per risolvere il problema, esegui l'aggiornamento a MySQL 8.0.29, a qualsiasi versione secondaria successiva o all'ultima release.
Perdita di memoria associata alle stored procedure
Se esegui una query in una stored procedure nelle istanze con MySQL 8.0.27
fino alla versione 8.0.31, la query potrebbe consumare una quantità molto elevata di memoria nel file di codice e nella funzione memory/sql/sp_head::execute_mem_root.
Per ulteriori informazioni, consulta il bug n. 107327 di MySQL.
Per risolvere il problema, esegui l'aggiornamento a MySQL 8.0.32, a qualsiasi versione secondaria successiva o all'ultima release.
Perdita di memoria causata dall'accesso a una visualizzazione utilizzando SELECT
Se utilizzi la query SELECT in MySQL 8.0.35 o versioni precedenti e la tua
applicazione utilizza numerose chiamate di visualizzazione, potresti riscontrare una perdita di memoria
notevole.
Inoltre, se la visualizzazione DEFINER è impostata su root@'%' o su un utente derivato dal ruolo cloudsqlsuperuser, potresti riscontrare una perdita di memoria. Questo perché il ruolo cloudsqlsuperuser dispone di privilegi di revoca parziale.
Per maggiori informazioni, consulta Bug #103133 di MySQL.
Per risolvere il problema, segui questi consigli per la risoluzione dei problemi:
- Esegui l'aggiornamento a MySQL 8.0.36, a qualsiasi versione secondaria successiva o all'ultima release.
- Se utilizzi MySQL 8.0.35 o versioni precedenti, utilizza un utente separato
per la visualizzazione
DEFINER, in particolare un utente che non disponga di privilegi di revoca parziale. Se devi utilizzare l'utenteroot@'%'o il ruolocloudsqlsuperuser, assicurati di utilizzarli solo per le procedure amministrative e non per le query delle applicazioni. Se la perdita di memoria persiste, devi eseguire l'upgrade a MySQL 8.0.36, a qualsiasi versione secondaria successiva o all'ultima release.
Problemi di replica
La sezione seguente tratta i problemi noti relativi alla replica.
Problemi con la replica parallela
Se utilizzi la replica parallela in una replica multithread con il
componente slave_preserve_commit_order abilitato e l'istanza
viene utilizzata per carichi di lavoro con molte scritture, le operazioni dell'istanza potrebbero essere sospese a tempo indeterminato
a causa di un deadlock e dell'accumulo di ritardo di replica.
Questo problema si verifica in MySQL 8.0.27 fino a MySQL 8.0.32.
Per ulteriori informazioni, consulta MySQL Bug #95863 e MySQL Bug #103636.
Per risolvere il problema, segui questi consigli per la risoluzione dei problemi:
- Esegui l'aggiornamento a MySQL 8.0.33, a qualsiasi versione secondaria successiva o all'ultima release.
- Disattiva la replica parallela per verificare la causa del problema e poi pianifica un upgrade corretto. Sebbene la disattivazione della replica parallela possa risolvere temporaneamente il problema, non è consigliata come soluzione a lungo termine.
Problemi relativi ai privilegi
Le sezioni seguenti descrivono i problemi noti relativi ai privilegi.
Modifiche ai privilegi
MySQL ha modificato i sistemi di gestione della sicurezza e degli account in MySQL 8.0.
Dopo l'upgrade a MySQL 8.0, gli utenti creati in MySQL 5.7 potrebbero non avere gli stessi privilegi e lo stesso accesso degli utenti creati in MySQL 8.0. Di conseguenza, gli utenti creati in MySQL 5.7 potrebbero ricevere un messaggio di errore di accesso negato nei seguenti scenari:
- Gli utenti di cui è stato eseguito l'upgrade da MySQL 5.7 potrebbero non disporre dei privilegi
CREATE ROLEeDROP ROLE, in quanto questi privilegi non esistevano in MySQL 5.7. - Gli utenti che hanno eseguito l'upgrade da MySQL 5.7 potrebbero non essere in grado di eseguire il comando
KILL, che ora richiede i privilegiCONNECTION_ADMINper funzionare in MySQL 8.0.
Per ulteriori informazioni, puoi controllare tutti i privilegi disponibili in MySQL 8.0.
Un messaggio di errore di esempio è simile al seguente:
ERROR 1227 (42000): Access denied; you need (at least one of) the GRANT OPTION privilege(s) for this operation
Non puoi assegnare direttamente nessuno di questi privilegi aggiornati a un utente esistente.
Per risolvere il problema, un amministratore con i privilegi GRANT OPTION deve reimpostare i privilegi utente dopo l'upgrade per completare l'upgrade della versione principale.
Per ulteriori informazioni, vedi Eseguire l'upgrade in loco della versione principale del database.
Le modifiche ai privilegi causano l'errore Accesso negato
Gli utenti creati in MySQL 5.7 e aggiornati a MySQL 8.0 potrebbero non riuscire a connettersi al database a causa di un problema di privilegi. In questi casi, gli utenti potrebbero ricevere il seguente messaggio di errore:
Access denied for user 'USER_NAME'@'%' to database 'MY_DATABASE_NAME' ;
MySQL 8.0.16 ha introdotto il flag di database partial_revokes e lo ha abilitato per impostazione predefinita, consentendo la revoca parziale dei privilegi utente.
Se gli utenti creati in MySQL 5.7 sono stati definiti utilizzando caratteri jolly, potrebbero non essere in grado di connettersi al database. I caratteri jolly non sono più supportati in MySQL 8.0.16 o versioni successive. Ciò significa che MySQL non riesce a trovare una corrispondenza esatta per il database e l'utente, il che potrebbe causare la mancata assegnazione di alcuni privilegi esistenti durante l'upgrade.
Questo problema riguarda MySQL 8.0.16 o versioni successive.
Per ulteriori informazioni, vedi Configurare i flag del database e Gestione della sicurezza e degli account.
Per risolvere il problema, un amministratore deve assegnare manualmente le autorizzazioni agli utenti in MySQL 8.0.
Modifiche ai valori dei flag tra MySQL 5.7 e MySQL 8.0
Quando esegui l'upgrade da MySQL 5.7 a MySQL 8.0, alcuni valori dei flag di database potrebbero essere modificati a causa di una variazione dei valori predefiniti tra le versioni. Questo comportamento potrebbe causare problemi di prestazioni.
Per ulteriori informazioni, consulta la sezione Nuovi valori predefiniti in MySQL 8.0.
Per risolvere il problema, assicurati che tutti i valori dei flag di database assegnati manualmente impostati in MySQL 5.7 vengano comunque applicati dopo l'upgrade a MySQL 8.0 o versioni successive. Ti consigliamo di lasciare i valori predefiniti assegnati ai flag di sistema.
Passaggi successivi
- Esegui l'upgrade della versione principale del database eseguendo la migrazione dei dati
- Esegui l'upgrade della versione secondaria del database