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.
Respostas:
À primeira vista, eu diria que o tamanho do seu innodb_log_file_size é muito pequeno. Deve ser maior fazer duas coisas:
Aqui está o que você deve fazer por enquanto para ver se isso ajuda:
PASSO 01) Altere o seguinte em /etc/my.cnf
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
De uma chance !!!
ATUALIZAÇÃO 2013-07-03 12:37 EDT
Eu atualizei meus outros posts e perdi este
ButtleButkus acabou de comentar em
2013-07-03 07:18:56 EDT
Como pode haver dados transacionais inacabados, aqui está o que deve ser feito
PASSO 01) Altere o seguinte em /etc/my.cnf
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 04para 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 ...
May 20, 2013
: Innodb um arquivo por espaço de tabelaMay 05, 2013
: Problema após mover os arquivos ib_logfile1 e ib_logfile0Jan 10, 2013
: Localizando e corrigindo corrupção do índice InnoDBDec 17, 2012
: Iniciar / Parar MySQLFeb 16, 2011
: Como alterar com segurança a variável innodb do MySQL 'innodb_log_file_size'? (Última atualização)Feb 04, 2011
: InnoDB do MySQL - contras innodb_file_per_table? (Última atualização)Oct 29, 2010
: Como limpar um mecanismo de armazenamento mysql InnoDB? (Adicionado como Etapa 03Jun 04, 2013
)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 .
fonte