Vai al contenuto
Infrastruttura

Migrazione del database senza downtime: ci stai nella finestra?

Dichiari motore, versioni, dimensioni, scritture e la finestra di fermo che hai. Lo strumento sceglie le strategie possibili per regole, non per preferenza, stima il fermo di ciascuna e ti dice se ci stai o no. Poi elenca i rischi del tuo caso, a partire da una versione fuori supporto.

Aggiornato il · da

Cosa vale nel tuo caso

Il calcolo avviene nella pagina: i dati non vengono mandati a un server per ottenere il risultato. La pagina scarica solo l'elenco pubblico delle date di fine supporto.

Il risultato apparirà qui

Come si usa

  1. 1

    Indica partenza e arrivo

    Motore e versione di partenza, motore e versione di destinazione. Basta la versione principale.

  2. 2

    Dai le misure

    Dimensione totale, tabella più grande, scritture al minuto nell'ora di punta e la finestra di fermo che puoi permetterti.

  3. 3

    Spunta cosa vale

    Log binario o WAL, chiavi primarie, cambio di charset o di schema, chiavi esterne, trigger, database gestiti, applicazione modificabile.

  4. 4

    Leggi il verdetto

    Ci stai o non ci stai, con la strategia più rapida tra quelle possibili e il perché delle escluse.

  5. 5

    Porta via i rischi

    Il registro dei rischi è costruito sul tuo caso, con i collegamenti agli articoli che li spiegano. Si copia in Markdown.

Perché un verdetto secco

La domanda vera, prima di una migrazione, è una sola: il fermo che serve sta dentro la finestra che hai? Un elenco di buone pratiche non risponde. Un confronto tra due numeri sì, e quando la risposta è no lo strumento lo dice, insieme a cosa la cambierebbe: attivare il log binario, poter toccare l'applicazione, rimandare la conversione del charset.

Il registro dei rischi nasce dai dati che inserisci, non da una lista fissa. Una conversione a utf8mb4 porta valori troncati, collation diverse e testi codificati due volte; un salto da MySQL 5.7 porta parole riservate nuove e un altro plugin di autenticazione; una destinazione gestita porta i limiti sui privilegi. E se la versione di partenza è fuori supporto, il verdetto si apre con quello.

Le sei strategie e le regole che le aprono

Ogni strategia ha condizioni che si possono verificare dai dati che inserisci. Lo strumento non sceglie quella che preferisce: tiene quelle le cui condizioni sono tutte vere e, tra queste, indica quella con il fermo più breve. Per ogni strategia esclusa scrive quale condizione manca.

  • Dump e restore: nessuna condizione, ed è la base di confronto.
  • Promozione di una replica: stesso motore e stessa versione principale, server gestiti da te, nessun cambio di charset o di schema.
  • Replica logica: log binario o WAL accessibile, motori compatibili (lo stesso, o da MySQL a MariaDB) e, per PostgreSQL, chiavi primarie su tutte le tabelle.
  • Cambio di schema online: stesso server e stessa versione, MySQL o MariaDB, chiavi primarie, nessuna chiave esterna.
  • Doppia scrittura: un'applicazione che si può modificare.
  • Blue-green: le condizioni della replica logica più un'applicazione che si può modificare.

Le strategie online fermano le scritture solo per il passaggio finale. Il dump e restore le ferma dall'inizio alla fine.

Come sostituire la stima con una misura

