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_sizevariá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_sizevalor (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_sizevariá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_logfile0eib_logfile1De 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 stopfaz 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 = OFFOs 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_sizepode ser alterado sem primeiro remover o iblog*innodb_buffer_pool_sizeDevo alterar log_file_size?
Use
GLOBAL STATUSpara 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_groupno 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]