Compartilhar via


Solucionar problemas de corrupção de banco de dados no Banco de Dados do Azure para MySQL – Servidor Flexível

A corrupção de banco de dados pode causar tempo de inatividade para seu aplicativo. Também é essencial resolver os problemas de corrupção a tempo de evitar a perda de dados. Quando ocorrer uma corrupção do banco de dados, você verá esse erro nos logs de seu servidor: InnoDB: Database page corruption on disk or a failed.

Neste artigo, você aprenderá a resolver problemas de corrupção de banco de dados ou tabela. O Servidor Flexível do Banco de Dados do Azure para MySQL usa o mecanismo InnoDB. Ele apresenta operações automatizadas de verificação e reparo de corrupção. O InnoDB verifica as páginas corrompidas executando somas de verificação em todas as páginas que ele lê. Se encontrar uma discrepância de soma de verificação, ele automaticamente interromperá a instância do Servidor Flexível do Banco de Dados do Azure para MySQL.

Tente realizar as seguintes opções para reduzir rapidamente os problemas de corrupção de banco de dados.

Reiniciar o servidor MySQL

Normalmente, você percebe que um banco de dados ou tabela está corrompido quando seu aplicativo o acessa. O InnoDB apresenta um mecanismo de recuperação de falhas que pode resolver a maioria dos problemas quando o servidor é reiniciado. Portanto, reiniciar o servidor pode ajudá-lo a se recuperar de uma falha que causou um estado inadequado do banco de dados.

Usar o método de despejo e restauração

Recomenda-se resolver os problemas de corrupção com um método de despejo e restauração. Esse método envolve:

  1. Acessar a tabela corrompida.
  2. Usar o utilitário mysqldump para criar um backup lógico da tabela. O backup manterá a estrutura e os dados da tabela.
  3. Recarregar a tabela no banco de dados.

Fazer backup do banco de dados ou de tabelas

Importante

Crie um arquivo de backup na linha de comando usando mysqldump. Use este comando:

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

Descrições de parâmetro:

  • [ssl-cert=/path/to/pem]: o caminho para o certificado SSL. Baixe o certificado SSL no computador cliente e defina o caminho dele no comando. Não use esse parâmetro se o SSL estiver desabilitado.
  • [host]: sua instância de Servidor Flexível do Banco de Dados do Azure para MySQL.
  • [uname]: o nome de usuário administrador do servidor.
  • [pass]: a senha do usuário administrador.
  • [dbname]: o nome do banco de dados.
  • [backupfile.sql]: o nome do arquivo de backup do banco de dados.

Importante

  • Para o servidor único do Banco de Dados do Azure para MySQL, use o formato admin-user@servername para substituir myserveradmin nos comandos a seguir.
  • Para o Servidor Flexível do Banco de Dados do Azure para MySQL, use o formato admin-user para substituir myserveradmin nos comandos a seguir.

Se uma determinada tabela estiver corrompida, selecione tabelas específicas no banco de dados para o backup:

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

Use a opção --database e liste os nomes de banco, separados por espaços, para fazer backup de um ou mais bancos de dados:

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

Restaurar o banco de dados ou as tabelas

As etapas a seguir mostram como restaurar seu banco de dados ou suas tabelas. Depois de criar o arquivo de backup, você pode restaurar as tabelas ou os bancos de dados com o utilitário MySQL. Execute este comando:

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

Veja a seguir um exemplo que restaura testdb de um arquivo de backup criado com mysqldump:

Importante

  • Para o servidor único do Banco de Dados do Azure para MySQL, use o formato admin-user@servername para substituir myserveradmin no comando a seguir.
  • Para o Servidor Flexível do Banco de Dados do Azure para MySQL, use o formato admin-user para substituir myserveradmin no comando a seguir.
$ mysql --ssl-cert=</path/to/pem> -h mydemoserver.mysql.database.azure.com -u myserveradmin -p testdb < testdb_backup.sql