Condividi tramite


Problemi noti con migrazioni al Database di Azure per MySQL

Le sezioni seguenti illustrano i problemi noti associati alle migrazioni al Database di Azure per MySQL.

Problema di migrazione dello schema per la destinazione del server flessibile MySQL v8.0

  • Errore: una migrazione a un server flessibile MySQL con versione del motore 8.0.30 o successiva può non riuscire quando la funzionalità per generare chiavi primarie invisibili per le tabelle InnoDB è abilitata (vedere MySQL :: MySQL 8.0 Manuale di riferimento :: 13.1.20.11 Generare chiavi primarie invisibili). L'errore potrebbe verificarsi durante la migrazione dello schema delle tabelle dall'origine alla destinazione, durante l'applicazione delle modifiche durante la fase di replica delle migrazioni online, durante il tentativo di migrazione o durante la migrazione a una destinazione in cui lo schema è stato migrato manualmente.

    Messaggio di errore potenziale:

    • "Errore sconosciuto".
    • "Impossibile generare la chiave primaria invisibile. La colonna con incremento automatico esiste già."
    • "La colonna 'my_row_id' nella tabella di destinazione 'nome tabella' nel database 'database' non esiste nella tabella di origine".

    Limitazione: la migrazione all'istanza del server flessibile MySQL in cui sql_generate_invisible_primary_key è abilitata non è supportata dal Servizio Migrazione del database.

    Soluzione alternativa: impostare il parametro del server sql_generate_invisible_primary_key per il server flessibile MySQL di destinazione su OFF. Il parametro del server è disponibile nel riquadro Parametri del server nella scheda Tutti per il server flessibile MySQL di destinazione. Eliminare anche il database di destinazione e ricominciare dalla migrazione del Servizio Migrazione del database per non avere schemi non corrispondenti.

Modalità SQL incompatibile

Una o più modalità SQL incompatibili possono causare molti errori diversi. Di seguito è riportato un errore di esempio, insieme alle modalità server da esaminare se si verifica questo errore.

  • Errore: si è verificato un errore durante la preparazione della tabella '{table}' nel database '{database}' nel server '{server}' per la migrazione durante l'attività '{activity}'. Di conseguenza, questa tabella non verrà migrata.

    Limitazione: questo errore si verifica quando una delle modalità SQL è impostata su un server ma non sull’altro.

    Soluzione alternativa:

    • NO_ZERO_DATE

      Quando il valore predefinito per una data in una tabella o i dati sono 0000-00-00 nell'origine e il server di destinazione ha la modalità NO_ZERO_DATE SQL impostata, lo schema e/o la migrazione dei dati avrà esito negativo. Esistono due possibili soluzioni alternative. La prima consiste nel modificare i valori predefiniti delle colonne in modo che siano NULL o una data valida. La seconda opzione consiste nel rimuovere la modalità NO_ZERO_DATE SQL dalla variabile di modalità SQL globale.

    • NO_AUTO_CREATE_USER

      Quando si eseguono migrazioni dal server di origine MySQL 5.7 al server di destinazione MySQL 8.0 che esegue la migrazione dello schema delle routine, si verificano errori se no_auto_create_user modalità SQL è impostata nel server di origine MySQL 5.7.

Problemi di conservazione binlog

  • Errore: errore irreversibile durante la lettura del binlog. Questo errore può indicare che il nome del file binlog e/o la posizione iniziale sono stati specificati in modo non corretto.

    Limitazione: questo errore si verifica se il periodo di conservazione binlog è troppo breve.

    Soluzione alternativa: in questo caso è possibile configurare più variabili: binlog_expire_logs_seconds determina il periodo di conservazione e l'eliminazione del binlog può essere impedita del tutto disattivando binlog_expire_logs_auto_purge. MySQL 5.7 ha la variabile di sistema deprecata expire_logs_days.

Timeout per il recupero dei blocchi di tabella

  • Errore: si è verificata un'eccezione durante il tentativo di acquisizione di un blocco di lettura nel server '{server}' per la creazione coerente della visualizzazione.

    Limitazione: questo errore si verifica quando in caso di timeout durante l'acquisizione di blocchi su tutte le tabelle quando è abilitata la coerenza transazionale.

    Soluzione alternativa: assicurarsi che le tabelle selezionate non siano bloccate o che non siano in esecuzione transazioni a esecuzione prolungata.

Scrivere più di 4 MB di dati in Archiviazione di Azure

  • Errore: il corpo della richiesta è troppo grande e supera il limite massimo consentito.

    Limitazione: questo errore si verifica probabilmente quando sono presenti troppe tabelle di cui eseguire la migrazione (>10k). È previsto un limite di 4 MB per ogni chiamata al servizio Archiviazione di Azure.

    Soluzione alternativa: contattare il supporto creando una richiesta di supporto e verranno forniti script personalizzati per accedere direttamente alle API REST.

Problema di doppia immissione della chiave

  • Errore: l'errore è spesso un sintomo di timeout, problemi di rete o scalabilità di destinazione.

    Potenziale messaggio di errore: impossibile scrivere un batch nella tabella '{table}' a causa di un errore SQL generato dal server di destinazione. Per fornire un po’ di contesto, il batch contiene un subset di righe restituite dalla query di origine seguente.

    Limitazione: questo errore può essere causato da un timeout o da una connessione interrotta alla destinazione, con conseguente duplicazione delle chiavi primarie. Può essere correlato anche a più migrazioni alla destinazione in esecuzione contemporaneamente o all'utente con carichi di lavoro di test in esecuzione nella destinazione durante l'esecuzione della migrazione. Inoltre, la destinazione può richiedere che le chiavi primarie siano univoche, anche se non sono necessarie per essere così sull'origine.

    Soluzione alternativa: per risolvere questo problema, assicurarsi che non siano in esecuzione migrazioni duplicate e che le chiavi primarie di origine siano univoche. Se l'errore persiste, contattare il supporto creando una richiesta di supporto ed verranno forniti degli script personalizzati per accedere direttamente alle API REST.

L'operazione replicata presentava un errore di righe non corrispondenti

  • Errore: la migrazione online non riesce a replicare il numero previsto di modifiche.

    Potenziale messaggio di errore: errore durante l'applicazione di record al server di destinazione letti dal log binario del server di origine. Le modifiche sono state avviate nel log binario '{mysql-bin.log}' e nella posizione '{position}' e sono terminate nel log binario '{mysql-bin.log}' e posizione '{position}'. Tutti i record nel server di origine prima di posizionare '{position}' nel log binario '{mysql-bin.log}' sono stati sottoposti a commit nella destinazione.

    Limitazione: nell'origine sono state inserite ed eliminate istruzioni in una tabella e le eliminazioni sono state eseguite da un indice univoco apparente.

    Soluzione alternativa: è consigliabile eseguire manualmente la migrazione della tabella.

Errore di troncamento dei dati della tabella

  • Errore: la colonna Enum presenta un valore Null in una o più righe e la modalità SQL di destinazione è impostata su strict.

    Potenziale messaggio di errore: impossibile scrivere un batch nella tabella '{table}' a causa di un errore di troncamento dei dati. Assicurarsi che i dati non siano troppo grandi per il tipo di dati della colonna nella tabella MySQL. Se il tipo di colonna è un enum, verificare che la modalità SQL non sia impostata come TRADITIONAL, STRICT_TRANS_TABLES o STRICT_ALL_TABLES e che sia la stessa sull'origine e sulla destinazione.

    Limitazione: l'errore si verifica quando i dati storici sono stati scritti nel server di origine quando avevano determinate impostazioni, ma quando vengono modificati, i dati non possono essere spostati.

    Soluzione alternativa: per risolvere il problema, è consigliabile modificare la modalità SQL di destinazione impostando valori non rigidi o modificando tutti i valori Null in modo che siano valori validi.

Creare un errore di oggetto

  • Errore: si è verificato un errore dopo che la convalida della visualizzazione non è riuscita.

    Limitazione: l'errore si verifica quando si tenta di eseguire la migrazione di una vista e non è possibile trovare la tabella a cui la vista dovrebbe fare riferimento.

    Soluzione alternativa: è consigliabile eseguire manualmente la migrazione delle viste.

Impossibile trovare la tabella

  • Errore: si è verificato un errore poiché non è possibile trovare la tabella a cui si sta facendo riferimento.

    Potenziale messaggio di errore: la pipeline non è riuscita a creare lo schema dell'oggetto '{object}' per l'attività '{activity}' usando la strategia MySqlSchemaMigrationViewUsingTableStrategy a causa di un'esecuzione di query.

    Limitazione: l'errore può verificarsi quando la vista fa riferimento a una tabella che è stata eliminata o rinominata oppure quando la vista è stata creata con informazioni non corrette o incomplete. Questo errore può verificarsi se viene eseguita la migrazione di un sottoinsieme di tabelle, ma le tabelle da cui dipendono non vengono migrate.

    Soluzione alternativa: è consigliabile eseguire manualmente la migrazione delle viste. Controllare se per la migrazione sono selezionate tutte le tabelle a cui si fa riferimento in chiavi esterne e istruzioni CREATE VIEW.

Tutte le connessioni in pool interrotte

  • Errore: tutte le connessioni nel server di origine sono state interrotte.

    Limitazione: l’errore si verifica quando tutte le connessioni acquisite all'inizio del carico iniziale vengono perse a causa del riavvio del server, dei problemi di rete, del traffico intenso sul server di origine o di altri problemi temporanei. Non è possibile rimediare a questo errore. Inoltre, questo errore si verifica se si tenta di eseguire la migrazione di un server durante la finestra di manutenzione.

    Soluzione alternativa: la migrazione deve essere riavviata ed è consigliabile aumentare le prestazioni del server di origine. Un altro problema è rappresentato dagli script che eliminano le connessioni a esecuzione prolungata, impedendo a questi script di funzionare.

Snapshot coerente interrotto

Limitazione: l'errore si verifica quando il cliente esegue DDL durante il caricamento iniziale dell'istanza di migrazione.

Soluzione alternativa: per risolvere questo problema, è consigliabile evitare di apportare modifiche DDL durante il caricamento iniziale.

Vincolo chiave sterna

  • Errore: l'errore si verifica quando si verifica una modifica nel tipo di chiave esterna a cui si fa riferimento dalla tabella.

    Potenziale messaggio di errore: la colonna '{pk column 1}' che fa riferimento e la colonna di riferimento '{fk column 1}' nel vincolo di chiave esterna '{key}' sono incompatibili.

    Limitazione: l'errore può impedire la migrazione dello schema di una tabella, perché la colonna PK nella tabella 1 potrebbe non essere compatibile con la colonna FK nella tabella 2.

    Soluzione alternativa: per risolvere questo problema, è consigliabile eliminare la chiave esterna e crearla nuovamente dopo il completamento del processo di migrazione.