Condividi tramite


Eseguire la migrazione del database MySQL a Database di Azure per MySQL - Server flessibile usando dump e ripristino

Questo articolo illustra due modi comuni per eseguire il backup e il ripristino di database in Database di Azure per MySQL server flessibile.

  • Dump e ripristino dalla riga di comando (tramite mysqldump).
  • Dump e ripristino con PHPMyAdmin.

È anche possibile fare riferimento a Guida alla migrazione del database per informazioni dettagliate e casi d'uso sulla migrazione dei database a Database di Azure per MySQL server flessibile. Questa guida fornisce indicazioni che consentono di pianificare ed eseguire correttamente una migrazione di MySQL ad Azure.

Operazioni preliminari

Per proseguire con questa guida è necessario:

Suggerimento

Se si vuole eseguire la migrazione di database di grandi dimensioni con dimensioni di database superiori a 1 GB, è possibile prendere in considerazione l'uso di strumenti della community come mydumper/myloader che supporta l'esportazione e l'importazione parallele. Informazioni su come eseguire la migrazione di database MySQL di grandi dimensioni.

Casi d’uso comuni per dump e ripristino

I casi d'uso più comuni sono:

  • Spostamento da un altro provider di servizi gestiti: la maggior parte del provider di servizi gestiti potrebbe non fornire l'accesso al file di archiviazione fisica per motivi di sicurezza, quindi il backup logico e il ripristino sono l'unica opzione di migrazione.

  • Migrazione dall'ambiente locale o dalla macchina virtuale: Database di Azure per MySQL server flessibile non supporta il ripristino di backup fisici, che esegue il backup logico e il ripristino come approccio ONLY.

  • Spostamento dell'archiviazione di backup dall'archiviazione con ridondanza locale all'archiviazione con ridondanza geografica: Database di Azure per MySQL server flessibile consente di configurare l'archiviazione con ridondanza locale o con ridondanza geografica per il backup solo durante la creazione del server. Dopo il provisioning del server, non è possibile cambiare l'opzione di ridondanza per l'archivio di backup. Per spostare l'archiviazione di backup dall'archiviazione con ridondanza locale all'archiviazione con ridondanza geografica, dump e ripristino è l'UNICA opzione.

  • Migrazione da motori di archiviazione alternativi a InnoDB: Database di Azure per MySQL server flessibile supporta solo il motore di archiviazione InnoDB e pertanto non supporta motori di archiviazione alternativi. Se le tabelle sono configurate con altri motori di archiviazione, convertirle nel formato del motore InnoDB prima della migrazione a Database di Azure per MySQL server flessibile.

    Ad esempio, se si dispone di un'app WordPress o Web utilizzando le tabelle MyISAM, convertire prima di tutto tali tabelle eseguendo la migrazione in formato InnoDB prima di eseguire il ripristino in Database di Azure per MySQL server flessibile. Usare la clausola ENGINE=InnoDB per impostare il motore usato per la creazione di una nuova tabella e quindi trasferire i dati nella tabella compatibile prima del ripristino.

    INSERT INTO innodb_table SELECT * FROM myisam_table ORDER BY primary_key_columns
    

Importante

  • Per evitare eventuali problemi di compatibilità, verificare che venga usata la stessa versione di MySQL nei sistemi di origine e di destinazione durante il dump dei database. Ad esempio, se il server MySQL esistente è versione 5.7, è necessario eseguire la migrazione a un'istanza del server flessibile Database di Azure per MySQL configurata per l'esecuzione della versione 5.7. Il mysql_upgrade comando non funziona in un'istanza del server flessibile di Database di Azure per MySQL e non è supportato.
  • Se è necessario eseguire l'aggiornamento in tutte le versioni di MySQL, eseguire prima il dump o esportare il database di una versione inferiore in una versione successiva di MySQL nel proprio ambiente. mysql_upgrade Eseguire quindi prima di tentare la migrazione in un'istanza del server flessibile Database di Azure per MySQL.

Considerazioni sulle prestazioni

