Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Como reparar bancos de dados e tabelas MySQL


Este artigo descreve como reparar tabelas e bancos de dados MySQL. À medida que as tabelas de um banco de dados crescem, erros podem ocorrer de tempos em tempos. Quando isso acontece, o MySQL inclui várias ferramentas que você pode usar para verificar e reparar tabelas de banco de dados. Para fazer isso, siga os procedimentos abaixo na ordem em que aparecem.
Este artigo se aplica apenas aos produtos listados nos Detalhes do artigo Barra Lateral. Você deve ter acesso root ao servidor para seguir esses procedimentos.

Etapa 1:Fazendo backup dos bancos de dados


Antes de tentar reparar qualquer banco de dados, faça backup dele primeiro. Para fazer backup de todos os arquivos de todos os bancos de dados, siga estas etapas:
  1. Faça login em seu servidor usando SSH.
  2. Pare o servidor MySQL usando o comando apropriado para sua distribuição Linux:
    • Para CentOS e Fedora, digite:
      service mysqld stop

    • Para Debian e Ubuntu, digite:

      service mysql stop

  3. Digite o seguinte comando:

    cp -rfv /var/lib/mysql /var/lib/mysql$(date +%s)
    Este comando copia todos os arquivos de todos os seus bancos de dados para um nome de diretório baseado na hora atual (mais precisamente, o número de segundos decorridos desde 1º de janeiro de 1970). Isso garante que cada backup de banco de dados seja armazenado em um diretório que tenha um nome exclusivo. Para proteção adicional, você pode (e deve) fazer backup dos arquivos do banco de dados em um local remoto que não esteja no servidor.

  4. Reinicie o servidor MySQL usando o comando apropriado para sua distribuição Linux:

    • Para CentOS e Fedora, digite:
      service mysqld start

    • Para Debian e Ubuntu, digite:

      service mysql start

Etapa 2:Executando mysqlcheck


Depois de fazer backup de seus bancos de dados, você estará pronto para iniciar a solução de problemas. O mysqlcheck O programa permite verificar e reparar bancos de dados enquanto o MySQL está em execução. Esse recurso é útil quando você deseja trabalhar em um banco de dados sem interromper todo o serviço MySQL.

Além disso, mysqlcheck funciona em tabelas que usam os mecanismos de banco de dados MyISAM ou InnoDB.
Para obter informações sobre como determinar qual mecanismo de armazenamento uma tabela de banco de dados está usando, consulte este artigo.
Para usar mysqlcheck , Siga esses passos:
  1. Como usuário root, digite o seguinte comando:
    cd /var/lib/mysql

  2. Digite o seguinte comando, substituindo database pelo nome do banco de dados que você deseja verificar:

    mysqlcheck database

    O comando anterior verifica todas as tabelas no banco de dados especificado. Como alternativa, para verificar uma tabela específica em um banco de dados, digite o seguinte comando. Substitua database pelo nome do banco de dados e substitua table pelo nome da tabela que você deseja verificar:
    mysqlcheck database table

  3. Mysqlcheck verifica o banco de dados e as tabelas especificados. Se uma tabela passar na verificação, mysqlcheck exibe OK para a mesa. No entanto, se mysqlcheck relatar um erro para uma tabela, digite o seguinte comando para tentar repará-la. Substitua database pelo nome do banco de dados e table pelo nome da tabela:

    mysqlcheck -r database table
  4. Se mysqlcheck não puder reparar a tabela ou tabelas com êxito, siga o procedimento a seguir.

Etapa 3:executar diagnósticos específicos do mecanismo


Se estiver executando mysqlcheck não corrigir o problema, a próxima etapa é executar diagnósticos específicos para o mecanismo usado pela tabela ou tabelas do banco de dados. Siga o procedimento apropriado abaixo para o mecanismo de armazenamento de banco de dados de sua tabela.
Para obter informações sobre como determinar qual mecanismo de armazenamento suas tabelas de banco de dados estão usando, consulte este artigo.
Reparando tabelas MyISAM com myisamchk

