Moodle 2.0: Error leyendo la base de datos al actualizar

Moodle 2.0: Error leyendo la base de datos al actualizar

de Christian Rojas -
Número de respuestas: 16

Hola a todos,

He tenido un problema con la base de datos al actualizar y necesito alguna idea de que puede ser. Antes de nada os detallo como está instalado.

Servidor de Pruebas en MS Virtual PC 2007 con lo siguiente:

- CentOS 5.5, PHP 5.2.13, MySQL 5.0.77 y Apache 2.2.3

- Moodle 1.9.9+

- Diversos plugins añadidos a la versión estandar detectados en la actualización.

Os paso unas capturas de lo que sale:

Chequeo

Plugins detectados:

Plugins: módulosPlugins: bloques

Soy consciente de que están instalados en la versión 1.9.9+ y NO los he copiado a la nueva. Esto puede ser el origen del problema pero quiero corroborarlo. El error que da es el siguiente:

Error

Aparece algo de las matriculaciones en los cursos entre otras cosas. ¿Puede estar relacionado con los plugins no instalados u os parece que sea por otra cosa?

Muchas gracias

Un saludo

Promedio de valoraciones: -
En respuesta a Christian Rojas

Re: Moodle 2.0: Error leyendo la base de datos al actualizar

de Christian Rojas -

Añado más datos. He quitado los plugins antes de actualizar y resulta que me detecta bloques y módulos estandar como si no lo fueran. Adjunto captura:

bloques no estandar

? hotpot Non-standard (Missing from disk)
? journal Non-standard (Missing from disk)
? lams Non-standard (Missing from disk)
? admin Non-standard (Missing from disk)
? admin_tree Non-standard (Missing from disk)
? loancalc Non-standard (Missing from disk)

 

No me tiene mucho sentido aunque recuerdo haber aplicado un parche de actualización de los condicionales de CICEI y puede que modifique eso concretamente y por eso los detecto como no estandar. ¿Qué os parece?

Gracias

En respuesta a Christian Rojas

Re: Moodle 2.0: Error leyendo la base de datos al actualizar

de Lourdes J -

Hola Christian, tengo el mismo problema. Estoy tratando de actualizar moodle 1.9.16+ a 2.0.7 y en el modulo Hotpot me figura "Non-standard (Missing from disk)" al igual que en el bloque loancalc...vi que respondieron que podría ser problemas de tablas  que deben estar con cotejamiento utf8_general_ci , lo cual es correcto en mi caso.

Borre estas carpetas y lo mismo persiste el problema

Me gustaría saber como lo solucionaste.

Desde ya, muchas gracias

En respuesta a Christian Rojas

Re: Moodle 2.0: Error leyendo la base de datos al actualizar

de Iñaki Arenaza -
Imagen de Desarrolladores Imagen de Desarrolladores de plugins Imagen de Documentadores Imagen de Moderadores Imagen de Moodlers de gran ayuda
El problema tiene que ver con la configuración de algunas (¿todas?) las tablas de la base de datos, en concreto con lo que se denomina la 'colación' (en inglés collation).

Moodle 2.0 es bastante más estricto en este punto que las versiones anteriores, para reducir los problemas que a veces surgían de tener estos valores mal configurados (de ahí que antes no se quejara, mientras que ahora lo hace).

En concreto tienes algunas tablas con la colación 'utf8_unicode_ci', mientras que otras está con 'utf8_general_ci'. Y MySQL dice que no son compatibles las dos entre sí para hacer la operación.

Moodle, cuando usa MySQL, presupone que se usa 'utf8_general_ci' por defecto. Por lo que tendrás que usar una herramienta como phpMyAdmin o la herramienta de línea de comandos 'mysql' para cambiar la colación a todas las tablas que no tengan 'utf8_general_ci' (así como a la propia base de datos en sí).

Saludos.
Iñaki.
En respuesta a Iñaki Arenaza

Re: Moodle 2.0: Error leyendo la base de datos al actualizar

de Christian Rojas -

Muchísimas gracias Iñaki. Me ha quedao muy claro.

Supongo que alguno de los plugins utilizará unicode ya que no creo que moodle "a pelo" cree tablas de los dos tipos :D

