Así que soy bastante nuevo en el ajuste de InnoDB. Estoy cambiando lentamente las tablas (cuando sea necesario) de MyIsam a InnoDB. Tengo aproximadamente 100 MB en innodb, así que aumenté la innodb_buffer_pool_size
variable a 128 MB:
mysql> show variables like 'innodb_buffer%';
+-------------------------+-----------+
| Variable_name | Value |
+-------------------------+-----------+
| innodb_buffer_pool_size | 134217728 |
+-------------------------+-----------+
1 row in set (0.00 sec)
Cuando fui a cambiar el innodb_log_file_size
valor (ejemplo my.cnf en los comentarios de la página de configuración innodb de mysql para cambiar el tamaño del archivo de registro al 25% del tamaño del búfer. Entonces mi my.cnf se ve así:
# innodb
innodb_buffer_pool_size = 128M
innodb_log_file_size = 32M
Cuando reinicio el servidor, aparece este error:
110216 9:48:41 InnoDB: Inicializando agrupación de almacenamiento intermedio, tamaño = 128.0M
110216 9:48:41 InnoDB: Inicialización completada de agrupación de almacenamiento intermedio
InnoDB: Error: el archivo de registro ./ib_logfile0 es de diferente tamaño 0 5242880 bytes
InnoDB: que el especificado en el archivo .cnf 0 33554432 bytes!
110216 9:48:41 [ERROR] La función de inicio del complemento 'InnoDB' devolvió el error.
110216 9:48:41 [ERROR] El registro del complemento 'InnoDB' como MOTOR DE ALMACENAMIENTO falló.
Entonces mi pregunta: ¿es seguro eliminar los archivos de registro antiguos o hay otro método para cambiar la innodb_log_file_size
variable?
Respuestas:
Sí, es seguro eliminar el archivo de registro una vez que mysqld ha sido apagado
En vista de esto, solo realice los siguientes pasos:
Al iniciar mysqld se recreará
ib_logfile0
yib_logfile1
Darle una oportunidad !!!
ACTUALIZACIÓN 2011-10-20 16:40 EDT
Pagina limpiamente todos los datos en el InnoDB Buffer Pool antes de rehacer los archivos de registro, debe configurar esta opción aproximadamente 1 hora antes del apagado:
Por defecto, innodb_max_dirty_pages_pct es 75 (MySQL 5.5+) o 90 (antes de MySQL 5.5). Establecer esto a cero mantiene el número de páginas sucias por debajo del 1% del InnoDB Buffer Pool. Realizarlo
service mysql stop
hace esto de todos modos. Además, un apagado terminará los elementos restantes en el registro de rehacer. Para mantener esta opción, simplemente agréguela a /etc/my.cnf:ACTUALIZACIÓN 2013-04-19 16:16 EDT
Actualicé mi respuesta un poco más con innodb_fast_shutdown porque solía reiniciar mysql y detener mysql para hacer esto. Ahora, este paso es vital porque cada transacción no comprometida puede tener otras partes móviles dentro y fuera de los InnoDB Transaction Logs ( Ver Infraestructura InnoDB ).
Tenga en cuenta que establecer innodb_fast_shutdown en 2 también eliminaría los registros, pero aún existen más partes móviles y se selecciona en Crash Recovery durante el inicio de mysqld. La configuración de 0 es la mejor.
fuente
SET GLOBAL innodb_fast_shutdown = 0;
. Cuando MySQL se cierra, todo lo transaccional se elimina de todas las partes móviles, incluidos los registros de rehacer (ib_logfile0 e ib_logfile1). Uno puede quedarse con ellos. Todavía tengo que encontrar problemas con los registros completamente enjuagados.En cambio, recomendaría el método oficial , que reproduzco aquí por conveniencia:
fuente
innodb_buffer_pool_size
- simplemente cambiemy.cnf
(my.ini
) y reinicie mysqld.innodb_log_file_size
Es menos crítico. No lo cambie a menos que haya una razón para hacerlo. Roland proporcionó los pasos , pero un aspecto me preocupa ... No sé si los dos primeros pasos son importantes; parece que podrían ser:set innodb_fast_shutdown = OFF
Los archivos de registro realizan un seguimiento de los asuntos pendientes; "
innodb_fast_shutdown
" dice que debe lidiar con esas cosas después de reiniciar. Entonces, ¿eliminar los archivos puede perder información?Las nuevas versiones han mejorado las cosas: (más discusión en Comentarios)
innodb_log_file_size
> 4GBinnodb_log_file_size
se puede cambiar sin quitar primero iblog *innodb_buffer_pool_size
¿Debo cambiar log_file_size?
Se usa
GLOBAL STATUS
para calcular la cantidad de minutos antes de los ciclos de registro.Si es mucho menos de 60 (minutos), entonces podría ayudar a aumentar log_file_size. Si es mucho más, entonces los archivos de registro están desperdiciando espacio en disco. Esa "1 hora" es bastante arbitraria, por lo que si está cerca de ella, no se moleste en cambiar el log_file_size.
Dejar
innodb_log_files_in_group
en el valor predeterminado de 2.fuente
--skip-networking
como medida de precaución para eliminar esos cambios de última hora. Su primera línea (set innodb_fast_shutdown = OFF) elimina eso. +1 !!!innodb_log_file_size
se mejoró para permitir cambiarlo sin eliminar los archivos iblog.Cuando inicie sesión en mysql, escriba esos comandos:
Obtendrás dos números. Primero obtienes uno y luego espera un minuto. Obtendrás otro.
Digamos que el primero es 3.456.718.123 y el segundo es 4.098.873.134
Ahora (4.098.873.134-3.856.718.123) * 60/1024/1024
El resultado es = 13.856 MB
Tienes dos archivos de registro. Divídalo por dos y obtendrá un número cercano a los 7,000 MB. Solo para estar seguro, configure el tamaño del archivo de registro de 8 GB
fuente
Log File Size
en dba.stackexchange.com/questions/23189/… )chown mysql: mysql -R / etc / mysql / var / lib / mysql && cd / var / lib / mysql && rm -f ib_logfile * && service mysql restart || servicio mysql reiniciar
Pruébelo, garantizado para funcionar [probado en Debian 6]
fuente