Risolvere il danneggiamento del database in Database di Azure per MySQL - Server flessibile

SI APPLICA A: Database di Azure per MySQL - Server singolo Database di Azure per MySQL - Server flessibile

Importante

Database di Azure per MySQL server singolo si trova nel percorso di ritiro. È consigliabile eseguire l'aggiornamento a Database di Azure per MySQL server flessibile. Per altre informazioni sulla migrazione a Database di Azure per MySQL server flessibile, vedere Che cosa accade a Database di Azure per MySQL server singolo?

Il danneggiamento del database può causare tempi di inattività per l'applicazione. È anche fondamentale risolvere i problemi di danneggiamento nel tempo per evitare la perdita di dati. Quando si verifica un danneggiamento del database, viene visualizzato questo errore nei log del server: InnoDB: Database page corruption on disk or a failed.

Questo articolo illustra come risolvere i problemi di danneggiamento del database o della tabella. Database di Azure per MySQL server flessibile usa il motore InnoDB. Offre operazioni automatizzate di controllo e ripristino del danneggiamento. InnoDB verifica la presenza di pagine danneggiate eseguendo checksum in ogni pagina che legge. Se rileva una discrepanza di checksum, arresterà automaticamente l'istanza del server flessibile Database di Azure per MySQL.

Provare le opzioni seguenti per attenuare rapidamente i problemi di danneggiamento del database.

Riavviare il server MySQL

Si nota in genere che un database o una tabella è danneggiato quando l'applicazione accede alla tabella o al database. InnoDB offre un meccanismo di ripristino di arresto anomalo che consente di risolvere la maggior parte dei problemi quando il server viene riavviato. Il riavvio del server può quindi aiutare il server a eseguire il ripristino da un arresto anomalo del database che ha causato uno stato non valido.

Usare il metodo dump e restore

È consigliabile risolvere i problemi di danneggiamento usando un metodo dump e restore . Questo metodo prevede:

  1. Accesso alla tabella danneggiata.
  2. Uso dell'utilità mysqldump per creare un backup logico della tabella. Il backup manterrà la struttura della tabella e i dati al suo interno.
  3. Ricaricamento della tabella nel database.

Eseguire il backup del database o delle tabelle

Importante

Creare un file di backup dalla riga di comando usando mysqldump. Usare questo comando:

$ mysqldump [--ssl-cert=/path/to/pem] -h [host] -u [uname] -p[pass] [dbname] > [backupfile.sql]

Descrizioni dei parametri:

  • [ssl-cert=/path/to/pem]: percorso del certificato SSL. Scaricare il certificato SSL nel computer client e impostarne il percorso nel comando . Non usare questo parametro se SSL è disabilitato.
  • [host]: l'istanza del server flessibile Database di Azure per MySQL.
  • [uname]: nome utente amministratore del server.
  • [pass]: password per l'utente amministratore.
  • [dbname]: nome del database.
  • [backupfile.sql]: nome del file del backup del database.

Importante

  • Per Database di Azure per MySQL server singolo, usare il formato admin-user@servername da sostituire myserveradmin nei comandi seguenti.
  • Per Database di Azure per MySQL server flessibile, usare il formato admin-user da sostituire myserveradmin nei comandi seguenti.

Se una tabella specifica è danneggiata, selezionare tabelle specifiche nel database di cui eseguire il backup:

$ mysqldump --ssl-cert=</path/to/pem> -h mydemoserver.mysql.database.azure.com -u myserveradmin -p testdb table1 table2 > testdb_tables_backup.sql

Per eseguire il backup di uno o più database, usare l'opzione --database ed elencare i nomi dei database, separati da spazi:

$ mysqldump --ssl-cert=</path/to/pem>  -h mydemoserver.mysql.database.azure.com -u myserveradmin -p --databases testdb1 testdb3 testdb5 > testdb135_backup.sql

Ripristinare il database o le tabelle

La procedura seguente illustra come ripristinare il database o le tabelle. Dopo aver creato il file di backup, è possibile ripristinare le tabelle o i database usando l'utilità mysql. Esegui questo comando:

mysql  --ssl-cert=</path/to/pem> -h [hostname] -u [uname] -p[pass] [db_to_restore] < [backupfile.sql]

Ecco un esempio che esegue il testdb ripristino da un file di backup creato con mysqldump:

Importante

  • Per Database di Azure per MySQL server singolo, usare il formato admin-user@servername da sostituire myserveradmin nel comando seguente.
  • Per Database di Azure per MySQL server flessibile, usare il formato admin-user da sostituire myserveradmin nel comando seguente.
$ mysql --ssl-cert=</path/to/pem> -h mydemoserver.mysql.database.azure.com -u myserveradmin -p testdb < testdb_backup.sql

Passaggi successivi

Se i passaggi precedenti non risolvono il problema, è sempre possibile ripristinare l'intero server: