o mysql não inicia depois de aumentar innodb_buffer_pool_size e innodb_log_file_size

18

Estou seguindo esta solução aqui /programming/3927690/howto-clean-a-mysql-innodb-storage-engine/4056261#comment14041132_4056261 e tentei aumentar o meu innodb_buffer_pool_sizepara 4G e mais tarde 1G (também 1024M) em além do tamanho do arquivo de log, mas o mysql não começará com esses valores. Se eu voltar a 512M, o mysql começará bem.

Como posso resolver isso? Meu servidor tem 16 GB e, de acordo com o Webmin sysinfo:

Real memory 15.62 GB total, 3.13 GB used

Enquanto isso, também encontrei o log de erros:

120529 10:29:32 mysqld_safe mysqld do arquivo pid /var/run/mysqld/mysqld.pid terminou

120529 10:29:33 mysqld_safe Iniciando o daemon mysqld com bancos de dados em / var / lib / mysql

120529 10:29:33 [Nota] O plug-in 'FEDERATED' está desativado.

120529 10:29:33 InnoDB: o heap de memória InnoDB está desativado

120529 10:29:33 InnoDB: Mutexes e rw_locks usam componentes atômicos do GCC

120529 10:29:33 InnoDB: As tabelas compactadas usam o zlib 1.2.3

120529 10:29:33 InnoDB: Usando AIO nativo do Linux

120529 10:29:33 InnoDB: Inicializando buffer pool, tamanho = 1.0G

120529 10:29:33 InnoDB: inicialização concluída do buffer pool

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

InnoDB: além do especificado no arquivo .cnf 0 268435456 bytes!

giorgio79
fonte
Você pode por favor compartilhar os logs de erros para isso ...
Abdul Manaf
Obrigado, eu consegui encontrar. Eu acho que isso será mais fácil. Também deveria ter adicionado inicialmente que aumentei o tamanho do arquivo de log para corresponder ao aumento no buffer pool (adicionei essas informações agora).
Giorgio79
Ok @ giorgio79 ...
Abdul Manaf
Tente excluir o (s) arquivo (s) de log.
Dezso '29/
Você excluiu o tamanho do arquivo de log primeiro? você eliminou todos os bancos de dados primeiro? Adicione mais informações sobre o que você fez exatamente?
ALH

Respostas:

19

As duas respostas dadas por @RickJames e @drogart são essencialmente os remédios. (+1 para cada).

Desde o log de erros que você apresenta, as duas últimas linhas dizem:

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

InnoDB: além do especificado no arquivo .cnf 0 268435456 bytes! `

Nesse momento, era evidente que você definia innodb_log_file_size para 256M (268435456) my.cnfenquanto os logs de transações do InnoDB ( ib_logfile0, ib_logfile1) eram respectivamente 128M (134217728) cada. Olhando para o link da minha resposta do StackOverflow na sua pergunta, você precisava fazer o seguinte:

Etapa 01) Adicione isso a my.cnf:

[mysqld]
innodb_buffer_pool_size=4G
innodb_log_file_size=1G

Etapa 02) Execute estes comandos no sistema operacional

mysql -u... -p... -e"SET GLOBAL innodb_fast_shutdown = 1"
service mysql stop
rm -f /var/lib/mysql/ib_logfile*
service mysql start

Para ter confiança no que está acontecendo, execute tail -fo log de erros. Você verá uma mensagem informando quando cada arquivo de log do innodb está sendo criado.

RolandoMySQLDBA
fonte
Obrigado, sim, não os apaguei primeiro. Só queria ver como o mysql se comporta. Após executar a etapa 3, reiniciar o trabalho.
Giorgio79 # 30/12
11
Acho que não se deve excluir os arquivos de log, mas movê-los para outro lugar e excluí-los um pouco mais tarde, quando você tiver alterado o tamanho do arquivo de log. Caso contrário, você estaria com problemas se o MySQL travasse antes de executar service mysqld stop.
KajMagnus
4

Com base no erro no log, acho que você fez o seguinte:

  • encerre o mysql
  • editou my.cnf para alterar o tamanho do arquivo de log do innodb
  • tentou iniciar o mysql (então falhou)

Se você alterar o tamanho do arquivo de log, remova os arquivos de log antigos. O Innodb não será iniciado com êxito se os arquivos existentes não corresponderem ao tamanho especificado no arquivo de configuração. Se você os mover para outro lugar, o innodb criará novos arquivos de log de transações do tamanho correto quando for iniciado.

Eu recomendaria mover os arquivos antigos para outro diretório em vez de apenas excluí-los, até que o servidor esteja funcionando com novos arquivos de log e tudo pareça correto.

drogart
fonte
3

O buffer_pool deve ser configurado para cerca de 70% da RAM disponível se você estiver executando apenas o InnoDB.

O tamanho do log não importa muito. O ideal é configurá-lo para que (Uptime * innodb_log_file_size / Innodb_os_log_written) seja aproximadamente 3600 (1 hora).

Para alterar o tamanho do log, é necessário

  1. encerre o mysqld corretamente
  2. exclua o valor em my.cnf (my.ini)
  3. excluir os arquivos de log
  4. retstart - novos arquivos de log serão reconstruídos.
Rick James
fonte
Obrigado, sim, esta é uma resposta correta também. Eu só poderia aceitar um embora. Marcou com +1 isso também.
Giorgio79 # 30/12
1

Também pode haver algum problema no seu valor fornecido para o tamanho do buffer pool . como aconteceu no meu caso ...

Ao aumentar ou diminuir innodb_buffer_pool_size, a operação é executada em pedaços. O tamanho do pedaço é definido pela innodb_buffer_pool_chunk_sizeopção de configuração, que possui um padrão de 128M. Para obter mais informações, consulte Configurando o tamanho do pedaço do buffer pool do InnoDB .

O tamanho do buffer pool deve sempre ser igual ou múltiplo de innodb_buffer_pool_chunk_size * innodb_buffer_pool_instances. Se você configurar innodb_buffer_pool_sizepara um valor que não seja igual ou múltiplo de innodb_buffer_pool_chunk_size * innodb_buffer_pool_instances, o tamanho do buffer pool será ajustado automaticamente para um valor igual ou múltiplo innodb_buffer_pool_chunk_size * innodb_buffer_pool_instancesque não seja menor que o tamanho especificado do buffer pool.

No exemplo, innodb_buffer_pool_sizeestá definido como 8G e innodb_buffer_pool_instancesestá definido como 16. innodb_buffer_pool_chunk_sizeé 128M, que é o valor padrão.

8G é um innodb_buffer_pool_sizevalor válido porque 8G é um múltiplo de innodb_buffer_pool_instances=16 * innodb_buffer_pool_chunk_size=128M, que é 2G.

SHIVI
fonte