AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / dba / Perguntas / 1261
Accepted
Derek Downey
Derek Downey
Asked: 2011-02-17 07:01:01 +0800 CST2011-02-17 07:01:01 +0800 CST 2011-02-17 07:01:01 +0800 CST

Como alterar com segurança a variável innodb do MySQL 'innodb_log_file_size'?

  • 772

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?

mysql innodb
  • 5 5 respostas
  • 219195 Views

5 respostas

  • Voted
  1. Best Answer
    RolandoMySQLDBA
    2011-02-17T09:15:37+08:002011-02-17T09:15:37+08:00

    Sim, é seguro deletar o arquivo de log assim que o mysqld for desligado

    Diante disso, basta realizar os seguintes passos:

    mysql -uroot -p... -e"SET GLOBAL innodb_fast_shutdown = 0"
    service mysql stop
    mv /var/lib/mysql/ib_logfile[01] /tmp
    service mysql start
    

    A inicialização do mysqld irá recriar ib_logfile0eib_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:

    SET GLOBAL innodb_max_dirty_pages_pct = 0;
    

    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:

    [mysqld]
    innodb_max_dirty_pages_pct = 0
    

    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.

    • 92
  2. RandomSeed
    2013-06-19T02:21:23+08:002013-06-19T02:21:23+08:00

    Em vez disso, eu recomendaria o método oficial , que reproduzo aqui por conveniência:

    Para alterar o número ou o tamanho dos arquivos de log do InnoDB no MySQL 5.6.7 ou anterior , use as instruções a seguir. O procedimento a ser usado depende do valor de innodb_fast_shutdown, que determina se o tablespace do sistema deve ou não ser totalmente atualizado antes de uma operação de desligamento:

    • Se innodb_fast_shutdown não estiver definido como 2: Pare o servidor MySQL e certifique-se de que ele seja encerrado sem erros, para garantir que não haja informações de transações pendentes no redo log. Copie os arquivos de redo log antigos para um local seguro, caso algo dê errado durante o desligamento e você precise deles para recuperar o tablespace. Exclua os arquivos de log antigos do diretório de arquivos de log, edite my.cnf para alterar a configuração do arquivo de log e inicie o servidor MySQL novamente. mysqld vê que nenhum arquivo de log do InnoDB existe na inicialização e cria novos.

    • Se innodb_fast_shutdown estiver definido como 2: Defina innodb_fast_shutdown como 1:

    mysql> SET GLOBAL innodb_fast_shutdown = 1;

    Em seguida, siga as instruções do item anterior.

    A partir do MySQL 5.6.8 , a configuração innodb_fast_shutdown não é mais relevante ao alterar o número ou o tamanho dos arquivos de log do InnoDB. Além disso, não é mais necessário remover arquivos de log antigos, embora você ainda queira copiar os arquivos de log antigos para um local seguro, como backup. Para alterar o número ou o tamanho dos arquivos de log do InnoDB, execute as seguintes etapas:

    1. Pare o servidor MySQL e certifique-se de que ele seja encerrado sem erros.

    2. Edite my.cnf para alterar a configuração do arquivo de log. Para alterar o tamanho do arquivo de log, configure innodb_log_file_size. Para aumentar o número de arquivos de log, configure innodb_log_files_in_group.

    3. Inicie o servidor MySQL novamente.

    Se o InnoDB detectar que o innodb_log_file_size difere do tamanho do arquivo de log de redo, ele gravará um ponto de verificação de log, fechará e removerá os arquivos de log antigos, criará novos arquivos de log no tamanho solicitado e abrirá os novos arquivos de log.

    • 32
  3. Rick James
    2011-07-26T15:15:13+08:002011-07-26T15:15:13+08:00

    innodb_buffer_pool_size-- simplesmente mude my.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:

    1. set innodb_fast_shutdown = OFF
    2. reinicie o mysql
    3. parar o mysql
    4. remova os arquivos de log
    5. iniciar mysql

    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)

    • 5.6 Permite innodb_log_file_size> 4 GB
    • 5.6 innodb_log_file_sizepode ser alterado sem primeiro remover o iblog*
    • 5.7 permite redimensionar dinamicamenteinnodb_buffer_pool_size

    Devo alterar log_file_size?

    Use GLOBAL STATUSpara calcular o número de minutos antes dos ciclos de log.

    Uptime / 60 * innodb_log_file_size / Innodb_os_log_written`
    

    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.

    • 23
  4. Flutter Newbie
    2017-12-30T09:14:13+08:002017-12-30T09:14:13+08:00

    Quando você fizer logon no mysql, digite esses comandos:

    pager grep seq;
    show engine innodb status \G select sleep(60); show engine innodb status \G
    

    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

    • 1
  5. Gregory
    2012-12-31T19:29:46+08:002012-12-31T19:29:46+08:00

    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]

    • -5

relate perguntas

  • Existem ferramentas de benchmarking do MySQL? [fechado]

  • Onde posso encontrar o log lento do mysql?

  • Como posso otimizar um mysqldump de um banco de dados grande?

  • Quando é o momento certo para usar o MariaDB em vez do MySQL e por quê?

  • Como um grupo pode rastrear alterações no esquema do banco de dados?

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    Como você mysqldump tabela (s) específica (s)?

    • 4 respostas
  • Marko Smith

    Como você mostra o SQL em execução em um banco de dados Oracle?

    • 2 respostas
  • Marko Smith

    Como selecionar a primeira linha de cada grupo?

    • 6 respostas
  • Marko Smith

    Listar os privilégios do banco de dados usando o psql

    • 10 respostas
  • Marko Smith

    Posso ver Consultas Históricas executadas em um banco de dados SQL Server?

    • 6 respostas
  • Marko Smith

    Como uso currval() no PostgreSQL para obter o último id inserido?

    • 10 respostas
  • Marko Smith

    Como executar o psql no Mac OS X?

    • 11 respostas
  • Marko Smith

    Como inserir valores em uma tabela de uma consulta de seleção no PostgreSQL?

    • 4 respostas
  • Marko Smith

    Como faço para listar todos os bancos de dados e tabelas usando o psql?

    • 7 respostas
  • Marko Smith

    Passando parâmetros de array para um procedimento armazenado

    • 12 respostas
  • Martin Hope
    Manuel Leduc Restrição exclusiva de várias colunas do PostgreSQL e valores NULL 2011-12-28 01:10:21 +0800 CST
  • Martin Hope
    markdorison Como você mysqldump tabela (s) específica (s)? 2011-12-17 12:39:37 +0800 CST
  • Martin Hope
    Stuart Blackler Quando uma chave primária deve ser declarada sem cluster? 2011-11-11 13:31:59 +0800 CST
  • Martin Hope
    pedrosanta Listar os privilégios do banco de dados usando o psql 2011-08-04 11:01:21 +0800 CST
  • Martin Hope
    Jonas Como posso cronometrar consultas SQL usando psql? 2011-06-04 02:22:54 +0800 CST
  • Martin Hope
    Jonas Como inserir valores em uma tabela de uma consulta de seleção no PostgreSQL? 2011-05-28 00:33:05 +0800 CST
  • Martin Hope
    Jonas Como faço para listar todos os bancos de dados e tabelas usando o psql? 2011-02-18 00:45:49 +0800 CST
  • Martin Hope
    BrunoLM Guid vs INT - Qual é melhor como chave primária? 2011-01-05 23:46:34 +0800 CST
  • Martin Hope
    bernd_k Quando devo usar uma restrição exclusiva em vez de um índice exclusivo? 2011-01-05 02:32:27 +0800 CST
  • Martin Hope
    Patrick Como posso otimizar um mysqldump de um banco de dados grande? 2011-01-04 13:13:48 +0800 CST

Hot tag

sql-server mysql postgresql sql-server-2014 sql-server-2016 oracle sql-server-2008 database-design query-performance sql-server-2017

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve