Então, eu sou bastante novo para ajustar o InnoDB. Estou mudando lentamente as tabelas (quando necessário) do MyIsam para o 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 mudar o innodb_log_file_size
valor (exemplo: my.cnf nos comentários da página de configuração do innodb do mysql para alterar o tamanho do arquivo de log para 25% do tamanho do buffer. Agora, meu my.cnf fica 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 o buffer pool, tamanho = 128.0M
110216 9:48:41 InnoDB: Inicialização concluída do buffer pool
InnoDB: Erro: o arquivo de log ./ib_logfile0 é de tamanho diferente 0 5242880 bytes
InnoDB: 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] O registro do plug-in 'InnoDB' como um STORAGE ENGINE falhou.
Então, minha pergunta: é seguro excluir os arquivos de log antigos ou existe outro método para alterar a innodb_log_file_size
variável?
Respostas:
Sim, é seguro excluir o arquivo de log após o encerramento do mysqld
À luz disso, execute as seguintes etapas:
Iniciar o mysqld irá recriar
ib_logfile0
eib_logfile1
De uma chance !!!
UPDATE 2011-10-20 16:40 EDT
Como pagina 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 pool de buffers do InnoDB. A execução
service mysql stop
faz isso de qualquer maneira. Além disso, um desligamento finalizará todos os itens restantes no log de refazer. Para manter essa opção, adicione-a ao /etc/my.cnf:ATUALIZAÇÃO 2013-04-19 16:16 EDT
Atualizei minha resposta um pouco mais com innodb_fast_shutdown porque eu costumava reiniciar o mysql e parar o mysql para fazer isso. Agora, essa etapa é vital porque todas as transações não confirmadas podem ter outras partes móveis dentro e fora dos logs de transações do InnoDB ( consulte Infra-estrutura do InnoDB ).
Observe que definir innodb_fast_shutdown como 2 também limparia os logs, mas ainda existem mais partes móveis e são selecionadas no Crash Recovery durante a inicialização do mysqld. Configuração de 0 é melhor.
fonte
SET GLOBAL innodb_fast_shutdown = 0;
. Quando o MySQL é encerrado, tudo transacional é liberado de todas as partes móveis, incluindo os logs de refazer (ib_logfile0 e ib_logfile1). Pode-se ficar com eles. Ainda não encontrei problemas com logs completamente liberados.Em vez disso, eu recomendaria o método oficial , que reproduzo aqui por conveniência:
fonte
innodb_buffer_pool_size
- simplesmente mudemy.cnf
(my.ini
) e reinicie o mysqld.innodb_log_file_size
é menos crítico. Não mude a menos que haja uma razão para isso. Roland forneceu os passos , mas um aspecto me preocupa ... Não sei se os dois primeiros passos são importantes; parece que eles poderiam 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 do ciclo do log.Se for muito menor que 60 (minutos), poderá ajudar a aumentar o 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 próximo, não se preocupe em alterar o tamanho do arquivo_log.
Deixe
innodb_log_files_in_group
no padrão 2.fonte
--skip-networking
como precaução para obter essas mudanças de última hora. Sua primeira linha (set innodb_fast_shutdown = OFF) elimina isso. +1 !!!innodb_log_file_size
foi aprimorado para permitir a alteração sem remover os arquivos iblog.Quando você faz logon no mysql, digite esses comandos:
Você receberá dois números. Primeiro você recebe um e depois espera um minuto. Você receberá 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ê obterá um número próximo a 7.000 MB. Apenas para ter certeza, defina o tamanho do arquivo de log de 8 GB
fonte
Log File Size
no dba.stackexchange.com/questions/23189/... )chown mysql: mysql -R / etc / mysql / var / lib / mysql && cd / var / lib / mysql && rm -f ib_logfile * && service mysql restart || serviço mysql restart
Experimente, com garantia de estar funcionando [testado no Debian 6]
fonte