Acabo de revisar el PhpMyAdmin y ya aparecen las unicode por algunos sitios ;) pero algo en lo que no me había fijado antes (y que no tiene que ver con la pregunta inicial) es que las tablas usan MyISAM en vez de InnoDB. ¿Es esto correcto? Tengo entendido que InnoDB es mucho mejor. ¿Lo debería cambiar? ¿Como lo haría? (Modo preguntón: Off)

De nuevo, gracias.

En respuesta a Christian Rojas

Re: Moodle 2.0: Error leyendo la base de datos al actualizar

de Iñaki Arenaza -
Imagen de Desarrolladores Imagen de Desarrolladores de plugins Imagen de Documentadores Imagen de Moderadores Imagen de Moodlers de gran ayuda

Se puede usar MyISAM y es correcto. La recomendación es usar InnoDB porque es mucho menos propenso a tener errores de integridad por paradas inesperadas de la base de datos, etc.

Además en instalaciones de mucha concurrencia, es más eficiente ya que el bloqueo en escritura se hace para la fila (o filas) que se actualicen, en vez de para la tabla entera.

Sin embargo en instalaciones más pequeñas MyISAM puede ser algo más eficiente (a riesgo de tener de vez en cuando tablas parcialmente corruptas).

Es por eso que los desarrolladores recomiendan fuertemente a partir de la versión 2.0 usar InnoDB (no es que para versiones anteriores no lo hagan, es que 2.0 es un salto fuerte en el resto de requisitos del sistema, y aprovechan para recomendar el cambio más si cabe).

