Cómo aumentar el tamaño de redo log en MySQL/MariaDB
El problema
En versiones de MySQL a partir de la 5.6.20 y por consiguiente en MariaDB, se puede presentar un error cuando importas tablas y bases de datos si el tamaño del redo log es demasiado pequeño, el cual es controlado por la directiva «innodb_log_file_size«. El error se encuentra asociado con el siguiente mensaje:
1 2 |
The size of BLOB/TEXT data inserted in one transaction is greater than 10% of redo log size. Increase the redo log size using innodb_log_file_size. |
El cambio introducido a partir de MySQL 5.6.20 es:
As a result of the redo log BLOB write limit introduced for MySQL 5.6, the innodb_log_file_size setting should be 10 times larger than the largest BLOB data size found in the rows of your tables plus the length of other variable length fields (VARCHAR, VARBINARY, and TEXT type fields). No action is required if your innodb_log_file_size setting is already sufficiently large or your tables contain no BLOB data.
Esto nos indica que el valor de «innodb_log_file_size» debe ser 10 veces más grande que el tamaño del dato BLOB encontrado en las filas de las tablas. Esto no suele ser un problema si el valor de «innodb_log_file_size» es lo suficientemente grande o las tablas de tu base de datos no contienen datos BLOB.
Solucionando el problema
La solución consiste en editar el archivo de configuración (my.cnf) de MySQL/MariaDB e incrementar el valor de «innodb_log_file_size«. El valor predeterminado de «innodb_log_file_size» es de 48 MB por lo que lo aumentaremos a 256 MB.
Para cambiar el valor de «innodb_log_file_size» es necesario llevar a cabo los pasos que a continuación te muestro.
- Apagar el servicio mysql:
1 |
$ sudo systemctl stop mysql |
Si empleas WHM/CPanel, asegúrate de desactivar que el sistema supervise el servicio mysql, para evitar que se inicie en lo que relizas la modificación.
- Comprobar que el serivicio finalizó correctamente.
1 |
$ sudo systemctl status mysql |
- Mover hacia el directorio «/root» los archivos «ib_logfile0, ib_logfile1» y así:
1 |
$ sudo mv /var/lib/mysql/ib_logfile* /root |
- Aumentar el tamaño de «innodb_log_file_size» a 256 MB.
Para Debian y derivados, editar así:
1 |
$ sudo vim /etc/mysql/my.cnf |
Para RHEL/CentOS, editar:
1 |
$ sudo vim /etc/my.cnf |
Agregar dentro de la sección [mysqld]
1 2 |
[mysqld] innodb_log_file_size=256M |
- Finalmente iniciar el servicio mysql y comprobar que todo ha iniciado de forma normal.
1 2 |
$ sudo systemctl start mysql $ sudo systemctl status mysql |
A partir de aquí ya puedes importar tus tablas y/o bases de datos que contengan datos BLOB grandes. Si deseas conocer cómo instalar un servidor LAMP en detalles no te pierdas este excelente tutorial «Cómo instalar Linux, Apache, PHP, Mysql en Ubuntu«.
Estimado,
clara y concisa la nota, me ayudó a resolver mi problema.
Gracias,
Gracias!! Me alegro que hayas resuelto. Saludos!