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