Mysql Innodb: InnoDB: ERRO: a idade do último ponto de verificação é InnoDB: que excede a capacidade do grupo de logs

25

Eu realmente preciso de alguns conhecimentos especializados em mysql. Eu sou um newbi para mysql e estou vendo alguma falha no servidor do meu db na última semana.

Estou usando o mysql 5.1.36 no Ubuntu. Este é um servidor mysql dedicado com Dual core e 4GB de memória e 40GB SSD.

Os erros de log são:

120413 23:57:15 [Note] Plugin 'FEDERATED' is disabled.
120413 23:57:15 [Warning] option 'innodb-autoextend-increment': unsigned value 2000 adjusted to 1000
120413 23:57:15  InnoDB: Initializing buffer pool, size = 2.9G
120413 23:57:15  InnoDB: Completed initialization of buffer pool
120413 23:57:16  InnoDB: Started; log sequence number 0 44234
120413 23:57:16 [Note] Event Scheduler: Loaded 0 events
120413 23:57:16 [Note] /usr/sbin/mysqld: ready for connections.
Version: '5.1.58-1ubuntu1-log'  socket: '/var/run/mysqld/mysqld.sock'  port: 3306  (Ubuntu)
120414  0:00:25 [Warning] Neither --relay-log nor --relay-log-index were used; so replication may break when this MySQL server acts as a slave and has his hostname changed!! Please use '--relay-log=e2-relay-bin' to avoid this problem.
120414  0:00:25 [Note] 'CHANGE MASTER TO executed'. Previous state master_host='', master_port='3306', master_log_file='', master_log_pos='4'. New state master_host='', master_port='3306', master_log_file='mysql-bin.000043', master_log_pos='87039427'.
120414  0:58:37 [Note] 'CHANGE MASTER TO executed'. Previous state master_host='', master_port='3306', master_log_file='mysql-bin.000043', master_log_pos='87039427'. New state master_host='', master_port='3306', master_log_file='mysql-bin.000043', master_log_pos='87846901'.
120414  2:20:34  InnoDB: ERROR: the age of the last checkpoint is 241588252,
InnoDB: which exceeds the log group capacity 241588224.
InnoDB: If you are using big BLOB or TEXT rows, you must set the   
InnoDB: combined size of log files at least 10 times bigger than the
InnoDB: largest such row.

My.cnf é como abaixo.

default-storage-engine=innodb
default-table-type=innodb
key_buffer              = 384M
max_allowed_packet      = 64M
thread_stack            = 256K
thread_cache_size       = 16
max_heap_table_size     = 64M
myisam_sort_buffer_size = 64M
join_buffer_size        = 8M
read_buffer_size        = 2M
read_rnd_buffer_size    = 8M
sort_buffer_size        = 3M
tmp_table_size          = 64M
# Innodb changes
innodb_additional_mem_pool_size = 16M
innodb_autoextend_increment     = 2000
innodb_buffer_pool_size         = 3000M #As current Db is around 1.2G.
innodb_file_per_table
innodb_data_file_path           = ibdata1:512M;ibdata2:512M:autoextend
innodb_flush_log_at_trx_commit  = 2 #For more reliablity use 1
innodb_flush_method             = O_DIRECT
innodb_log_buffer_size          = 8M
innodb_log_file_size            = 128M #Transaction Log up to 1/4 Buffer Pool
innodb_thread_concurrency       = 16
#innodb_force_recovery          = 2
#innodb_read_io_threads         = 8
#innodb_write_io_threads                = 8
innodb_lock_wait_timeout        = 50
# This replaces the startup script and checks MyISAM tables if needed
# the first time they are touched
myisam-recover         = BACKUP
max_connections        = 400
table_cache            = 1024M
thread_concurrency     = 16

Alguma sugestão que eu possa mudar.

TheVyom
fonte
Desculpe ... as primeiras linhas foram apagadas.
precisa saber é o seguinte
Faça um favor a si mesmo e use uma versão mais recente do MySQL, se puder. 5.1.38 é antigo. Pelo menos, atualize para uma versão 5.1 mais recente, se não 5.5, se você puder.
23412 Aaron Brown

Respostas:

26

À primeira vista, eu diria que o tamanho do seu innodb_log_file_size é muito pequeno. Deve ser maior fazer duas coisas:

  • Acomoda todos os grandes campos BLOB ou TEXT
  • Realizando transações maiores

Aqui está o que você deve fazer por enquanto para ver se isso ajuda:

PASSO 01) Altere o seguinte em /etc/my.cnf

[mysqld]
innodb_log_buffer_size          = 32M
innodb_buffer_pool_size         = 3G
innodb_log_file_size            = 768M

PASSO 02) service mysql stop

PASSO 03) rm -f /var/lib/mysql/ib_logfile*

PASSO 04) service mysql start

Isso irá reconstruir os seguintes arquivos

  • / var / lib / mysql / ib_logfile0
  • / var / lib / mysql / ib_logfile1

De uma chance !!!

ATUALIZAÇÃO 2013-07-03 12:37 EDT

Eu atualizei meus outros posts e perdi este

ButtleButkus acabou de comentar em2013-07-03 07:18:56 EDT

Não seria aconselhável copiar o ib_logfile * para outro local para backup antes de excluí-los?

Como pode haver dados transacionais inacabados, aqui está o que deve ser feito

PASSO 01) Altere o seguinte em /etc/my.cnf

[mysqld]
innodb_log_buffer_size          = 32M
innodb_buffer_pool_size         = 3G
innodb_log_file_size            = 768M

PASSO 02) mysql -uroot -p -e "SET GLOBAL innodb_fast_shutdown = 0;"

PASSO 03) service mysql stop

PASSO 04) rm -f /var/lib/mysql/ib_logfile*

PASSO 05) service mysql start

Eu adicionei SET GLOBAL innodb_fast_shutdown = 0;. O que isso faz? Força o InnoDB a limpar completamente as alterações transacionais de todas as partes móveis do InnoDB, incluindo os logs transacionais (ib_logfile0, ib_logfile1). Portanto, não há necessidade de fazer backup do antigo ib_logfile0, ib_logfile1. Se a exclusão delas o deixar nervoso, faça o Passo 04

mv /var/lib/mysql/ib_logfile* ..

para colocar os registros antigos /var/lib. Se a recreação dos logs for bem-sucedida e o mysqld iniciar, você poderá excluir os logs antigos.

Uso esse recurso há um ano. Atualizei meus outros posts para refletir isso ...

Se houver outras postagens antigas em que não mencione innodb_fast_shutdown , informe-me para que eu possa atualizá-la. Mais uma vez obrigado, ButtleButkus .

RolandoMySQLDBA
fonte
Aumentar o arquivo de log para 256M e reduzir o buffer_pool_size para 2G parece fazer o truque.
precisa saber é o seguinte
Minha resposta ajudou ???
RolandoMySQLDBA
Desculpe esqueci de atualizar isso. Isso ajudou muito e nosso servidor ficou sem problemas desde o último mês.
TheVyom
Não seria aconselhável copiar o ib_logfile * para outro local para backup antes de excluí-los?
Buttle Butkus
11
768MB é bastante grande Por Percona Baron Schwartz percona.com/blog/2008/11/21/…
greenlitmysql