La conversión de MyISAM a InnoDB no la he hecho nunca, pero según la documentación de MySQL (http://dev.mysql.com/doc/refman/5.1/en/alter-table.html) se haría con sentencias del tipo:

ALTER TABLE nombre-de-la-tabla ENGINE = InnoDB;

Saludos. Iñaki.

En respuesta a Iñaki Arenaza

Re: Moodle 2.0: Error leyendo la base de datos al actualizar

de Enrique Robredo -

Hola Iñaki, etoy siguiendo el hilo con interés, me gustaría consultar algo:

ALTER TABLE supone modificar tabla por tabla. Tengo varios Moodles, el más importante tiene ahora mismo 404 tablas. No me manejo bien con las sentencias y no sé resolver si esto se puede hacer de forma masiva ¿No hay un ALTER DATABASE sonrisa?

Gracias

En respuesta a Enrique Robredo

Re: Moodle 2.0: Error leyendo la base de datos al actualizar

de Christian Rojas -

Hola Enrique,

Aunque alguno podrá tirarse de los pelos al ver el sistema que acabo de usar (con un par de líneas en php seguro que se hace mucho mejor) yo lo que he hecho es pasar la lista de las tablas a excel, limpiar los espacios y el resto de caracteres extraños y despues usar la fórmula CONCATENAR de la siguiente manera:

=CONCATENAR("ALTER TABLE ";aquí_va_la_celda_donde_está_el_nombre_de_la_tabla;" ENGINE=InnoDB;")

Después he copiado y pegado directamente pero por tramos, no todo de golpe sino no pilla bien todas las líneas.

Lo dicho, un sistema poco ortodoxo pero que funciona :D

Tambien hay que recordar cambiar la configuración de mysql para que use siempre InnoDB añadiendo al archivo my.cfg o my.ini en windows:

default-storage-engine=InnoDB

Un saludo

En respuesta a Enrique Robredo

Re: Moodle 2.0: Error leyendo la base de datos al actualizar

de Diego Maté Cuñado -

Hola Enrique:

Alter Database, no, pero un script para cambiar el cotejamiento de tus 404 tablas, si.

Dejo adjunto un script que hace lo que pides, cambio de cotejamiento para cada una de las tablas que componen una bd.

Espero que te sirva.

Saludos.

En respuesta a Diego Maté Cuñado

Re: Moodle 2.0: Error leyendo la base de datos al actualizar

de Enrique Robredo -

Perfeccto Diego, ha funcionado de maravilla. Cambié a esta línea

mysql_query("ALTER TABLE $value ENGINE = InnoDB");

Y se produjo el cambio.

El problema lo tuve cuando el script se pasó por mdl_log que pesaba 134 Mb y se estuvo un buen rato. Alguna tabla más de 25 ó 30 Mb había por ahí, así que pensé que el script fallaba porque tardó bastante, tampoco tanto, unos 15 ó 20 minutos todo el proceso, al parecer lleva su tiempo cambiar a InnoDB cuando pasa por alguna tabla grande. Visto esto, no quiero imaginar lo que hubiese tardado en hacerlo una por una a mano.

Muchísimas gracias.

En respuesta a Iñaki Arenaza

Re: Moodle 2.0: Error leyendo la base de datos al actualizar

de Jose García | Nosolored -
Imagen de Moodlers de gran ayuda

Buenos días.

En las últimas versiones de Moodle existe un script php para la conversión de MyISAM a InnoDB una vez se ha actualizado desde versiones 1.9.

Dentro de la Administración se localiza en: http://www.midominio.com/admin/innodb.php (sustituir el midominio.com por la ruta de vuestra instalación Moodle 2.0)

El proceso realizará el cambio por cada una de las tablas de la base de datos.

El crecimiento en tamaño en disco de la base de datos con InnoDB es muy grande, respecto de versiones MyISAM. Tenedlo en cuenta si vuestro proveedor tiene restringidos los tamaños de las bases de datos MySql en disco porque os puede dar fallos.

Consultadlo con vuestro proveedor antes de realizar este paso Un saludo.

Jose García

En respuesta a Iñaki Arenaza

Re: Moodle 2.0: Error leyendo la base de datos al actualizar

de Carlos Rodriguez -

Excelente explicación...!!

Comento que estoy utilizando la versión 2.0 y me aparecía en notificaciones el siguiente mensaje:

Las tablas de la base de datos están utilizando el motor MyISAM: se recomienda usar un motor compatible con ACID que permita transacción completa, tal como InnoDB.

Seguí sus indicaciones utilizando CPANEL para ver el detalle y se actualizó sin ningun problema.

Y desapareció el aviso..!!

Muchas Gracias.!!

Adjunto pantallas con los detalles.

Reviso que el motor InnoDB este disponible desde CPANEL

Uso el comando desde la linea del navegador (estando logueado)

Comienza la conversion

Finaliza la conversion

Me desaparecio el mensaje de alerta

Gracias !!

En respuesta a Iñaki Arenaza

Re: Moodle 2.0: Error leyendo la base de datos al actualizar

de Vicent Grau Martínez -

Iñaki, ese es exactamente el problema que intento resolver, el de la mezcla de cotejamientos:  'utf8_unicode_ci', y 'utf8_general_ci', pero aunque realizo los cambios a través de phpMyAdmin:

coteja

siempre veo tablas con los dos cotejamientos citados y el error en la actualización de Moodle 2.0 persiste.

¿Hay algón modo de unificar los cotejamientos, aunque sea manual?

 

 

En respuesta a Vicent Grau Martínez

Re: Moodle 2.0: Error leyendo la base de datos al actualizar

de Diego Maté Cuñado -

Hola a todos:

El problema está en uno de los campos de una de las tablas que componen la bs de moodle.

Si os fijais en lo que dice el mensaje de error, existe un problema de cotejamiento, suponiendo que habeis cambiado el cotejamiento de la bd y de todas las tablas que la componen, queda todavia una cosilla más que se debe cambiar...son los campos de las tablas.

Casi nada, pensareis, con la da campos que hay en las tablas...

No os preocupeis, si cambiais el cotejamiento del campo ''roleid'' de la tabla ''mdl_role_assignments'' a 'utf8_general_ci' debería funcionar.

Lo he comprobado en una instalación de prueba y he podido migrar sin porblemas de 1.9.5 a 2.0 sin mayores problemas.

Espero que os ayude mi respuesta, Saludos.

En respuesta a Diego Maté Cuñado

Re: Moodle 2.0: Error leyendo la base de datos al actualizar

de Andres Daniel Ruelas Yanez -
Que tal Diego, al querer cambiar las tablas MYISAM a InnoDB, tiene un error en el proceso, y active modo desarrollador en el Debugging para observar cual era el problema y me salta el siguiente codigo: Debug info: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'TYPE=INNODB' at line 1 ALTER TABLE mdl_aard_biztools_menu_settings TYPE=INNODB Stack trace: line 397 of /lib/dml/moodle_database.php: ddl_change_structure_exception thrown line 651 of /lib/dml/mysqli_native_moodle_database.php: call to moodle_database->query_end() line 29 of /admin/innodb.php: call to mysqli_native_moodle_database->change_database_structure() ademas me dice que tiene error en la ejecucion del DDL sql Mi problema radica al querer calificar una actividad, ya que me aparece que hay error al leer la base de datos. Espero pueda ayudarme.