El Redo Log en MySQL 8.0: Clave en la Recuperación y Optimización de Datos

Un mecanismo esencial para la integridad de la base de datos

El redo log es una estructura fundamental en MySQL 8.0 que permite la recuperación de datos en caso de fallos inesperados del sistema. Su función principal es garantizar la consistencia y la durabilidad de las transacciones al registrar cambios antes de que sean aplicados definitivamente en los archivos de datos.

Durante el funcionamiento normal de MySQL, el redo log almacena modificaciones derivadas de sentencias SQL o llamadas de API de bajo nivel. En caso de que el sistema se detenga inesperadamente, los datos pendientes de escritura en el disco son recuperados y aplicados automáticamente antes de aceptar nuevas conexiones. Este proceso forma parte de los mecanismos de recuperación de InnoDB, esenciales para la integridad de la base de datos.


Estructura y funcionamiento del Redo Log

El redo log se representa físicamente en disco mediante archivos específicos que contienen información sobre las modificaciones realizadas. Estos archivos están organizados en base a un identificador llamado Log Sequence Number (LSN), que se incrementa de manera continua conforme se registran nuevos cambios. A medida que avanza el proceso de checkpointing, los datos más antiguos son eliminados para liberar espacio.

En MySQL 8.0, la capacidad del redo log puede configurarse de manera más flexible en comparación con versiones anteriores. A partir de MySQL 8.0.30, el parámetro innodb_redo_log_capacity permite ajustar dinámicamente el espacio asignado a estos registros.

SET GLOBAL innodb_redo_log_capacity = 8589934592; -- Configura una capacidad de 8GB

Este cambio puede realizarse en tiempo de ejecución y su impacto en el sistema dependerá del uso actual del redo log. Si los archivos de redo log ocupan menos espacio que el nuevo límite, la escritura en los archivos de datos se ralentiza, permitiendo un uso más eficiente del buffer pool. En cambio, si el espacio ocupado supera el nuevo valor, el sistema fuerza la escritura de los cambios en disco para ajustarse a la nueva capacidad.


Ubicación y organización de los archivos de Redo Log

Los archivos de redo log se almacenan en el directorio #innodb_redo, dentro del directorio de datos de MySQL, a menos que se haya especificado otra ubicación mediante el parámetro innodb_log_group_home_dir.

Cada archivo de redo log sigue una nomenclatura específica, con nombres como #ib_redoN, donde «N» representa el número de archivo. MySQL mantiene dos tipos de archivos:

  • Archivos ordinarios, que están en uso activo.
  • Archivos en espera, identificados con el sufijo _tmp, listos para ser utilizados cuando sea necesario.

El sistema intenta mantener un total de 32 archivos de redo log, distribuyendo el tamaño total de almacenamiento entre ellos. No obstante, las modificaciones en la configuración pueden hacer que los tamaños varíen temporalmente hasta estabilizarse.

Para verificar los archivos activos y los rangos de LSN asociados, se puede ejecutar la siguiente consulta en la base de datos:

SELECT FILE_NAME, START_LSN, END_LSN 
FROM performance_schema.innodb_redo_log_files;

Este comando mostrará información sobre los archivos de redo log y los valores de LSN almacenados en cada uno de ellos.


Configuración del Redo Log en versiones anteriores a MySQL 8.0.30

Antes de MySQL 8.0.30, la configuración del redo log se gestionaba mediante los parámetros innodb_log_file_size e innodb_log_files_in_group, los cuales determinaban el tamaño y el número de archivos de redo log.

Modificar la capacidad del redo log en estas versiones requería detener el servidor, cambiar la configuración en el archivo my.cnf y reiniciar MySQL para aplicar los cambios. Durante este proceso, MySQL detecta los nuevos valores, cierra los archivos antiguos y crea nuevos archivos de acuerdo con la nueva configuración.


Archivado del Redo Log: Garantizando la disponibilidad de datos en backups