Le due velocità che lo strumento usa (30 GB all'ora per il dump, 10 per il restore con gli indici) sono valori di partenza. Su una copia del database si misurano in poco tempo:

  • MySQL e MariaDB: time mysqldump --single-transaction --routines --events nome_db | gzip > dump.sql.gz, poi time (gunzip < dump.sql.gz | mysql nome_db_prova) su un server simile alla destinazione;
  • PostgreSQL: time pg_dump -Fd -j 4 -f dump nome_db, poi time pg_restore -j 4 -d nome_db_prova dump.

Dividi i GB per le ore misurate e scrivi i due numeri nel risultato con la matita: il verdetto si ricalcola con i tuoi valori.

Cosa lo strumento non sa

Non legge il codice. Non sa quanto ritardo di replica l'applicazione tollera, se rilegge subito un dato appena scritto, o quali query si rompono con un nuovo sql_mode o una nuova collation. Sono le domande che decidono il giorno del passaggio.

Le velocità di dump e restore variano molto con dischi, rete, numero di indici e strumento usato, per questo restano modificabili. E le date di fine supporto vengono dal dataset pubblico di endoflife.date, aggiornato ogni giorno: per una decisione contrattuale vale la pagina del produttore.

Glossario

Termini tecnici usati in questa pagina, spiegati in due righe.

Finestra di fermo #
Il tempo in cui l'applicazione può restare ferma senza danni: notte, fine settimana, manutenzione concordata.
Log binario #
Il registro delle modifiche di MySQL e MariaDB che le repliche leggono per restare allineate.
WAL #
Write-ahead log di PostgreSQL: il registro delle modifiche su cui si basano replica fisica e logica.
Passaggio #
Il momento in cui si fermano le scritture, si verifica l'allineamento e l'applicazione punta al nuovo database.
Collation #
Le regole con cui il database confronta e ordina i testi: maiuscole, accenti, lingua.
DEFINER #
L'utente con i cui privilegi gira un trigger, una vista o una procedura in MySQL.

Domande frequenti

Si può migrare un database MySQL senza fermare il sito?
Quasi sempre il fermo si riduce a pochi minuti, quelli del passaggio finale. Serve una strategia online: replica logica dal log binario, promozione di una replica o, se l'applicazione si può modificare, doppia scrittura o blue-green. Zero assoluto è raro, perché per qualche secondo le scritture vanno fermate per non perdere dati.
Quanto dura un dump di MySQL?
Dipende da dischi, compressione, numero di tabelle e strumento. Lo strumento parte da 30 GB all'ora per il dump e 10 per il restore con gli indici, valori di partenza da sostituire con una misura su una copia: i comandi per farla sono nella sezione sulla misura.
Perché il restore è più lento del dump?
Perché il restore ricostruisce gli indici e verifica i vincoli, mentre il dump legge e scrive testo. Con molte tabelle indicizzate il tempo di restore può essere un multiplo di quello del dump.
Cosa succede alle scritture durante un dump?
Con --single-transaction su tabelle InnoDB il dump non blocca le scritture, ma quelle successive al suo inizio non sono nel file. Per questo, con dump e restore, le scritture vanno fermate dall'inizio del dump alla fine del restore.
Convertire a utf8mb4 è rischioso?
Va provato sui dati veri. I rischi tipici sono tre: valori che non entrano più nelle colonne perché un carattere può occupare 4 byte, ordinamenti e confronti diversi con la nuova collation, e testi codificati due volte se la connessione dichiara un charset sbagliato.
Posso passare da MySQL 5.7 a 8.4 in un colpo?
Con un dump e restore sì, provando lo schema e le query sulla nuova versione. Un aggiornamento sul posto invece passa da 8.0. In entrambi i casi conviene usare il controllo di compatibilità di MySQL Shell, util.checkForServerUpgrade.
La replica logica funziona tra MySQL e PostgreSQL?
Non in modo nativo: servono strumenti di terze parti che leggono il log binario e scrivono su PostgreSQL. Per questo lo strumento considera la replica logica solo tra motori compatibili, lo stesso motore o da MySQL a MariaDB.
Perché lo strumento parla della fine del supporto?
Perché una versione fuori supporto non riceve più correzioni di sicurezza, ed è spesso il motivo vero della migrazione. Se la versione di partenza è fuori supporto o lo sarà entro sei mesi, il verdetto si apre con quella data.
I dati che inserisco vengono salvati?
No. Il calcolo avviene in JavaScript nella pagina: i dati non vengono mandati a un server per ottenere il risultato e lo strumento non li salva nel browser. Come il resto del sito, la pagina raccoglie statistiche di navigazione.

Fonti usate

Leggi, tabelle ufficiali e implementazioni di riferimento su cui è stata verificata la logica del tool.

Hai un progetto o un dubbio tecnico?

Risposta entro 2 giorni lavorativi, entro 24 ore per emergenze tecniche. La prima call conoscitiva dura un'ora, è gratuita e non vincolante. Al termine ti dico con chiarezza se posso aiutarti, o ti indico chi può farlo meglio di me.

Scrivimi senza impegno

Vuoi una stima realistica per il tuo progetto?

Wizard di 7 domande, 2 minuti, gratuito. Output: range di giorni-uomo, range di prezzo orientativo e raccomandazione di ingaggio. Tariffa di riferimento 400 euro al giorno. Pensato per progetti backend custom, integrazioni, audit di sicurezza o automazione AI.

Calcola il preventivo