Então, eu sou bastante novo para ajustar o InnoDB. Estou mudando lentamente as tabelas (quando necessário) de MyIsam para InnoDB. Eu tenho cerca de 100 MB no innodb, então aumentei a innodb_buffer_pool_size
variável para 128 MB:
mysql> show variables like 'innodb_buffer%';
+-------------------------+-----------+
| Variable_name | Value |
+-------------------------+-----------+
| innodb_buffer_pool_size | 134217728 |
+-------------------------+-----------+
1 row in set (0.00 sec)
Quando fui alterar o innodb_log_file_size
valor (exemplo my.cnf na página de configuração do mysql do innodb comentários para alterar o tamanho do arquivo de log para 25% do tamanho do buffer. Então agora meu my.cnf está assim:
# innodb
innodb_buffer_pool_size = 128M
innodb_log_file_size = 32M
Quando reinicio o servidor, recebo este erro:
110216 9:48:41 InnoDB: Inicializando buffer pool, tamanho = 128.0M
110216 9:48:41 InnoDB: Inicialização completa do buffer pool
InnoDB: Erro: arquivo de log ./ib_logfile0 é de tamanho diferente 0 5242880 bytes
InnoDB: do que o especificado em o arquivo .cnf 0 33554432 bytes!
110216 9:48:41 [ERRO] A função de inicialização do plug-in 'InnoDB' retornou um erro.
110216 9:48:41 [ERRO] Falha no registro do plug-in 'InnoDB' como STORAGE ENGINE.
Então, minha pergunta: é seguro excluir os log_files antigos ou existe outro método para alterar a innodb_log_file_size
variável?
Sim, é seguro deletar o arquivo de log assim que o mysqld for desligado
Diante disso, basta realizar os seguintes passos:
A inicialização do mysqld irá recriar
ib_logfile0
eib_logfile1
De uma chance !!!
ATUALIZAÇÃO 2011-10-20 16:40 EDT
Ele limpa todos os dados no InnoDB Buffer Pool antes de refazer os arquivos de log, você deve definir esta opção cerca de 1 hora antes do desligamento:
Por padrão, innodb_max_dirty_pages_pct é 75 (MySQL 5.5+) ou 90 (antes do MySQL 5.5). Definir isso como zero mantém o número de páginas sujas abaixo de 1% do InnoDB Buffer Pool. Performing
service mysql stop
faz isso de qualquer maneira. Além disso, um desligamento encerrará todos os itens restantes no log de redo. Para manter esta opção, basta adicioná-la ao /etc/my.cnf:ATUALIZAÇÃO 2013-04-19 16:16 EDT
Atualizei minha resposta um pouco mais com innodb_fast_shutdown porque costumava reiniciar o mysql e parar o mysql para fazer isso. Agora, essa etapa é vital porque cada transação não confirmada pode ter outras partes móveis dentro e fora dos logs de transações do InnoDB ( consulte InnoDB Infrastructure ).
Por favor, note que definir innodb_fast_shutdown para 2 limparia os logs também, mas mais partes móveis ainda existem e são escolhidas no Crash Recovery durante a inicialização do mysqld. A configuração de 0 é a melhor.
Em vez disso, eu recomendaria o método oficial , que reproduzo aqui por conveniência:
innodb_buffer_pool_size
-- simplesmente mudemy.cnf
(my.ini
) e reinicie o mysqld.innodb_log_file_size
é menos crítico. Não altere a menos que haja uma razão para isso. Roland deu os passos , mas um aspecto me preocupa... Não sei se os dois primeiros passos são importantes; parece que eles podem ser:set innodb_fast_shutdown = OFF
Os arquivos de log acompanham os negócios inacabados; "
innodb_fast_shutdown
" diz para lidar com essas coisas depois de reiniciar. Então, remover os arquivos pode perder informações?Novas versões melhoraram as coisas: (mais discussão nos comentários)
innodb_log_file_size
> 4 GBinnodb_log_file_size
pode ser alterado sem primeiro remover o iblog*innodb_buffer_pool_size
Devo alterar log_file_size?
Use
GLOBAL STATUS
para calcular o número de minutos antes dos ciclos de log.Se for muito inferior a 60 (minutos), pode ajudar a aumentar log_file_size. Se for muito mais, os arquivos de log estão desperdiçando espaço em disco. Essa "1 hora" é bastante arbitrária, portanto, se você estiver perto disso, não se preocupe em alterar o log_file_size.
Deixe
innodb_log_files_in_group
no padrão de 2.Quando você fizer logon no mysql, digite esses comandos:
Você receberá dois números. Primeiro você pega um e depois espera um minuto. Você vai conseguir outro.
Digamos que o primeiro seja 3.456.718.123 e o segundo seja 4.098.873.134
Agora (4.098.873.134-3.856.718.123)*60/1024/1024
O resultado é = 13,856 MB
Você tem dois arquivos de log. Então divida por dois e você terá um número próximo a 7.000 MB. Só para ter certeza, defina o tamanho do arquivo de log de 8 GB
chown mysql:mysql -R /etc/mysql /var/lib/mysql && cd /var/lib/mysql && rm -f ib_logfile* && service mysql restart || serviço mysql reiniciar
Experimente, garanto que está funcionando [testado no Debian 6]