Uno de los desafíos en la gestión de bases de datos MySQL es asegurar que los registros de redo log sean copiados correctamente durante los procesos de respaldo. En entornos con alta carga de escritura, los registros de redo log pueden sobrescribirse antes de ser capturados por la herramienta de backup.

Para mitigar este problema, MySQL introdujo el archivado del redo log a partir de la versión 8.0.17. Este mecanismo permite escribir los registros de redo log en un archivo de archivo separado, asegurando que los datos críticos sean preservados durante las copias de seguridad.

Para habilitar el archivado del redo log, se debe configurar la variable innodb_redo_log_archive_dirs:

SET GLOBAL innodb_redo_log_archive_dirs='backup1:/var/mysql/redologs';

Este comando establece un directorio de archivo identificado como backup1, donde se almacenarán los registros adicionales.

La activación del archivado puede hacerse manualmente o mediante herramientas de backup compatibles. Para iniciar el proceso de archivado manualmente, se utiliza la siguiente instrucción:

SELECT innodb_redo_log_archive_start('backup1');

Y para detener el archivado después del proceso de respaldo:

SELECT innodb_redo_log_archive_stop();

Impacto en el rendimiento y consideraciones de almacenamiento

El archivado del redo log tiene un impacto leve en el rendimiento debido a la escritura adicional de datos. En sistemas Unix/Linux, este impacto es generalmente bajo, pero en entornos Windows puede ser mayor debido a diferencias en la gestión de archivos.

Si los registros de redo log y sus archivos de archivo se almacenan en la misma unidad de disco, el rendimiento puede degradarse significativamente en caso de alta carga de escritura. Para optimizar este proceso, se recomienda almacenar los archivos de redo log y los archivos de archivo en dispositivos de almacenamiento separados.


Desactivación del Redo Logging en MySQL 8.0.21 y posteriores

Desde MySQL 8.0.21, es posible deshabilitar temporalmente el redo logging utilizando la instrucción:

ALTER INSTANCE DISABLE INNODB REDO_LOG;

Esta funcionalidad está pensada exclusivamente para cargas masivas de datos en una nueva instancia. Al desactivar el redo log, MySQL evita escrituras innecesarias en el redo log, acelerando significativamente la inserción de datos.

Advertencia: No se debe deshabilitar el redo log en entornos de producción. Si el servidor se detiene inesperadamente con el redo log desactivado, los archivos de datos pueden corromperse y el sistema impedirá su reinicio.

Para volver a habilitar el redo logging tras la carga de datos, se usa:

ALTER INSTANCE ENABLE INNODB REDO_LOG;

La variable de estado Innodb_redo_log_enabled permite verificar si el redo logging está activo:

SHOW GLOBAL STATUS LIKE 'Innodb_redo_log_enabled';

Conclusión

El redo log en MySQL 8.0 es una pieza fundamental para la recuperación de datos y el rendimiento del sistema. Su correcta configuración y gestión permite:

  • Mejorar la estabilidad y confiabilidad del sistema.
  • Optimizar el uso del almacenamiento y la escritura en disco.
  • Facilitar procesos de backup sin riesgo de pérdida de datos.
  • Acelerar cargas masivas de datos cuando sea necesario.

En entornos de producción, es crucial mantener un equilibrio entre la capacidad del redo log y el rendimiento del sistema, asegurando que los cambios sean almacenados de manera eficiente sin afectar la operación de la base de datos.

vía: Mysql Redo Log

Suscríbete al boletín SysAdmin

Este es tu recurso para las últimas noticias y consejos sobre administración de sistemas, Linux, Windows, cloud computing, seguridad de la nube, etc. Lo enviamos 2 días a la semana.

¡Apúntate a nuestro newsletter!


– patrocinadores –

Noticias destacadas

– patrocinadores –

¡SUSCRÍBETE AL BOLETÍN
DE LOS SYSADMINS!

Scroll al inicio
×