Condividi tramite


Risolvere i problemi di danneggiamento del database nel server flessibile del Database di Azure per MySQL

Il danneggiamento del database può causare tempi di inattività per l'applicazione. È anche fondamentale risolvere i problemi di danneggiamento in modo tempestivo per evitare la perdita di dati. Quando si verifica un danneggiamento del database, i log del server mostrano questo errore: 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 il checksum su ogni pagina letta. 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. Riavviare il server può quindi aiutare il server a eseguire il ripristino da un arresto anomalo del sistema che ha causato uno stato del database negativo.

Usare il metodo dump e ripristino

È consigliabile risolvere i problemi di danneggiamento usando il metodo dump e ripristino. 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 tramite 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 file del backup del database.

Importante

  • Per il server singolo del Database di Azure per MySQL, usare il formato admin-user@servername per 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 le 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'interruttore --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. Eseguire 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 ripristino testdb da un file di backup creato con mysqldump:

Importante

  • Per il server singolo del Database di Azure per MySQL, usare il formato admin-user@servername per 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