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!


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.


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.


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.

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.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.