Mysql Innodb: InnoDB: ERROR: la edad del último punto de control es InnoDB: que excede la capacidad del grupo de registro

25

Realmente necesito un poco de experiencia mysql. Soy un novato en mysql y veo un bloqueo del servidor de mi base de datos en la última semana.

Estoy usando mysql 5.1.36 en Ubuntu. Este es un servidor mysql dedicado con doble núcleo y memoria de 4GB y SSD de 40GB.

Los errores de registro son:

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 es como a continuación.

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

Alguna sugerencia de lo que puedo cambiar.

TheVyom
fuente
Lo siento ... las primeras líneas se borraron.
TheVyom
Hazte un favor y usa una versión más nueva de MySQL, si puedes. 5.1.38 es antiguo. Al menos, actualice a una versión 5.1 más reciente, si no 5.5, si puede.
Aaron Brown

Respuestas:

26

A primera vista, diría que su innodb_log_file_size es demasiado pequeño. Debería ser más grande hacer dos cosas:

  • Acomode cualquier campo BLOB o TEXT grande
  • Manteniendo transacciones más grandes

Esto es lo que debe hacer por ahora para ver si ayuda:

PASO 01) Cambie lo siguiente en /etc/my.cnf

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

PASO 02) service mysql stop

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

PASO 04) service mysql start

Esto reconstruirá los siguientes archivos

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

Darle una oportunidad !!!

ACTUALIZACIÓN 2013-07-03 12:37 EDT

He actualizado mis otras publicaciones sobre esto y me perdí esta.

ButtleButkus acaba de comentar en2013-07-03 07:18:56 EDT

¿No sería aconsejable copiar ib_logfile * en otra ubicación para realizar una copia de seguridad antes de eliminarlos?

Dado que podría haber datos transaccionales inacabados dentro, esto es lo que debe hacerse

PASO 01) Cambie lo siguiente en /etc/my.cnf

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

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

PASO 03) service mysql stop

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

PASO 05) service mysql start

Añadí SET GLOBAL innodb_fast_shutdown = 0;. Que hace eso Obliga a InnoDB a purgar completamente los cambios transaccionales de todas las partes móviles de InnoDB, incluidos los registros transaccionales (ib_logfile0, ib_logfile1). Por lo tanto, no es necesario hacer una copia de seguridad del antiguo ib_logfile0, ib_logfile1. Si eliminarlos te pone nervioso, entonces haz el Paso 04

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

para poner los viejos registros /var/lib. Si la recreación de los registros es exitosa y mysqld se inicia, puede eliminar los registros antiguos.

He estado usando esta función durante un año. He actualizado mis otras publicaciones para reflejar esto ...

Si hay otras publicaciones antiguas en las que no menciono innodb_fast_shutdown , avíseme para que pueda actualizarlo. Gracias de nuevo, ButtleButkus .

RolandoMySQLDBA
fuente
Aumentó el archivo de registro a 256M y redujo el buffer_pool_size a 2G parece hacer el truco.
TheVyom
¿Mi respuesta ayudó?
RolandoMySQLDBA
Lo siento, olvidé actualizar esto. Esto ha ayudado mucho y nuestro servidor ha estado funcionando sin problemas desde el último mes.
TheVyom
¿No sería aconsejable copiar ib_logfile * en otra ubicación para realizar una copia de seguridad antes de eliminarlos?
Buttle Butkus
1
768MB es bastante grande Per Percona Baron Schwartz percona.com/blog/2008/11/21/…
greenlitmysql