Per ottimizzare le prestazioni, tenere presenti le considerazioni seguenti durante il dump di database di grandi dimensioni:

  • Usare l'opzione exclude-triggers in mysqldump durante il dump dei database. Escludere i trigger dai file di dump per evitare l'attivazione dei comandi di trigger durante il ripristino dei dati.
  • Usare l'opzione single-transaction per impostare la modalità di isolamento della transazione su REPEATABLE READ e inviare un'istruzione SQL START TRANSACTION al server prima di creare un dump dei dati. Il dump di molte tabelle all'interno di una singola transazione causa l'uso di spazio di archiviazione aggiuntivo durante il ripristino. Le opzioni single-transaction e lock-tables si escludono a vicenda in quanto LOCK TABLES causa il commit implicito di eventuali transazioni in sospeso. Per eseguire il dump di tabelle di grandi dimensioni, combinare l'opzione single-transaction con l'opzione quick.
  • Usare la sintassi a più righe extended-insert che include vari elenchi VALUES. Ciò consente di ottenere un file di dump più piccolo e di velocizzare gli inserimenti quando il file viene ricaricato.
  • Usare l'opzione order-by-primary in mysqldump durante il dump dei database, in modo che i dati vengano inseriti nello script nell'ordine delle chiavi primarie.
  • Usare l'opzione disable-keys in mysqldump durante il dump dei dati, per disabilitare i vincoli della chiave esterna prima del caricamento. La disabilitazione dei controlli della chiave esterna offre miglioramenti delle prestazioni. Abilitare i vincoli e verificare i dati dopo il caricamento per garantire l'integrità referenziale.
  • Usare le tabelle partizionate quando appropriato.
  • Caricare i dati in parallelo. Evitare un eccessivo parallelismo che comporterebbe il raggiungimento del limite di risorse e monitorare le risorse con le metriche offerta nel portale di Azure.
  • Usare l'opzione defer-table-indexes in mysqldump durante il dump dei database, in modo che la creazione dell'indice venga eseguita dopo il caricamento dei dati delle tabelle.
  • Copiare i file di backup in un archivio/BLOB di Azure ed eseguire il ripristino da tale posizione. In questo modo, l'operazione dovrebbe essere eseguita in modo molto più veloce rispetto al ripristino attraverso Internet.

Creare un database nell'istanza del server flessibile Database di Azure per MySQL di destinazione

Creare un database vuoto nella destinazione Database di Azure per MySQL'istanza del server flessibile in cui si desidera eseguire la migrazione dei dati. Usare uno strumento come MySQL Workbench o mysql.exe per creare il database. Il database può avere lo stesso nome del database che contiene i dati di dump; in alternativa, è possibile creare un database con un nome diverso.

Per connettersi, individuare le informazioni di connessione in Panoramica dell'istanza del server flessibile di Database di Azure per MySQL.

Screenshot di Trova le informazioni di connessione nella portale di Azure.

Aggiungere le informazioni di connessione in MySQL Workbench.

Screenshot della stringa di connessione mySQL Workbench.

Preparare l'istanza del server flessibile Database di Azure per MySQL di destinazione per carichi di dati rapidi

Per preparare la destinazione Database di Azure per MySQL'istanza del server flessibile per carichi di dati più veloci, è necessario modificare i parametri e la configurazione del server seguenti.

  • max_allowed_packet: impostare su 1073741824 (ovvero, 1 GB) per evitare problemi di overflow dovuti a righe lunghe.
  • slow_query_log: impostare su OFF per disattivare il log di query lento. In questo modo si elimina l'overhead causato dalla registrazione lenta di query durante i caricamenti dei dati.
  • query_store_capture_mode: impostare su NONE per disattivare Query Store. In questo modo si elimina l'overhead causato dalle attività di campionamento di Query Store.
  • innodb_buffer_pool_size: aumentare le prestazioni del server a 32 SKU con ottimizzazione per la memoria vCore dal piano tariffario del portale durante la migrazione per aumentare innodb_buffer_pool_size. Innodb_buffer_pool_size può essere aumentato solo aumentando le risorse di calcolo per l'istanza del server flessibile Database di Azure per MySQL.
  • innodb_io_capacity & innodb_io_capacity_max: passare a 9000 dai parametri server nel portale di Azure per migliorare l'utilizzo di I/O per ottimizzare la velocità di migrazione.
  • innodb_write_io_threads & innodb_write_io_threads: passare a 4 dai parametri del server nel portale di Azure per migliorare la velocità di migrazione.
  • Aumentare il livello di archiviazione: gli I/O per Database di Azure per MySQL server flessibile aumentano progressivamente con l'aumento del livello di archiviazione. Per carichi più veloci, è possibile aumentare il livello di archiviazione per aumentare i valori di I/O di cui è stato effettuato il provisioning. Tenere presente che l'archiviazione può essere solo aumentata, non ridotta.

Al termine della migrazione, è possibile ripristinare i valori precedenti dei parametri del server e della configurazione del livello di calcolo.

Eseguire il dump e il ripristino con l'utilità mysqldump

Creare un file di backup dalla riga di comando tramite mysqldump

Per eseguire il backup di un database MySQL esistente nel server locale o in una macchina virtuale, eseguire il comando seguente:

mysqldump --opt -u [uname] -p[pass] [dbname] > [backupfile.sql]

