English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Método de solução para falha no início do MySQL innoDB e impossibilidade de reiniciar

Introdução ao problema

O computador parou durante o uso e, após a reinicialização, descobriu que o mysql não foi iniciado com sucesso. Ao verificar o log de erros, descobriu que o problema foi com o innodb, causando a falha no início do mysql.

日记错误

$ mysql.server start
Iniciando MySQL
. ERRO! O servidor saiu sem atualizar o arquivo PID (/usr/local/var/mysql/fdipzonedeMacBook-Air.local.pid).
22:08:37 mysqld_safe Iniciando o daemon mysqld com bancos de dados de /usr/local/var/mysql
2016-04-23 22:08:38 0 [Aviso] TIMESTAMP com valor DEFAULT implícito está obsoleto. Por favor, use --opção de servidor explicit_defaults_for_timestamp (veja a documentação para mais detalhes).
2016-04-23 22:08:38 0 [Nota] /usr/local/Cellar/mysql/5.6.24/bin/mysqld (mysqld 5.6.24) iniciando como processo 3604 ...
2016-04-23 22:08:38 3604 [Aviso] Definindo lower_case_table_names=2 porque o sistema de arquivos para /usr/local/var/mysql/ é insensível a maiúsculas e minúsculas
2016-04-23 22:08:38 3604 [Nota] O plugin 'FEDERATED' está desativado.
2016-04-23 22:08:38 3604 [Nota] InnoDB: Usando atômicos para contar referências de páginas do pool de buffer
2016-04-23 22:08:38 3604 [Nota] InnoDB: O monte de memória InnoDB está desativado
2016-04-23 22:08:38 3604 [Nota] InnoDB: Mutexes e rw_locks usam built-ins atômicos do GCC
2016-04-23 22:08:38 3604 [Nota] InnoDB: Barreira de memória não é usada
2016-04-23 22:08:38 3604 [Nota] InnoDB: Tabelas comprimidas usam zlib 1.2.3
2016-04-23 22:08:38 3604 [Nota] InnoDB: Usando CRC do CPU32 instruções
2016-04-23 22:08:38 3604 [Nota] InnoDB: Inicializando pool de buffer, tamanho = 128.0M
2016-04-23 22:08:38 3604 [Nota] InnoDB: Inicialização do pool de buffer concluída
2016-04-23 22:08:38 3604 [Nota] InnoDB: O formato de arquivo suportado mais alto é Barracuda.
2016-04-23 22:08:38 3604 [Nota] InnoDB: O escaneamento do log avançou além do lsn do ponto de controle]} 68929933440
2016-04-23 22:08:38 3604 [Nota] InnoDB: O banco de dados não foi encerrado normalmente!
2016-04-23 22:08:38 3604 [Nota] InnoDB: Iniciando a recuperação de falha.
2016-04-23 22:08:38 3604 [Nota] InnoDB: Lendo informações do espelho de dados a partir dos arquivos .ibd...
2016-04-23 22:08:38 3604 [ERRO] InnoDB: Descompatibilidade de checksum no espelho de dados ./test_user/user_recommend_code#P#pmax.ibd (tabela test_user/user_recommend_code#P#pmax)
2016-04-23 22:08:38 3604 [Nota] InnoDB: Tamanho da página:1024 Páginas para analisar:64
2016-04-23 22:08:38 3604 [Nota] InnoDB: Tamanho da página: 1024, Contagem possível de space_id:0
2016-04-23 22:08:38 3604 [Nota] InnoDB: Tamanho da página:2048 Páginas para analisar:48
2016-04-23 22:08:38 3604 [Nota] InnoDB: Tamanho da página: 2048, Contagem possível de space_id:0
2016-04-23 22:08:38 3604 [Nota] InnoDB: Tamanho da página:4096 Páginas para analisar:24
2016-04-23 22:08:38 3604 [Nota] InnoDB: Tamanho da página: 4096, Contagem possível de space_id:0
2016-04-23 22:08:38 3604 [Nota] InnoDB: Tamanho da página:8192 Páginas para analisar:12
2016-04-23 22:08:38 3604 [Nota] InnoDB: Tamanho da página: 8192, Contagem possível de space_id:0
2016-04-23 22:08:38 3604 [Nota] InnoDB: Tamanho da página:16384 Páginas para analisar:6
2016-04-23 22:08:38 3604 [Nota] InnoDB: VALID: espaço:2947354 page_no:3 page_size:16384
2016-04-23 22:08:38 3604 [Nota] InnoDB: Tamanho da página: 16384, Contagem possível de space_id:1
2016-04-23 22:08:38 3604 [Nota] InnoDB: space_id:2947354, Número de páginas correspondentes: 1/1 (16384)
2016-04-23 22:08:38 3604 [Nota] InnoDB: Espaço escolhido:2947354
2016-04-23 22:08:38 3604 [Nota] InnoDB: Restaurando página 0 do espelho de dados 2947354
2016-04-23 22:08:38 3604 [Aviso] InnoDB: Não há página_no=0 no espaço: Doublewrite 2947354
2016-04-23 22:08:38 7fff79b9e300 InnoDB: Número de erro do sistema operacional 2 em uma operação de arquivo.
InnoDB: O erro significa que o sistema não pode encontrar o caminho especificado.
InnoDB: Se você estiver instalando o InnoDB, lembre-se de que você deve criar
InnoDB: você mesmo cria diretórios, o InnoDB não os cria.
InnoDB: Erro: não foi possível abrir único-arquivo espacial de tabela ./test_user/user_recommend_code#P#pmax.ibd
InnoDB: Não continuamos a recuperação de falha, porque a tabela pode se tornar
InnoDB: corrompido se não conseguirmos aplicar os registros de log do InnoDB a ele.
InnoDB: Para resolver o problema e iniciar o mysqld:
InnoDB: 1) Se houver um problema de permissão no arquivo e o mysqld não puder
InnoDB: abra o arquivo, você deve modificar as permissões.
InnoDB: 2) Se a tabela não for necessária ou você puder restaurá-la a partir de um backup,
InnoDB: então você pode remover o arquivo .ibd e o InnoDB fará uma recuperação normal
InnoDB: recuperação de falha e ignorar aquela tabela.
InnoDB: 3) Se o sistema de arquivos ou o disco estiver danificado e você não puder remover
InnoDB: o arquivo .ibd, você pode definir innodb_force_recovery > 0 no my.cnf
InnoDB: e force o InnoDB a continuar a recuperação de falha aqui.