Se você estiver usando o mecanismo de armazenamento MyISAM para uma tabela, você pode executar o myisamchk programa para repará-lo. Para fazer isso, siga estas etapas:
O myisamchk programa só funciona para tabelas que usam o mecanismo de armazenamento MyISAM. Não funciona para o mecanismo InnoDB.
  1. Pare o servidor MySQL usando o comando apropriado para sua distribuição Linux:
    • Para CentOS e Fedora, digite:
      service mysqld stop

    • Para Debian e Ubuntu, digite:

      service mysql stop

  2. Digite o seguinte comando:

    cd /var/lib/mysql
  3. Mude para o diretório onde o banco de dados está localizado. Por exemplo, se o banco de dados se chamar clientes , digite cd clientes.

  4. Digite o seguinte comando, substituindo table pelo nome da tabela que você deseja verificar:

    myisamchk table

    Para verificar todas as tabelas em um banco de dados, digite o seguinte comando:

    myisamchk *.MYI

    Se o comando anterior não funcionar, você pode tentar deletar arquivos temporários que podem estar impedindo myisamchk de funcionar corretamente. Para fazer isso, volte para o /var/lib/mysql diretório e digite o seguinte comando:
    ls */*.TMD
    

    Se houver algum arquivo .TMD listado, digite o seguinte comando para excluí-lo:
    rm */*.TMD

    Em seguida, tente executar myisamchk novamente.

  5. Para tentar reparar uma tabela, digite o seguinte comando, substituindo table com o nome da tabela que você deseja reparar:

    myisamchk --recover table

  6. Reinicie o servidor MySQL usando o comando apropriado para sua distribuição Linux:

    • Para CentOS e Fedora, digite:
      service mysqld start

    • Para Debian e Ubuntu, digite:

      service mysql start
  7. Teste a tabela ou tabelas reparadas.
Executando o processo de recuperação do InnoDB

Se você estiver usando o mecanismo de armazenamento InnoDB para uma tabela de banco de dados, poderá executar o processo de recuperação do InnoDB. Para fazer isso, siga estas etapas:
  1. Use seu editor de texto preferido para abrir o my.cnf arquivo em seu servidor. A localização do my.cnf arquivo depende da sua distribuição Linux:
    • No CentOS e no Fedora, o my.cnf arquivo está localizado em /etc diretório.
    • No Debian e no Ubuntu, o my.cnf arquivo está localizado em /etc/mysql diretório.
  2. No my.cnf arquivo, localize o [mysqld] seção.

  3. Adicione a seguinte linha ao [mysqld] seção:

    innodb_force_recovery=4

  4. Salve as alterações no my.cnf e reinicie o servidor MySQL usando o comando apropriado para sua distribuição Linux:

    • Para CentOS e Fedora, digite:
      service mysqld restart

    • Para Debian e Ubuntu, digite:

      service mysql restart

  5. Digite o seguinte comando para exportar todos os bancos de dados para o databases.sql Arquivo:

    mysqldump --all-databases --add-drop-database --add-drop-table --routines > databases.sql

  6. Inicie o mysql programa e, em seguida, tente eliminar o banco de dados ou bancos de dados afetados usando o DROP DATABASE comando.

    Se o MySQL não conseguir descartar um banco de dados, você poderá excluí-lo manualmente na etapa 8 abaixo após interromper o servidor MySQL.

  7. Pare o servidor MySQL usando o comando apropriado para sua distribuição Linux:

    • Para CentOS e Fedora, digite:
      service mysqld stop

    • Para Debian e Ubuntu, digite:

      service mysql stop

  8. Se você não conseguiu descartar um banco de dados na etapa 6, digite os comandos a seguir para excluí-lo manualmente. Substitua database pelo nome do banco de dados que você deseja excluir:

    cd /var/lib/mysql
    rm -rf database
    Certifique-se de não excluir o mysql ou performance_schema diretórios!

  9. Use seu editor de texto preferido para abrir o my.cnf arquivo em seu servidor e, em seguida, comente a seguinte linha no arquivo [mysqld] seção como mostrado:

    #innodb_force_recovery=4
    Isso desativa o modo de recuperação do InnoDB.

  10. Salve as alterações no my.cnf arquivo e, em seguida, inicie o servidor MySQL usando o comando apropriado para sua distribuição Linux:

    • Para CentOS e Fedora, digite:
      service mysqld start

    • Para Debian e Ubuntu, digite:

      service mysql start

  11. Digite o seguinte comando para restaurar os bancos de dados do arquivo de backup que você criou na etapa 5:

    mysql < databases.sql
  12. Teste o banco de dados restaurado.


Mais informações

  • Para mais informações sobre mysqlcheck , visite https://dev.mysql.com/doc/refman/5.5/en/mysqlcheck.html.
  • Para obter mais informações sobre myisamchk , visite https://dev.mysql.com/doc/refman/5.5/en/myisamchk.html.