martes, 6 de mayo de 2014

ERROR MySQL 1118 (42000) MySQL 5.0 a MySQL 5.5 o superior

Original post: http://anothermysqldba.blogspot.com/2014/05/mysql-error-1118-42000-mysql-50-to.html 

Así que recientemente he tenido una base de datos que TBs que tenía que actualizar de MySQL 5.0 a MySQL 5.5.
Este blog se referirá a lo siguiente:
  • sql_mode
  • innodb_strict_mode
  • ESCLAVO IO_THREAD
Durante el proceso de mysql_fix_privilege_tables (que hace un mysqlcheck) Rápidamente me di cuenta de el error siguiente:

ERROR 1118 (42000) at line 23: Row size too large (> 8126). Changing some columns to TEXT or BLOB or using ROW_FORMAT=DYNAMIC or ROW_FORMAT=COMPRESSED may help. In current row format, BLOB prefix of 768 bytes is stored inline.

Así que empecé tuve que comprobar algunas cosas primero.

# The master DB was > select @@sql_mode;
+------------+
| @@sql_mode |
+------------+
| |
+------------+
Nueva DB era
mysql> select @@sql_mode;
+--------------------------------------------+
| @@sql_mode |
+--------------------------------------------+
| STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION | +--------------------------------------------+ 
Aceptar Prefiero tener algo para sql_mode en un valor vacío.
Así que dejé ir eso.
# MASTER SERVER
select @@innodb_strict_mode;
ERROR 1193 (HY000): Unknown system variable 'innodb_strict_mode'

# NEW SERVER mysql> select @@innodb_strict_mode;
+----------------------+
| @@innodb_strict_mode |
+----------------------+
| 1 |
+----------------------+
Usted puede leer más sobre esta opción aquí:
http://dev.mysql.com/doc/innodb-plugin/1.0/en/innodb-other-changes-strict-mode.html
mysql> SET GLOBAL innodb_strict_mode=0;

El comando anterior me permitió mejorar al menos el mysql una comprobación de las tablas.Para estar seguro que todavía se configura un script bash para volcar y cargar todas las tablas. (Sí toda la TBS de ellos)

No tome un atajo y asumir que todo está bien.

Si se producen errores mysqldump y volver a cargar los archivos. Es mejor prevenir que lamentar más tarde.

Una vez que los datos se cargan en 5.5 + que puedo revisar y ajustar las variables.

Así que huelga decir que va a tomar algún tiempo para volcar y cargar Terabytes de datos.Quiero dar a los esclavos a todos la oportunidad que pueda para ponerse al día lo más rápido posible. Mientras mis scripts de shell están deshaciendo y carga de los datos, no hay ninguna razón por la que la base de datos no se puede reunir la binlogs en el ínterin.

mysql> START SLAVE IO_THREAD ; 
Así que ahora, mientras mi processlist mostrará:

SELECT /*!40001 SQL_NO_CACHE */ * 
el estado de esclavo muestra:
Slave_IO_Running: Sí
Slave_SQL_Running: No se

Así que estoy recogiendo troncos mientras limpio la base de datos.
Esto debería permitir que la base de datos para ponerse al día con rapidez una vez que estoy listo para ir.