Solução

1.Se os dados não são importantes ou já foram backups, é só restaurar o mysql startup

Acesse o diretório mysql, geralmente: /usr/local/var/mysql/

Exclua ib_logfile*

Exclua ibdata*

Exclua todos os diretórios físicos do banco de dados (por exemplo, se o banco de dados for test_db, execute rm -rf test_db)

Reiniciar o mysql

Recriar o banco de dados ou usar o backup para substituir

2.Se os dados forem importantes e não houver backup

Pode usar o parâmetro innodb_force_recovery para fazer o mysqld pular a etapa de recuperação, inicializar o mysqld, exportar os dados e recriar o banco de dados.

innodb_force_recovery pode ser configurado para1-6, números grandes incluem o impacto de todos os números anteriores

     1, (SRV_FORCE_IGNORE_CORRUPT): Ignorar páginas corrompidas detectadas.

     2, (SRV_FORCE_NO_BACKGROUND): Bloquear a execução da thread principal, como a thread principal precisa executar a operação full purge, isso causará crash.

     3, (SRV_FORCE_NO_TRX_UNDO): Não executar operações de rollback de transação.

     4, (SRV_FORCE_NO_IBUF_MERGE): Não executar operações de merge de buffer de inserção.

     5, (SRV_FORCE_NO_UNDO_LOG_SCAN): Não verificar o log de reexecução, o motor de armazenamento InnoDB considerará transações não concluídas como concluídas.

     6, (SRV_FORCE_NO_LOG_REDO): Não executar operações de rolagem para frente.

Adicionar em my.cnf (no Windows é my.ini)

innodb_force_recovery = 6 
innodb_purge_thread = 0

Reiniciar o mysql

Neste momento, só pode executar operações select, create, drop, mas não pode executar operações insert, update, delete

Executar a exportação lógica, após concluir ajustar innodb_force_recovery=0, innodb_purge_threads=1depois, recriar o banco de dados, por fim, reimportar os dados exportados

Resumo

Isso é tudo o que há no artigo, espero que ajude a aprender ou usar MySQL. Se tiver alguma dúvida, pode deixar um comentário para trocar ideias, obrigado pelo apoio ao Tutorial de Grito.

Você também pode gostar