mysql no comenzará después de aumentar innodb_buffer_pool_size e innodb_log_file_size

18

Estoy siguiendo esta solución aquí /programming/3927690/howto-clean-a-mysql-innodb-storage-engine/4056261#comment14041132_4056261 e intenté aumentar mi innodb_buffer_pool_sizea 4G y más tarde 1G (también 1024M) en Además del tamaño del archivo de registro, pero mysql no comenzará con esos valores. Si lo devuelvo a 512M, mysql comienza bien.

¿Como puedo resolver esto? Mi servidor es de 16 GB y, según Webmin sysinfo:

Real memory 15.62 GB total, 3.13 GB used

Mientras tanto, también encontré el registro de errores:

120529 10:29:32 mysqld_safe mysqld del archivo pid /var/run/mysqld/mysqld.pid finalizó

120529 10:29:33 mysqld_safe Iniciar mysqld daemon con bases de datos desde / var / lib / mysql

120529 10:29:33 [Nota] El complemento 'FEDERADO' está deshabilitado.

120529 10:29:33 InnoDB: el montón de memoria InnoDB está deshabilitado

120529 10:29:33 InnoDB: Mutexes y rw_locks usan componentes atómicos GCC

120529 10:29:33 InnoDB: las tablas comprimidas usan zlib 1.2.3

120529 10:29:33 InnoDB: Uso de AIO nativo de Linux

120529 10:29:33 InnoDB: Inicializando agrupación de almacenamiento intermedio, tamaño = 1.0G

120529 10:29:33 InnoDB: inicialización completada de la agrupación de almacenamiento intermedio

InnoDB: Error: el archivo de registro ./ib_logfile0 es de diferente tamaño 0 134217728 bytes

InnoDB: que el especificado en el archivo .cnf 0 268435456 bytes!

giorgio79
fuente
¿Podría por favor compartir los registros de error para eso ...
Abdul Manaf
Gracias, logré encontrarlo. Creo que esto será más fácil. También debería haber agregado inicialmente que también aumenté el tamaño del archivo de registro para que coincida con el aumento en el grupo de búferes (agregué esta información ahora).
giorgio79
Ok @ giorgio79 ...
Abdul Manaf
Intente eliminar los archivos de registro.
dezso
¿Eliminó primero el tamaño del archivo de registro? ¿Dejaste caer todas las bases de datos primero? Por favor, agregue más información sobre lo que hizo exactamente?
ALH

Respuestas:

19

Las dos respuestas de @RickJames y @drogart son esencialmente los remedios. (+1 para cada uno).

Desde el registro de errores que presenta, las dos últimas líneas dicen:

InnoDB: Error: el archivo de registro ./ib_logfile0 es de diferente tamaño 0 134217728 bytes

InnoDB: que el especificado en el archivo .cnf 0 268435456 bytes! ``

En ese momento, era evidente que configuró innodb_log_file_size en 256M (268435456) my.cnfmientras que los InnoDB Transaction Logs ( ib_logfile0, ib_logfile1) eran respectivamente 128M (134217728) cada uno. Mirando hacia atrás en el enlace a mi respuesta de StackOverflow en su pregunta, tuvo que hacer lo siguiente:

Paso 01) Agregue esto a my.cnf:

[mysqld]
innodb_buffer_pool_size=4G
innodb_log_file_size=1G

Paso 02) Ejecuta estos comandos en el sistema operativo

mysql -u... -p... -e"SET GLOBAL innodb_fast_shutdown = 1"
service mysql stop
rm -f /var/lib/mysql/ib_logfile*
service mysql start

Para tener confianza en lo que está sucediendo, ejecute tail -fcontra el registro de errores. Verá un mensaje que le indica cuándo se crea cada archivo de registro innodb.

RolandoMySQLDBA
fuente
Gracias, sí, no los eliminé primero. Solo quería ver cómo se comporta mysql. Después de realizar el paso 3, reiniciar funcionó.
giorgio79
1
Creo que uno no debería eliminar los archivos de registro, sino moverlos a otro lugar, y eliminarlos un poco más tarde cuando haya cambiado con éxito el tamaño del archivo de registro. De lo contrario, estaría en problemas si MySQL fallaba antes de ejecutar service mysqld stop.
KajMagnus
4

Según el error en el registro, supongo que hiciste esto:

  • apague mysql
  • editó my.cnf para cambiar el tamaño del archivo de registro innodb
  • intentó iniciar mysql (luego falló)

Si cambia el tamaño del archivo de registro, debe eliminar los archivos de registro antiguos. Innodb no se iniciará correctamente si los archivos existentes no coinciden con el tamaño especificado en el archivo de configuración. Si los mueve a otro lugar, innodb creará nuevos archivos de registro de transacciones del tamaño correcto cuando se inicie.

Recomendaría mover los archivos antiguos a otro directorio en lugar de simplemente eliminarlos, hasta que el servidor esté en funcionamiento con nuevos archivos de registro y todo se vea bien.

drogart
fuente
3

El buffer_pool debe establecerse en aproximadamente el 70% de la RAM disponible si solo está ejecutando InnoDB.

El tamaño del registro no importa mucho. Lo óptimo es configurarlo de modo que (Uptime * innodb_log_file_size / Innodb_os_log_written) sea aproximadamente 3600 (1 hora).

Para cambiar el tamaño del registro, uno debe

  1. apague mysqld limpiamente
  2. eliminar el valor en my.cnf (my.ini)
  3. eliminar los archivos de registro
  4. retstart: se reconstruirán nuevos archivos de registro.
Rick James
fuente
Gracias, sí, esta también es una respuesta correcta. Aunque solo pude aceptar uno. + 1d esto también.
giorgio79
1

También puede haber algún problema en el valor proporcionado para el tamaño de la agrupación de almacenamiento intermedio . como sucedió en mi caso ...

Al aumentar o disminuir innodb_buffer_pool_size, la operación se realiza en trozos. El tamaño del fragmento se define mediante la innodb_buffer_pool_chunk_sizeopción de configuración, que tiene un valor predeterminado de 128M. Para obtener más información, consulte Configuración del tamaño de fragmento de InnoDB Buffer Pool .

El tamaño de la agrupación de almacenamiento intermedio siempre debe ser igual o múltiplo de innodb_buffer_pool_chunk_size * innodb_buffer_pool_instances. Si configura innodb_buffer_pool_sizeun valor que no es igual o un múltiplo de innodb_buffer_pool_chunk_size * innodb_buffer_pool_instances, el tamaño de la agrupación de almacenamiento intermedio se ajusta automáticamente a un valor que es igual o un múltiplo de innodb_buffer_pool_chunk_size * innodb_buffer_pool_instancesese valor no es menor que el tamaño de la agrupación de almacenamiento intermedio especificado.

En el ejemplo, innodb_buffer_pool_sizese establece en 8G y innodb_buffer_pool_instancesen 16. innodb_buffer_pool_chunk_sizees 128M, que es el valor predeterminado.

8G es un innodb_buffer_pool_sizevalor válido porque 8G es un múltiplo de innodb_buffer_pool_instances=16 * innodb_buffer_pool_chunk_size=128M, que es 2G.

SHIVI
fuente