InnoDB: Erro: o arquivo de log ./ib_logfile0 é de tamanho diferente

106

Acabei de adicionar as seguintes linhas no /etc/mysql/my.cnf depois de converter um banco de dados para usar o mecanismo InnoDB.

innodb_buffer_pool_size = 2560M
innodb_log_file_size    = 256M
innodb_log_buffer_size  = 8M
innodb_flush_log_at_trx_commit  = 2
innodb_thread_concurrency   = 16
innodb_flush_method = O_DIRECT

Mas isso gera o erro "ERRO 2013 (HY000) na linha 2: conexão perdida com o servidor MySQL durante a consulta" ao reiniciar o mysqld. E o registro de erros do mysql mostra o seguinte

InnoDB: Error: log file ./ib_logfile0 is of different size 0 5242880 bytes
InnoDB: than specified in the .cnf file 0 268435456 bytes!
100118 20:52:52 [ERROR] Plugin 'InnoDB' init function returned error.
100118 20:52:52 [ERROR] Plugin 'InnoDB' registration as a STORAGE ENGINE failed.
100118 20:52:52 [ERROR] Unknown/unsupported table type: InnoDB
100118 20:52:52 [ERROR] Aborting

Então eu comentei esta linha

# innodb_log_file_size  = 256M

E reiniciou o mysql com sucesso.

Gostaria de saber o que é o "5242880 bytes de arquivo de log" mostrado no erro mysql? É o primeiro banco de dados no mecanismo InnoDB neste servidor. Quando e onde esse arquivo de log é criado? Nesse caso, como posso habilitar a diretiva innodb_log_file_size no my.cnf?

EDITAR

Tentei excluir / var / lib / mysql / ib_logfile0 e reiniciar o mysqld, mas ele ainda falhou. Agora ele mostra o seguinte no log de erros.

100118 21:27:11  InnoDB: Log file ./ib_logfile0 did not exist: new to be created
InnoDB: Setting log file ./ib_logfile0 size to 256 MB
InnoDB: Database physically writes the file full: wait...
InnoDB: Progress in MB: 100 200
InnoDB: Error: log file ./ib_logfile1 is of different size 0 5242880 bytes
InnoDB: than specified in the .cnf file 0 268435456 bytes!

Resolução

Ele funciona agora após a exclusão de ib_logfile0 e ib_logfile1 em / var / lib / mysql

jack
fonte

Respostas:

121

O InnoDB é insanamente exigente quanto à sua configuração; se algo não estiver certo, ele simplesmente desistirá e voltará para casa. Para fazer uma alteração no tamanho do arquivo de log sem perda de dados:

  1. Reverta quaisquer alterações de configuração feitas no tamanho do arquivo de log e inicie o MySQL novamente.
  2. No seu MySQL em execução: SET GLOBAL innodb_fast_shutdown = 0;
  3. Pare o MySQL
  4. Faça a alteração da configuração no tamanho do arquivo de log.
  5. Exclua os dois arquivos de log.
  6. Inicie o MySQL. Ele reclamará da falta de arquivos de log, mas os criará e tudo ficará bem.
mulher
fonte
1
Olá, obrigado pela sua resposta, tentei o seu método, mas ainda falhou.
jack
44
A exclusão de ib_logfile0 e ib_logfile1 resolveu o problema para mim.
Temnovit
1
E para mim. Muito obrigado, temos nosso wiki de volta!
Stephen Kennedy
1
Desde que eu estou mudando um db recém-instalado, eu pule a etapa 1-4 e começar com 5 - e funciona :)
Limbo Peng
Obrigado @Temnovit excluir esses 2 arquivos também fez o truque para mim.
bashan 2/09/2015