I parametri da specificare sono:

  • [uname] Username del database
  • [pass] Password del database (si noti che non è presente alcuno spazio vuoto tra -p e la password)
  • [dbname] Nome del database
  • [backupfile.sql] Filename per il backup del database
  • [-opt] Opzione mysqldump

Ad esempio, per eseguire il backup di un database denominato "testdb" nel proprio server MySQL con il nome utente "testuser" e senza password in un file testdb_backup.sql, usare il comando seguente. Il comando esegue il backup del database testdb in un file denominato testdb_backup.sql, che contiene tutte le istruzioni SQL necessarie per ricreare il database. Assicurarsi che il nome utente “testuser” abbia almeno il privilegio SELECT per le tabelle di dump, SHOW VIEW per le viste di dump, TRIGGER per i trigger di dump e LOCK TABLES se l'opzione --single-transaction non viene usata.

GRANT SELECT, LOCK TABLES, SHOW VIEW ON *.* TO 'testuser'@'hostname' IDENTIFIED BY 'password';

Eseguire ora mysqldump per creare il backup del database testdb

mysqldump -u root -p testdb > testdb_backup.sql

Per selezionare tabelle specifiche nel database di cui si deve eseguire il backup, elencare i nomi delle tabelle separati da spazi. Ad esempio, per eseguire il backup delle sole tabelle table1 e table2 in "testdb", seguire questo esempio:

mysqldump -u root -p testdb table1 table2 > testdb_tables_backup.sql

Per eseguire il backup di più database contemporaneamente, usare l’interruttore --database ed elencare i nomi dei database separati da spazi.

mysqldump -u root -p --databases testdb1 testdb3 testdb5 > testdb135_backup.sql

Ripristinare il database MySQL mediante una riga di comando

Dopo avere creato il database di destinazione è possibile usare il comando mysql per ripristinare i dati nel database appena creato specificatamente dal file di dump.

mysql -h [hostname] -u [uname] -p[pass] [db_to_restore] < [backupfile.sql]

In questo esempio ripristinare i dati nel database appena creato nella destinazione Database di Azure per MySQL'istanza del server flessibile.

Ecco un esempio di come usare questo mysql per Server singolo:

mysql -h mydemoserver.mysql.database.azure.com -u myadmin@mydemoserver -p testdb < testdb_backup.sql

Ecco un esempio di come usare questo mysql per Server flessibile:

mysql -h mydemoserver.mysql.database.azure.com -u myadmin -p testdb < testdb_backup.sql

Dump e ripristino con PHPMyAdmin

Seguire questi passaggi per eseguire il dump e il ripristino di un database con PHPMyadmin.

Nota

Per il server singolo, il nome utente deve essere in questo formato, “username@servername”, ma per il server flessibile è sufficiente usare “username”. Se si usa “username@servername” per il server flessibile, la connessione avrà esito negativo.

Esportazione con PHPMyadmin

Per esportare, è possibile usare lo strumento comune phpMyAdmin, che potrebbe essere già installato in locale nell'ambiente. Per esportare il database MySQL mediante PHPMyAdmin:

  1. Aprire phpMyAdmin.
  2. Selezionare il database. Selezionare il nome del database nell'elenco a sinistra.
  3. Selezionare il collegamento Esportazione. Viene visualizzata una nuova pagina per eseguire il dump del database.
  4. Nell'area Esportazione, fare clic sul collegamento Seleziona tutto per scegliere le tabelle nel database.
  5. Nell'area delle opzioni SQL, selezionare le opzioni appropriate.
  6. Selezionare l'opzione Salva come file e l'opzione di compressione corrispondente, quindi selezionare il pulsante Vai. Verrà visualizzata una finestra di dialogo che richiede di salvare il file in locale.

Importazione mediante PHPMyAdmin

L'importazione del database è simile all'esportazione. Esegui le seguenti azioni:

  1. Aprire phpMyAdmin.
  2. Nella pagina di installazione di phpMyAdmin selezionare Aggiungi per aggiungere l'istanza del server flessibile Database di Azure per MySQL. Specificare i dettagli della connessione e le informazioni di accesso.
  3. Creare un database denominato in modo appropriato e selezionarlo a sinistra della schermata. Per riscrivere il database esistente, selezionare il nome del database, selezionare tutte le caselle di controllo accanto ai nomi delle tabelle e selezionare Elimina per eliminare le tabelle esistenti.
  4. Selezionare il collegamento SQL per visualizzare la pagina in cui è possibile digitare i comandi SQL o caricare il file SQL.
  5. Usare il pulsante Browse (Sfoglia) per trovare il file nel database.
  6. Selezionare il pulsante Vai per esportare il backup, eseguire i comandi SQL e ricreare il database.

Problemi noti

Per problemi noti, suggerimenti e consigli, è consigliabile consultare il blog techcommunity.