Project

General

Profile

Support #8200

Error MySQL (foreign key) al actualizar de 1.9.10 a 1.10.4

Added by Jose Garcia over 3 years ago. Updated over 3 years ago.

Status:
Assigned
Priority:
High
Assignee:
Category:
Installation / Migration
Target version:
Start date:
14/04/2016
Due date:
% Done:

80%

Estimated time:
Complexity:
Normal
SCRUM pts - complexity:
?

Description

Hola.

Un usuario en un hosting Linux con Apache 2.4.12, PHP 5.5.26 y MySQL 5.6.25
Usuario sin acceso SSH (sólo FTP y Cpanel)
Su hosting no dispone de git ni composer

Utiliza un Chamilo 1.9.10.2 instalado y desea migrar a Chamilo 1.9.10.4.

Sobreescribe por FTP los ficheros y carpetas existentes con los de la 1.10 descargada de https://chamilo.org/chamilo-lms/

Inicia el asistente de migración actualizando desde la 1.9.10.2 a través de la opción main/install/index.php (actualizar desde una versión 1.9) pero no logra finalizar la actualización. Le muestra un error que indico más abajo.

Revisando las opciones en https://github.com/chamilo/chamilo-lms/tree/1.10.x de Upgrade from 1.9.x indica

If you have previously updated database rows manually, you might face issue with FOREIGN KEYS during the upgrade process. Please make sure your database is consistent before upgrading. This usually means making sure that you have to delete rows from tables referring to rows which have been deleted from the user or access_url tables. Typically:

    DELETE FROM access_url_rel_course WHERE access_url_id NOT IN (SELECT id FROM access_url);

¿puede estar relacionado con el error que se indica más abajo sobre FOREIGN KEYS? Parece apuntar a algunas tablas que no tienen los valores adecuados para realizar la migración.

¿Sin acceso SSH de que forma se podría realizar la comprobación de que tiene todas las tablas correctamente antes de la migración en lugar de

php bin/doctrine.php migrations:migrate --configuration=app/config/migrations.yml ?

ejecutando las consultas SQL existentes en app/Migrations/Schema/V110 desde PhpMyAdmin individualmente?

¿Existe algún script php para realizar la comprobación desde el propio Chamilo antes de la actualización a Chamilo 1.10.4?

NOTAS DEL PROCESO EN HOSTING:

Paso 5 de 6 – Parámetros de configuración
Los siguientes valores se grabarán en su archivo de configuración main/inc/conf/configuration.php: app/config/configuration.php

Paso 7 – Ejecución del proceso de actualización
Por favor espere. Esto podría tomar un tiempo...

ERROR: An exception occurred while executing 'ALTER TABLE c_item_property ADD CONSTRAINT FK_1D84C181330D47E9 FOREIGN KEY (to_group_id) REFERENCES c_group_info (iid)':

SQLSTATE23000: Integrity constraint violation: 1452 Cannot add or update a child row: a foreign key constraint fails (`basededatos`.`#sql-288c_4a`, CONSTRAINT `FK_1D84C181330D47E9` FOREIGN KEY (`to_group_id`) REFERENCES `c_group_info` (`iid`))

La base de datos MySQL ocupa más de 1 Gb y tiene distintos collate como latin1_spanish_ci, utf8_unicode_ci con distintos motores como InnoDb y MyISAM en bastantes tablas.

¿Es aconsejable unificar antes todas las tablas a un sólo motor como InnoDb y colatte ut8_unicode_ci o Utf8mb4 ?

No se ha copiado la configuración en el proceso a app/config/configuration.php con los valores existentes en main/inc/conf/configuration.php
tras el mensaje no se ha movido los cursos /app/courses

El error log de Apache indica

Update-db script: memory_limit set to -1, referer: http://.../main/install/index.php?running=1&installType=update&updateFromConfigFile=main%2Finc%2Fconf%2Fconfiguration.php
Update-db script: max_execution_time 0, referer: http://.../main/install/index.php?running=1&installType=update&updateFromConfigFile=main%2Finc%2Fconf%2Fconfiguration.php
Starting migration process from 1.9.10.2 (2016-04-14 08:09:19), referer: http://.../main/install/index.php?running=1&installType=update&updateFromConfigFile=main%2Finc%2Fconf%2Fconfiguration.php
Update-db script: max_execution_time 0, referer: http://.../main/install/index.php?running=1&installType=update&updateFromConfigFile=main%2Finc%2Fconf%2Fconfiguration.php
Starting migration process from 1.9.10.2 (2016-04-14 08:09:19), referer: http://.../main/install/index.php?running=1&installType=update&updateFromConfigFile=main%2Finc%2Fconf%2Fconfiguration.php
There was an error during running migrations. Check error.log, referer: http://.../main/install/index.php?running=1&installType=update&updateFromConfigFile=main%2Finc%2Fconf%2Fconfiguration.php

- RÉPLICA LOCAL
Nos ha proporcionado una copia de su sitio Chamilo para realizar unas pruebas y hemos simulado el proceso en local de Chamilo 1.9 a 1.10.4 en un entorno similar.

Ejecutando php bin/doctrine.php migrations:migrate --configuration=app/config/migrations.yml nos genera la siguiente salida:

Loading configuration from command option: app/config/migrations.yml

                    Chamilo Migrations

WARNING! You are about to execute a database migration that could result in schema changes and data lost. Are you sure you wish to continue? (y/n)y
Migrating up to 20151221150100 from 20150603151200

  ++ migrating 20150603181728

     -> ALTER TABLE course ENGINE=InnoDB
     -> ALTER TABLE c_group_info ENGINE=InnoDB
     -> ALTER TABLE session ENGINE=InnoDB
     -> ALTER TABLE user ENGINE=InnoDB
     -> ALTER TABLE c_item_property ENGINE=InnoDB
     -> ALTER TABLE c_lp ADD max_attempts INT NOT NULL, ADD subscribe_users INT NOT NULL DEFAULT 0
Migration 20150603181728 failed during Execution. Error An exception occurred while executing 'ALTER TABLE c_lp ADD max_attempts INT NOT NULL, ADD subscribe_users INT NOT NULL DEFAULT 0':

SQLSTATE[42S21]: Column already exists: 1060 Duplicate column name 'max_attempts'

  [Doctrine\DBAL\Exception\NonUniqueFieldNameException]
  An exception occurred while executing 'ALTER TABLE c_lp ADD max_attempts INT NOT NULL, ADD subscribe_users INT NOT NULL DEFAULT 0':
  SQLSTATE[42S21]: Column already exists: 1060 Duplicate column name 'max_attempts'

  [Doctrine\DBAL\Driver\PDOException]
  SQLSTATE[42S21]: Column already exists: 1060 Duplicate column name 'max_attempts'

  [PDOException]
  SQLSTATE[42S21]: Column already exists: 1060 Duplicate column name 'max_attempts'

migrations:migrate [--write-sql] [--dry-run] [--query-time] [--configuration [CONFIGURATION]] [--db-configuration [DB-CONFIGURATION]] [--] [<version>]

Gracias.

Un saludo.


Files

Version110.php (39.9 KB) Version110.php Jose Garcia, 16/05/2016 19:08

Associated revisions

Revision c44bfa0b (diff)
Added by jmontoyaa over 3 years ago

Clean c_item_property of courses that don't exist see #8200

Revision 4ae0f135 (diff)
Added by jmontoyaa over 3 years ago

Remove c_item_property if group doesn't exist see #8200

Revision f1c94b89 (diff)
Added by Angel Fernando Quiroz Campos over 3 years ago

Fix mirations for extra fields - refs #8200

Revision f2e49600 (diff)
Added by jmontoyaa over 3 years ago

WIP: Fix mysql 5.7 dates with "0000-00-00 00:00:00" values see #8200

Revision 97c0d24a (diff)
Added by Angel Fernando Quiroz Campos over 3 years ago

Fix migration using the group idd instead of group id in c_item_property - refs #8200

Revision d9b490b5 (diff)
Added by jmontoyaa over 3 years ago

Add sql_mode = '' to avoid errors in php 5.7 see #8200

Fix queries

Revision a160cf70 (diff)
Added by Jose García (Nosolored) over 3 years ago

Fix migration when ids are autoincrement - refs #8200

Revision c1114824
Added by Angel Fernando Quiroz Campos over 3 years ago

Merge pull request #1157 from nosolored/1.10.x

Fix migration when ids are autoincrement - refs #8200

Revision 2cf9c3ed (diff)
Added by Jose García (Nosolored) over 3 years ago

Fix id_coach in session table - refs #8200

Revision dceb5164 (diff)
Added by Jose García (Nosolored) over 3 years ago

Add index to accelerate query - refs #8200

Revision ce7f036f (diff)
Added by Jose García (Nosolored) over 3 years ago

Fix- Add index to accelerate query - refs #8200

Revision a8283aa9
Added by Angel Fernando Quiroz Campos over 3 years ago

Merge pull request #1198 from nosolored/t0001

Add index to accelerate query - refs #8200

Revision 2d3d7847 (diff)
Added by jmontoyaa over 3 years ago

Remove unused v111 migration, update changes from 1.11.x see #8200

History

#1

Updated by Jose Garcia over 3 years ago

Hola.

Con los últimos cambios aplicados desde https://github.com/chamilo/chamilo-lms/tree/1.10.x en la instalación local el resultado es el mismo que indicaba anteriormente.

Un saludo.

#2

Updated by Yannick Warnier over 3 years ago

  • Status changed from New to Assigned
  • Assignee set to Julio Montoya
  • Priority changed from Normal to High

También el equipo de softaculous ha reportado el problema. Personalmente, comenté la linea dentro de Migrations que generaba el problema (dos veces la misma acción) y todo funcionó bien, pero Julio es responsable de haber añadido esta línea si bien recuerdo, por lo que quisiera que verifique el mismo como corregirlo bien.

De ahí tendremos que publicar una 1.10.6 correctiva.

#3

Updated by Julio Montoya over 3 years ago

El campo "c_lp.max_attempts" no existe en chamilo 1.9.X oficialmente.
Por lo que la migración debería de funcionar correctamente.

#5

Updated by Julio Montoya over 3 years ago

  • Status changed from Assigned to Needs more info
  • Assignee changed from Julio Montoya to Yannick Warnier

Yannick Warnier wrote:

También el equipo de softaculous ha reportado el problema. Personalmente, comenté la linea dentro de Migrations que generaba el problema (dos veces la misma acción) y todo funcionó bien,

Cuál es la linea en cuestión?

#6

Updated by Jose Garcia over 3 years ago

Gracias.

Hemos simulado de nuevo el proceso de migración con el último código de Github de Chamilo 1.10.x a través de
con la base de datos Chamilo 1.9 y a través de main/install/

se inicia el proceso pero en la opción final main/install/index.php?running=1&installType=update&updateFromConfigFile=main%2Finc%2Fconf%2Fconfiguration.php muestra lo siguiente

Detalles

ERROR: An exception occurred while executing 'ALTER TABLE c_item_property ADD CONSTRAINT FK_1D84C181330D47E9 FOREIGN KEY (to_group_id) REFERENCES c_group_info (iid)':

SQLSTATE[23000]: Integrity constraint violation: 1452 Cannot add or update a child row: a foreign key constraint fails (`basededatos`.`#sql-12b0_15`, CONSTRAINT `FK_1D84C181330D47E9` FOREIGN KEY (`to_group_id`) REFERENCES `c_group_info` (`iid`))

y no permite entrar en el aula. Seguimos realizando pruebas.

El resultado de ejecutar lo que se indica en

To update your database to the latest version, go to your Chamilo root folder and type
php bin/doctrine.php migrations:migrate --configuration=app/config/migrations.yml

es el siguiente

Loading configuration from command option: app/config/migrations.yml

                    Chamilo Migrations

WARNING! You are about to execute a database migration that could result in schema changes and data lost. Are you sure you wish to continue? (y/n)Y
Migrating up to 20151221150100 from 20150603151200

  ++ migrating 20150603181728

     -> ALTER TABLE course ENGINE=InnoDB
     -> ALTER TABLE c_group_info ENGINE=InnoDB
     -> ALTER TABLE session ENGINE=InnoDB
     -> ALTER TABLE user ENGINE=InnoDB
     -> ALTER TABLE c_item_property ENGINE=InnoDB
     ->
            ALTER TABLE c_item_property
            MODIFY c_id INT DEFAULT NULL,
            MODIFY lastedit_user_id INT NOT NULL,
            MODIFY to_group_id INT NULL,
            MODIFY insert_user_id INT DEFAULT NULL,
            MODIFY start_visible DATETIME DEFAULT NULL,
            MODIFY end_visible DATETIME DEFAULT NULL,
            MODIFY session_id INT DEFAULT NULL,
            MODIFY to_user_id INT NULL

     -> UPDATE c_item_property SET session_id = NULL WHERE session_id = 0
     -> UPDATE c_item_property SET to_group_id = NULL WHERE to_group_id = 0
     -> UPDATE c_item_property SET to_user_id = NULL WHERE to_user_id = 0
     -> UPDATE c_item_property SET start_visible = NULL WHERE start_visible = '0000-00-00 00:00:00'
     -> UPDATE c_item_property SET end_visible = NULL WHERE end_visible = '0000-00-00 00:00:00'
     ->
            UPDATE c_item_property SET to_user_id = NULL WHERE to_user_id NOT IN (
                SELECT id FROM user
            )

     ->
            UPDATE c_item_property SET insert_user_id = NULL WHERE insert_user_id NOT IN (
                SELECT id FROM user
            )

     ->
            UPDATE c_item_property SET session_id = NULL WHERE session_id NOT IN (
                SELECT id FROM session
            )

     -> DELETE FROM c_item_property WHERE c_id = 0
     -> DELETE FROM course_rel_user WHERE user_id = 0
     -> ALTER TABLE c_item_property ADD CONSTRAINT FK_1D84C18191D79BD3 FOREIGN KEY (c_id) REFERENCES course (id)
Migration 20150603181728 failed during Execution. Error An exception occurred while executing 'ALTER TABLE c_item_property ADD CONSTRAINT FK_1D84C18191D79BD3 FOREIGN KEY (c_id) REFERENCES course (id)':

SQLSTATE[23000]: Integrity constraint violation: 1022 Can't write; duplicate key in table '#sql-12b0_1'

  [Doctrine\DBAL\Exception\DriverException]
  An exception occurred while executing 'ALTER TABLE c_item_property ADD CONSTRAINT FK_1D84C18191D79BD3 FOREIGN KEY (c_id) REFERENCES course (id)':
  SQLSTATE[23000]: Integrity constraint violation: 1022 Can't write; duplicate key in table '#sql-12b0_1'

  [Doctrine\DBAL\Driver\PDOException]
  SQLSTATE[23000]: Integrity constraint violation: 1022 Can't write; duplicate key in table '#sql-12b0_1'

  [PDOException]
  SQLSTATE[23000]: Integrity constraint violation: 1022 Can't write; duplicate key in table '#sql-12b0_1'

migrations:migrate [--write-sql] [--dry-run] [--query-time] [--configuration [CONFIGURATION]] [--db-configuration [DB-CONFIGURATION]] [--] [<version>]

Un saludo.

#7

Updated by Julio Montoya over 3 years ago

  • Status changed from Needs more info to Needs testing
  • Assignee deleted (Yannick Warnier)

Acabo de agrear una correción:

https://github.com/chamilo/chamilo-lms/commit/c44bfa0b5c73cb4fa8a891ccfb066ed9e6dae341

Para este error:

ALTER TABLE c_item_property ADD CONSTRAINT FK_1D84C18191D79BD3 FOREIGN KEY (c_id) REFERENCES course (id)
#8

Updated by Jose Garcia over 3 years ago

Hola.

Segumos realizando pruebas.

Hemos aplicado la corrección del github de https://github.com/chamilo/chamilo-lms/tree/1.10.x

Con main/install/index.php?running=1&installType=update&updateFromConfigFile=main%2Finc%2Fconf%2Fconfiguration.php

muestra

ERROR: An exception occurred while executing 'ALTER TABLE c_item_property ADD CONSTRAINT FK_1D84C181330D47E9 FOREIGN KEY (to_group_id) REFERENCES c_group_info (iid)':

SQLSTATE[23000]: Integrity constraint violation: 1452 Cannot add or update a child row: a foreign key constraint fails (`basededatos`.`#sql-12b0_49`, CONSTRAINT `FK_1D84C181330D47E9` FOREIGN KEY (`to_group_id`) REFERENCES `c_group_info` (`iid`))

y con

php bin/doctrine.php migrations:migrate --configuration=app/config/migrations.yml

Loading configuration from command option: app/config/migrations.yml

                    Chamilo Migrations

WARNING! You are about to execute a database migration that could result in schema changes and data lost. Are you sure you wish to continue? (y/n)y
Migrating up to 20151221150100 from 20150603151200

  ++ migrating 20150603181728

     -> ALTER TABLE course ENGINE=InnoDB
     -> ALTER TABLE c_group_info ENGINE=InnoDB
     -> ALTER TABLE session ENGINE=InnoDB
     -> ALTER TABLE user ENGINE=InnoDB
     -> ALTER TABLE c_item_property ENGINE=InnoDB
     ->
            ALTER TABLE c_item_property
            MODIFY c_id INT DEFAULT NULL,
            MODIFY lastedit_user_id INT NOT NULL,
            MODIFY to_group_id INT NULL,
            MODIFY insert_user_id INT DEFAULT NULL,
            MODIFY start_visible DATETIME DEFAULT NULL,
            MODIFY end_visible DATETIME DEFAULT NULL,
            MODIFY session_id INT DEFAULT NULL,
            MODIFY to_user_id INT NULL

     -> UPDATE c_item_property SET session_id = NULL WHERE session_id = 0
     -> UPDATE c_item_property SET to_group_id = NULL WHERE to_group_id = 0
     -> UPDATE c_item_property SET to_user_id = NULL WHERE to_user_id = 0
     -> UPDATE c_item_property SET start_visible = NULL WHERE start_visible = '0000-00-00 00:00:00'
     -> UPDATE c_item_property SET end_visible = NULL WHERE end_visible = '0000-00-00 00:00:00'
     ->
            UPDATE c_item_property SET to_user_id = NULL WHERE to_user_id NOT IN (
                SELECT id FROM user
            )

     ->
            UPDATE c_item_property SET insert_user_id = NULL WHERE insert_user_id NOT IN (
                SELECT id FROM user
            )

     ->
            UPDATE c_item_property SET session_id = NULL WHERE session_id NOT IN (
                SELECT id FROM session
            )

     -> DELETE FROM c_item_property WHERE c_id = 0
     -> DELETE FROM course_rel_user WHERE user_id = 0
     -> DELETE FROM c_item_property WHERE c_id NOT IN (SELECT id FROM course)
     -> ALTER TABLE c_item_property ADD CONSTRAINT FK_1D84C18191D79BD3 FOREIGN KEY (c_id) REFERENCES course(id)
Migration 20150603181728 failed during Execution. Error An exception occurred while executing 'ALTER TABLE c_item_property ADD CONSTRAINT FK_1D84C18191D79BD3 FOREIGN KEY (c_id) REFERENCES course(id)':

SQLSTATE[23000]: Integrity constraint violation: 1022 Can't write; duplicate key in table '#sql-12b0_4b'

  [Doctrine\DBAL\Exception\DriverException]
  An exception occurred while executing 'ALTER TABLE c_item_property ADD CONSTRAINT FK_1D84C18191D79BD3 FOREIGN KEY (c_id) REFERENCES course(id)':
  SQLSTATE[23000]: Integrity constraint violation: 1022 Can't write; duplicate key in table '#sql-12b0_4b'

  [Doctrine\DBAL\Driver\PDOException]
  SQLSTATE[23000]: Integrity constraint violation: 1022 Can't write; duplicate key in table '#sql-12b0_4b'

  [PDOException]
  SQLSTATE[23000]: Integrity constraint violation: 1022 Can't write; duplicate key in table '#sql-12b0_4b'

migrations:migrate [--write-sql] [--dry-run] [--query-time] [--configuration [CONFIGURATION]] [--db-configuration [DB-CONFIGURATION]] [--] [<version>]

Un saludo.

#9

Updated by Jose Garcia over 3 years ago

Hola.

Hemos convertido la base de datos de una mezcla de collate con latin1_spanish_ci y utf8_unicode_ci a sólo utf8_unicode_ci para unificar la codificación de todos los datos.

Posteriormente hemos iniciado la conversión de la base de datos de MySQL del motor MyISAM a InnoDB. El resultado es el que indicamos más abajo.

Lo hemos realizado así ya que al ejecutar php bin/doctrine.php migrations:migrate --configuration=app/config/migrations.yml mostraban la salida varios ALTER TABLE con ENGINE=INNODB

Alguna de las tablas no se han convertido a InnoDB y permanecen con MyISAM.

Por si os sirviera de ayuda.

ALTER TABLE access_url ENGINE=INNODB
ALTER TABLE access_url_rel_course ENGINE=INNODB
ALTER TABLE access_url_rel_session ENGINE=INNODB
ALTER TABLE access_url_rel_user ENGINE=INNODB
ALTER TABLE admin ENGINE=INNODB
ALTER TABLE announcement_rel_group ENGINE=INNODB
ALTER TABLE block ENGINE=INNODB
ALTER TABLE c_announcement ENGINE=INNODB
Incorrect table definition; there can be only one auto column and it must be defined as a keyALTER TABLE c_announcement_attachment ENGINE=INNODB
Incorrect table definition; there can be only one auto column and it must be defined as a keyALTER TABLE c_attendance ENGINE=INNODB
Incorrect table definition; there can be only one auto column and it must be defined as a keyALTER TABLE c_attendance_calendar ENGINE=INNODB
Incorrect table definition; there can be only one auto column and it must be defined as a keyALTER TABLE c_attendance_result ENGINE=INNODB
Incorrect table definition; there can be only one auto column and it must be defined as a keyALTER TABLE c_attendance_sheet ENGINE=INNODB
ALTER TABLE c_attendance_sheet_log ENGINE=INNODB
Incorrect table definition; there can be only one auto column and it must be defined as a keyALTER TABLE c_blog ENGINE=INNODB
Incorrect table definition; there can be only one auto column and it must be defined as a keyALTER TABLE c_blog_attachment ENGINE=INNODB
Incorrect table definition; there can be only one auto column and it must be defined as a keyALTER TABLE c_blog_comment ENGINE=INNODB
Incorrect table definition; there can be only one auto column and it must be defined as a keyALTER TABLE c_blog_post ENGINE=INNODB
Incorrect table definition; there can be only one auto column and it must be defined as a keyALTER TABLE c_blog_rating ENGINE=INNODB
Incorrect table definition; there can be only one auto column and it must be defined as a keyALTER TABLE c_blog_rel_user ENGINE=INNODB
ALTER TABLE c_blog_task ENGINE=INNODB
Incorrect table definition; there can be only one auto column and it must be defined as a keyALTER TABLE c_blog_task_rel_user ENGINE=INNODB
ALTER TABLE c_calendar_event ENGINE=INNODB
Incorrect table definition; there can be only one auto column and it must be defined as a keyALTER TABLE c_calendar_event_attachment ENGINE=INNODB
Incorrect table definition; there can be only one auto column and it must be defined as a keyALTER TABLE c_calendar_event_repeat ENGINE=INNODB
ALTER TABLE c_calendar_event_repeat_not ENGINE=INNODB
ALTER TABLE c_chat_connected ENGINE=INNODB
Incorrect table definition; there can be only one auto column and it must be defined as a keyALTER TABLE c_course_description ENGINE=INNODB
Incorrect table definition; there can be only one auto column and it must be defined as a keyALTER TABLE c_course_setting ENGINE=INNODB
Incorrect table definition; there can be only one auto column and it must be defined as a keyALTER TABLE c_document ENGINE=INNODB
Incorrect table definition; there can be only one auto column and it must be defined as a keyALTER TABLE c_dropbox_category ENGINE=INNODB
Incorrect table definition; there can be only one auto column and it must be defined as a keyALTER TABLE c_dropbox_feedback ENGINE=INNODB
Incorrect table definition; there can be only one auto column and it must be defined as a keyALTER TABLE c_dropbox_file ENGINE=INNODB
Incorrect table definition; there can be only one auto column and it must be defined as a keyALTER TABLE c_dropbox_person ENGINE=INNODB
ALTER TABLE c_dropbox_post ENGINE=INNODB
ALTER TABLE c_forum_attachment ENGINE=INNODB
Incorrect table definition; there can be only one auto column and it must be defined as a keyALTER TABLE c_forum_category ENGINE=INNODB
Incorrect table definition; there can be only one auto column and it must be defined as a keyALTER TABLE c_forum_forum ENGINE=INNODB
Incorrect table definition; there can be only one auto column and it must be defined as a keyALTER TABLE c_forum_mailcue ENGINE=INNODB
ALTER TABLE c_forum_notification ENGINE=INNODB
ALTER TABLE c_forum_post ENGINE=INNODB
Incorrect table definition; there can be only one auto column and it must be defined as a keyALTER TABLE c_forum_thread ENGINE=INNODB
Incorrect table definition; there can be only one auto column and it must be defined as a keyALTER TABLE c_forum_thread_qualify ENGINE=INNODB
Incorrect table definition; there can be only one auto column and it must be defined as a keyALTER TABLE c_forum_thread_qualify_log ENGINE=INNODB
Incorrect table definition; there can be only one auto column and it must be defined as a keyALTER TABLE c_glossary ENGINE=INNODB
Incorrect table definition; there can be only one auto column and it must be defined as a keyALTER TABLE c_group_category ENGINE=INNODB
Incorrect table definition; there can be only one auto column and it must be defined as a keyALTER TABLE c_group_info ENGINE=INNODB
Incorrect table definition; there can be only one auto column and it must be defined as a keyALTER TABLE c_group_rel_tutor ENGINE=INNODB
Incorrect table definition; there can be only one auto column and it must be defined as a keyALTER TABLE c_group_rel_user ENGINE=INNODB
Incorrect table definition; there can be only one auto column and it must be defined as a keyALTER TABLE c_item_property ENGINE=INNODB
Incorrect table definition; there can be only one auto column and it must be defined as a keyALTER TABLE c_link ENGINE=INNODB
Incorrect table definition; there can be only one auto column and it must be defined as a keyALTER TABLE c_link_category ENGINE=INNODB
Incorrect table definition; there can be only one auto column and it must be defined as a keyALTER TABLE c_lp ENGINE=INNODB
Incorrect table definition; there can be only one auto column and it must be defined as a keyALTER TABLE c_lp_item ENGINE=INNODB
Incorrect table definition; there can be only one auto column and it must be defined as a keyALTER TABLE c_lp_item_view ENGINE=INNODB
Incorrect table definition; there can be only one auto column and it must be defined as a keyALTER TABLE c_lp_iv_interaction ENGINE=INNODB
Incorrect table definition; there can be only one auto column and it must be defined as a keyALTER TABLE c_lp_iv_objective ENGINE=INNODB
Incorrect table definition; there can be only one auto column and it must be defined as a keyALTER TABLE c_lp_view ENGINE=INNODB
Incorrect table definition; there can be only one auto column and it must be defined as a keyALTER TABLE c_metadata ENGINE=INNODB
ALTER TABLE c_notebook ENGINE=INNODB
Incorrect table definition; there can be only one auto column and it must be defined as a keyALTER TABLE c_online_connected ENGINE=INNODB
ALTER TABLE c_online_link ENGINE=INNODB
Incorrect table definition; there can be only one auto column and it must be defined as a keyALTER TABLE c_permission_group ENGINE=INNODB
Incorrect table definition; there can be only one auto column and it must be defined as a keyALTER TABLE c_permission_task ENGINE=INNODB
Incorrect table definition; there can be only one auto column and it must be defined as a keyALTER TABLE c_permission_user ENGINE=INNODB
Incorrect table definition; there can be only one auto column and it must be defined as a keyALTER TABLE c_quiz ENGINE=INNODB
Incorrect table definition; there can be only one auto column and it must be defined as a keyALTER TABLE c_quiz_answer ENGINE=INNODB
Incorrect table definition; there can be only one auto column and it must be defined as a keyALTER TABLE c_quiz_question ENGINE=INNODB
Incorrect table definition; there can be only one auto column and it must be defined as a keyALTER TABLE c_quiz_question_category ENGINE=INNODB
Incorrect table definition; there can be only one auto column and it must be defined as a keyALTER TABLE c_quiz_question_option ENGINE=INNODB
Incorrect table definition; there can be only one auto column and it must be defined as a keyALTER TABLE c_quiz_question_rel_category ENGINE=INNODB
ALTER TABLE c_quiz_rel_question ENGINE=INNODB
ALTER TABLE c_resource ENGINE=INNODB
Incorrect table definition; there can be only one auto column and it must be defined as a keyALTER TABLE c_role ENGINE=INNODB
Incorrect table definition; there can be only one auto column and it must be defined as a keyALTER TABLE c_role_group ENGINE=INNODB
ALTER TABLE c_role_permissions ENGINE=INNODB
ALTER TABLE c_role_user ENGINE=INNODB
ALTER TABLE c_student_publication ENGINE=INNODB
Incorrect table definition; there can be only one auto column and it must be defined as a keyALTER TABLE c_student_publication_assignment ENGINE=INNODB
Incorrect table definition; there can be only one auto column and it must be defined as a keyALTER TABLE c_survey ENGINE=INNODB
Incorrect table definition; there can be only one auto column and it must be defined as a keyALTER TABLE c_survey_answer ENGINE=INNODB
Incorrect table definition; there can be only one auto column and it must be defined as a keyALTER TABLE c_survey_group ENGINE=INNODB
Incorrect table definition; there can be only one auto column and it must be defined as a keyALTER TABLE c_survey_invitation ENGINE=INNODB
Incorrect table definition; there can be only one auto column and it must be defined as a keyALTER TABLE c_survey_question ENGINE=INNODB
Incorrect table definition; there can be only one auto column and it must be defined as a keyALTER TABLE c_survey_question_option ENGINE=INNODB
Incorrect table definition; there can be only one auto column and it must be defined as a keyALTER TABLE c_thematic ENGINE=INNODB
Incorrect table definition; there can be only one auto column and it must be defined as a keyALTER TABLE c_thematic_advance ENGINE=INNODB
Incorrect table definition; there can be only one auto column and it must be defined as a keyALTER TABLE c_thematic_plan ENGINE=INNODB
Incorrect table definition; there can be only one auto column and it must be defined as a keyALTER TABLE c_tool ENGINE=INNODB
Incorrect table definition; there can be only one auto column and it must be defined as a keyALTER TABLE c_tool_intro ENGINE=INNODB
ALTER TABLE c_userinfo_content ENGINE=INNODB
Incorrect table definition; there can be only one auto column and it must be defined as a keyALTER TABLE c_userinfo_def ENGINE=INNODB
Incorrect table definition; there can be only one auto column and it must be defined as a keyALTER TABLE c_wiki ENGINE=INNODB
Incorrect table definition; there can be only one auto column and it must be defined as a keyALTER TABLE c_wiki_conf ENGINE=INNODB
ALTER TABLE c_wiki_discuss ENGINE=INNODB
Incorrect table definition; there can be only one auto column and it must be defined as a keyALTER TABLE c_wiki_mailcue ENGINE=INNODB
ALTER TABLE career ENGINE=INNODB
ALTER TABLE chat ENGINE=INNODB
ALTER TABLE class ENGINE=INNODB
ALTER TABLE class_user ENGINE=INNODB
ALTER TABLE course ENGINE=INNODB
ALTER TABLE course_category ENGINE=INNODB
ALTER TABLE course_field ENGINE=INNODB
ALTER TABLE course_field_values ENGINE=INNODB
ALTER TABLE course_module ENGINE=INNODB
ALTER TABLE course_rel_class ENGINE=INNODB
ALTER TABLE course_rel_user ENGINE=INNODB
ALTER TABLE course_request ENGINE=INNODB
ALTER TABLE course_type ENGINE=INNODB
ALTER TABLE event_email_template ENGINE=INNODB
ALTER TABLE event_sent ENGINE=INNODB
ALTER TABLE grade_components ENGINE=INNODB
ALTER TABLE grade_model ENGINE=INNODB
ALTER TABLE gradebook_category ENGINE=INNODB
ALTER TABLE gradebook_certificate ENGINE=INNODB
ALTER TABLE gradebook_evaluation ENGINE=INNODB
ALTER TABLE gradebook_link ENGINE=INNODB
ALTER TABLE gradebook_linkeval_log ENGINE=INNODB
ALTER TABLE gradebook_result ENGINE=INNODB
ALTER TABLE gradebook_result_log ENGINE=INNODB
ALTER TABLE gradebook_score_display ENGINE=INNODB
ALTER TABLE group_rel_group ENGINE=INNODB
ALTER TABLE group_rel_tag ENGINE=INNODB
ALTER TABLE group_rel_user ENGINE=INNODB
ALTER TABLE groups ENGINE=INNODB
ALTER TABLE language ENGINE=INNODB
ALTER TABLE legal ENGINE=INNODB
ALTER TABLE message ENGINE=INNODB
ALTER TABLE message_attachment ENGINE=INNODB
ALTER TABLE notification ENGINE=INNODB
ALTER TABLE openid_association ENGINE=INNODB
ALTER TABLE personal_agenda ENGINE=INNODB
ALTER TABLE personal_agenda_repeat ENGINE=INNODB
ALTER TABLE personal_agenda_repeat_not ENGINE=INNODB
ALTER TABLE php_session ENGINE=INNODB
ALTER TABLE promotion ENGINE=INNODB
ALTER TABLE reservation_category ENGINE=INNODB
ALTER TABLE reservation_category_rights ENGINE=INNODB
ALTER TABLE reservation_item ENGINE=INNODB
ALTER TABLE reservation_item_rights ENGINE=INNODB
ALTER TABLE reservation_main ENGINE=INNODB
ALTER TABLE reservation_subscription ENGINE=INNODB
ALTER TABLE search_engine_ref ENGINE=INNODB
ALTER TABLE session ENGINE=INNODB
ALTER TABLE session_category ENGINE=INNODB
ALTER TABLE session_field ENGINE=INNODB
ALTER TABLE session_field_values ENGINE=INNODB
ALTER TABLE session_rel_course ENGINE=INNODB
ALTER TABLE session_rel_course_rel_user ENGINE=INNODB
ALTER TABLE session_rel_user ENGINE=INNODB
ALTER TABLE settings_current ENGINE=INNODB
ALTER TABLE settings_options ENGINE=INNODB
ALTER TABLE shared_survey ENGINE=INNODB
ALTER TABLE shared_survey_question ENGINE=INNODB
ALTER TABLE shared_survey_question_option ENGINE=INNODB
ALTER TABLE skill ENGINE=INNODB
ALTER TABLE skill_profile ENGINE=INNODB
ALTER TABLE skill_rel_gradebook ENGINE=INNODB
ALTER TABLE skill_rel_profile ENGINE=INNODB
ALTER TABLE skill_rel_skill ENGINE=INNODB
ALTER TABLE skill_rel_user ENGINE=INNODB
ALTER TABLE specific_field ENGINE=INNODB
ALTER TABLE specific_field_values ENGINE=INNODB
ALTER TABLE sys_announcement ENGINE=INNODB
ALTER TABLE sys_calendar ENGINE=INNODB
ALTER TABLE system_template ENGINE=INNODB
ALTER TABLE tag ENGINE=INNODB
ALTER TABLE templates ENGINE=INNODB
ALTER TABLE track_c_browsers ENGINE=INNODB
ALTER TABLE track_c_countries ENGINE=INNODB
ALTER TABLE track_c_os ENGINE=INNODB
ALTER TABLE track_c_providers ENGINE=INNODB
ALTER TABLE track_c_referers ENGINE=INNODB
ALTER TABLE track_course_ranking ENGINE=INNODB
ALTER TABLE track_e_access ENGINE=INNODB
ALTER TABLE track_e_attempt ENGINE=INNODB
ALTER TABLE track_e_attempt_coeff ENGINE=INNODB
ALTER TABLE track_e_attempt_recording ENGINE=INNODB
ALTER TABLE track_e_course_access ENGINE=INNODB
ALTER TABLE track_e_default ENGINE=INNODB
ALTER TABLE track_e_downloads ENGINE=INNODB
ALTER TABLE track_e_exercices ENGINE=INNODB
ALTER TABLE track_e_hotpotatoes ENGINE=INNODB
ALTER TABLE track_e_hotspot ENGINE=INNODB
ALTER TABLE track_e_item_property ENGINE=INNODB
ALTER TABLE track_e_lastaccess ENGINE=INNODB
ALTER TABLE track_e_links ENGINE=INNODB
ALTER TABLE track_e_login ENGINE=INNODB
ALTER TABLE track_e_online ENGINE=INNODB
ALTER TABLE track_e_open ENGINE=INNODB
ALTER TABLE track_e_uploads ENGINE=INNODB
ALTER TABLE track_stored_values ENGINE=INNODB
ALTER TABLE track_stored_values_stack ENGINE=INNODB
ALTER TABLE user ENGINE=INNODB
ALTER TABLE user_api_key ENGINE=INNODB
ALTER TABLE user_course_category ENGINE=INNODB
ALTER TABLE user_field ENGINE=INNODB
ALTER TABLE user_field_options ENGINE=INNODB
ALTER TABLE user_field_values ENGINE=INNODB
ALTER TABLE user_friend_relation_type ENGINE=INNODB
ALTER TABLE user_rel_course_vote ENGINE=INNODB
ALTER TABLE user_rel_event_type ENGINE=INNODB
ALTER TABLE user_rel_tag ENGINE=INNODB
ALTER TABLE user_rel_user ENGINE=INNODB
ALTER TABLE usergroup ENGINE=INNODB
ALTER TABLE usergroup_rel_course ENGINE=INNODB
ALTER TABLE usergroup_rel_question ENGINE=INNODB
ALTER TABLE usergroup_rel_session ENGINE=INNODB
ALTER TABLE usergroup_rel_user ENGINE=INNODB

Un saludo.

#10

Updated by Jose Garcia over 3 years ago

Hola.

Seguimos realizando pruebas con el último código de Chamilo https://github.com/chamilo/chamilo-lms/tree/1.10.x

Hemos creado una instalación Chamilo 1.9.10.2 de nuevo y copiando los archivos

Realizado previamente lo indicado en

You can also print the differences between your database and what it should be by issuing the following command from the Chamilo base folder:

php bin/doctrine.php orm:schema:update --dump-sql

y también

PHP Fatal error: Class 'Doctrine/DBAL/Migrations/Tools/Console/Command/DiffCommand' not found in /bin/doctrine.php on line 46

y en otra ocasión

 [Doctrine\DBAL\DBALException]
  Unknown database type enum requested, Doctrine\DBAL\Platforms\MySqlPlatform may not support it.

orm:schema-tool:update [--complete] [--dump-sql] [--force]

Si realizamos la actualización con

php bin/doctrine.php migrations:migrate --configuration=app/config/migrations.yml

nos muestra

Loading configuration from command option: app/config/migrations.yml

                    Chamilo Migrations

WARNING! You are about to execute a database migration that could result in schema changes and data lost. Are you sure you wish to continue? (y/n)y
Migrating up to 20151221150100 from 0
Migration 110 failed during Pre-Checks. Error Unknown database type enum requested, Doctrine\DBAL\Platforms\MySqlPlatform may not support it.

  [Doctrine\DBAL\DBALException]
  Unknown database type enum requested, Doctrine\DBAL\Platforms\MySqlPlatform may not support it.

migrations:migrate [--write-sql] [--dry-run] [--query-time] [--configuration [CONFIGURATION]] [--db-configuration [DB-CONFIGURATION]] [--] [<version>]

y también

PHP Fatal error: Class 'Doctrine/DBAL/Migrations/Tools/Console/Command/DiffCommand' not found in /bin/doctrine.php on line 46

Seguimos.

Unas pruebas las realizamos con la versión 1.10.4 descargada de https://github.com/chamilo/chamilo-lms/archive/v1.10.4.zip y otras con la última de Github.

Un saludo.

#11

Updated by Yannick Warnier over 3 years ago

Hola José, de lo que yo sepa doctrine no funciona en 1.9.10, porque no estaba implementado para nada. Solo a partir de la versión 1.10 (si actualizas a esta versión, puedes ver las diferencias de cosas que no se actualizaron en versiones anteriores, pero solo si estás en 1.10 o superior).

#12

Updated by Julio Montoya over 3 years ago

Recomiendo ejecutar el upgrade usando solamente el entorno web de chamilo, y reportar si existen errores de mysql.

No recomiendo usar el uso de doctrine de esta manera. El comando de doctrine lo usamos solamente en modo de desarrollo.

#13

Updated by Jose Garcia over 3 years ago

Gracias a ambos por las explicaciones ;-)

Realizando la actualización de 1.9 a 1.10 vía Web (.../main/install) el error que nos indica en detalles lo comentaba en #8

ERROR: An exception occurred while executing 'ALTER TABLE c_item_property ADD CONSTRAINT FK_1D84C181330D47E9 FOREIGN KEY (to_group_id) REFERENCES c_group_info (iid)':

SQLSTATE[23000]: Integrity constraint violation: 1452 Cannot add or update a child row: a foreign key constraint fails (`basededatos`.`#sql-12b0_49`, CONSTRAINT `FK_1D84C181330D47E9` FOREIGN KEY (`to_group_id`) REFERENCES `c_group_info` (`iid`))

Un saludo.

#14

Updated by Jose Garcia over 3 years ago

Jose Garcia wrote:

Gracias a ambos por las explicaciones ;-)

Realizando la actualización de 1.9 a 1.10 vía Web (.../main/install) el error que nos indica en detalles lo comentaba en en el punto 8.

[...]

Un saludo.

#15

Updated by Julio Montoya over 3 years ago

Jose Garcia wrote:

Gracias a ambos por las explicaciones ;-)

Realizando la actualización de 1.9 a 1.10 vía Web (.../main/install) el error que nos indica en detalles lo comentaba en #8

[...]

Un saludo.

Acabo de agregar una correción:

https://github.com/chamilo/chamilo-lms/commit/4ae0f135e3575bd1405108cb42c45df5ef0808d6

#16

Updated by Jose Garcia over 3 years ago

Gracias.
Seguimos revisando.

Por añadir info adicional. Se está revisando bajo PHP 7.0.6 y MySQL 5.7.12 (por ayudar en la compatibilidad con esta versión).

Al mismo tiempo también lo estamos revisando con PHP 5.5.26 y MySQL 5.6.25.

Insertando un fichero .sql de Chamilo 1.9.10.2 para realizar migración a 1.10.4 nos muestra un error si se tiene configurado MySQL 5.7 en modo estricto ya que no permite la inserción de fechas como 0000-00-00 00:00:00 mostrando el mensaje

ERROR 1067 (42000) at line 7: Invalid default value for 'tms'

esa línea se encuentra en la creación del campo tms en la tabla acces_url

CREATE TABLE `access_url` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`url` varchar(255) COLLATE latin1_spanish_ci NOT NULL,
`description` text COLLATE latin1_spanish_ci,
`active` int(10) unsigned NOT NULL DEFAULT '0',
`created_by` int(11) NOT NULL,
`tms` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',

también se encuentra en las tablas

course_field
course_field_values
session_field
session_field_values
track_e_attempt
user_field
user_field_options
user_field_values

Info adicional:
----------------
https://dev.mysql.com/doc/refman/5.6/en/date-and-time-types.html
http://stackoverflow.com/questions/25349126/how-can-i-set-the-default-value-of-a-field-as-0000-00-00-000000 (How can I set the default value of a field as '0000-00-00 00:00:00'?)
http://dev.mysql.com/doc/refman/5.7/en/sql-mode.html#sql-mode-strict (Strict SQL Mode)

Esto también le ocurre con la misma versión de MySQL 5.7 al instalar WordPress ya que también tiene ese formato de fecha en tablas.

Un saludo.

#17

Updated by Yannick Warnier over 3 years ago

  • Target version changed from 1.11.0 to 1.10.6
#18

Updated by Angel Quiroz over 3 years ago

He corregido un problema con extra_fields en las migraciones
https://github.com/chamilo/chamilo-lms/commit/f1c94b89ed228cdab048a60cd7bbfe751b4ae1ff

#19

Updated by Yannick Warnier over 3 years ago

  • Assignee set to Angel Quiroz

I believe José from Nosolored reported an issue with foreign keys with groups... We should check that before closing this task.

#20

Updated by Julio Montoya over 3 years ago

Jose Garcia wrote:

Gracias.
Seguimos revisando.

Por añadir info adicional. Se está revisando bajo PHP 7.0.6 y MySQL 5.7.12 (por ayudar en la compatibilidad con esta versión).

Al mismo tiempo también lo estamos revisando con PHP 5.5.26 y MySQL 5.6.25.

Insertando un fichero .sql de Chamilo 1.9.10.2 para realizar migración a 1.10.4 nos muestra un error si se tiene configurado MySQL 5.7 en modo estricto ya que no permite la inserción de fechas como 0000-00-00 00:00:00 mostrando el mensaje

ERROR 1067 (42000) at line 7: Invalid default value for 'tms'

esa línea se encuentra en la creación del campo tms en la tabla acces_url

CREATE TABLE `access_url` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`url` varchar(255) COLLATE latin1_spanish_ci NOT NULL,
`description` text COLLATE latin1_spanish_ci,
`active` int(10) unsigned NOT NULL DEFAULT '0',
`created_by` int(11) NOT NULL,
`tms` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',

también se encuentra en las tablas

course_field
course_field_values
session_field
session_field_values
track_e_attempt
user_field
user_field_options
user_field_values

Info adicional:
----------------
https://dev.mysql.com/doc/refman/5.6/en/date-and-time-types.html
http://stackoverflow.com/questions/25349126/how-can-i-set-the-default-value-of-a-field-as-0000-00-00-000000 (How can I set the default value of a field as '0000-00-00 00:00:00'?)
http://dev.mysql.com/doc/refman/5.7/en/sql-mode.html#sql-mode-strict (Strict SQL Mode)

Esto también le ocurre con la misma versión de MySQL 5.7 al instalar WordPress ya que también tiene ese formato de fecha en tablas.

Un saludo.

Estos cambios serán corregidos en 1.11 pues se requiere cambios en la base de datos:

https://github.com/chamilo/chamilo-lms/commit/f2e496009e177ee77a9b5426733a17482c89b42f

#21

Updated by Jose Garcia over 3 years ago

Hola.

Con el último cambio del github de hoy https://github.com/chamilo/chamilo-lms/tree/1.10.x en entorno PHP 7.0.6 y MySQL 5.7.12

he simulado la migración de 1.9.10.2 a 1.10 pero indica ahora

ERROR: An exception occurred while executing 'ALTER TABLE user MODIFY COLUMN user_id int unsigned DEFAULT null':

SQLSTATE[42000]: Syntax error or access violation: 1171 All parts of a PRIMARY KEY must be NOT NULL; if you need NULL in a key, use UNIQUE instead

El error_log de Apache indica:

[Mon May 02 16:20:53 2016] [error] Update-db script: memory_limit set to -1, referer: http://xxx.testchamilo.xx/main/install/index.php?running=1&installType=update&updateFromConfigFile=main%2Finc%2Fconf%2Fconfiguration.php

[Mon May 02 16:20:53 2016] [error] Update-db script: max_execution_time 0, referer: http://xxx.testchamilo.xx/main/install/index.php?running=1&installType=update&updateFromConfigFile=main%2Finc%2Fconf%2Fconfiguration.php

[Mon May 02 16:20:53 2016] [error] Starting migration process from 1.9.10.2 (2016-05-02 16:20:53), referer: http://xxx.testchamilo.xx/main/install/index.php?running=1&installType=update&updateFromConfigFile=main%2Finc%2Fconf%2Fconfiguration.php

[Mon May 02 16:21:10 2016] [error] There was an error during running migrations. Check error.log, referer: http://xxx.testchamilo.xx/main/install/index.php?running=1&installType=update&updateFromConfigFile=main%2Finc%2Fconf%2Fconfiguration.php

Un saludo.

#22

Updated by Jose Garcia over 3 years ago

Hola.
De nuevo.
Aplicando posteriormente lo último de Github muestra en Paso 7 – Ejecución del proceso de actualización

ERROR: An exception occurred while executing 'ALTER TABLE skill_rel_user ADD COLUMN course_id INT NOT NULL DEFAULT 0 AFTER id':

SQLSTATE[42S21]: Column already exists: 1060 Duplicate column name 'course_id'

Un saludo.

#23

Updated by Angel Quiroz over 3 years ago

He probado migrar desde v1.9.10.2 a 1.10.x (con los últimos cambios de hoy) y he reproducido un error en c_item_property relacionado a to_group_id

Al crear 3 grupos en un curso y luego borrar 1 (borré el segundo). Pero en la base de datos se tenía en c_item_property los id 1 y 3 de c_group_info. La migración al agregar el iid en c_item_property, el valor insertado es 1 y 2. Y luego en Version20150603181728 al agregar el foreign key a c_group_info, no encuentra 3 y lanza el error.

ERROR: An exception occurred while executing 'ALTER TABLE c_item_property ADD CONSTRAINT FK_1D84C181330D47E9 FOREIGN KEY (to_group_id) REFERENCES c_group_info (iid)':

SQLSTATE[23000]: Integrity constraint violation: 1452 Cannot add or update a child row: a foreign key constraint fails (`chamilo19x`.`#sql-49b_167`, CONSTRAINT `FK_1D84C181330D47E9` FOREIGN KEY (`to_group_id`) REFERENCES `c_group_info` (`iid`))

El foreign key hace referencia al iid de c_group_id
https://github.com/chamilo/chamilo-lms/commit/97c0d24a2cdd6f78da5c9731c406884296d2feaa

#24

Updated by Julio Montoya over 3 years ago

He agregado correciones para "ALTER TABLE user MODIFY COLUMN user_id int unsigned DEFAULT null" y skill_rel_user.

#25

Updated by Jose Garcia over 3 years ago

Hola.
Con los últimos cambios muestra

ERROR: An exception occurred while executing 'ALTER TABLE skill_rel_user ADD INDEX idx_select_cs (course_id, session_id)':

SQLSTATE[42000]: Syntax error or access violation: 1061 Duplicate key name 'idx_select_cs'

Un saludo.

#26

Updated by Julio Montoya over 3 years ago

Jose Garcia wrote:

Hola.
Con los últimos cambios muestra

[...]

Un saludo.

Ese indice solo se agregó en 1.10, no debería existir en 1.9.x.
Me parece que la BD no es una 1.9.x "pura".

#27

Updated by Jose Garcia over 3 years ago

Hola, Julio. Disculpa, se había quedado a medio actualizar en una ocasión anterior.

Hemos restaurado el .sql original de Chamilo 1.9.10.2 (unos 800 Mb) y repitiendo el proceso con la última versión del Github de 1.10.x muestra

ERROR: An exception occurred while executing 'ALTER TABLE user MODIFY COLUMN user_id int unsigned DEFAULT NULL':

SQLSTATE[42000]: Syntax error or access violation: 1171 All parts of a PRIMARY KEY must be NOT NULL; if you need NULL in a key, use UNIQUE instead

Un saludo.

#28

Updated by Yannick Warnier over 3 years ago

  • Assignee changed from Angel Quiroz to Jose Garcia

Acabo de mandar otro cambio para revertir el orden de estos queries para que no genere error (el error se debe a que se pone user_id a "posible null" cuando todavía es primary key).

José, cuando puedas lo pruebas y nos avisas del resultado?

#29

Updated by Yannick Warnier over 3 years ago

  • % Done changed from 0 to 70
#30

Updated by Jose Garcia over 3 years ago

Hola.
Con los últimos cambios indica

ERROR: An exception occurred while executing 'ALTER TABLE skill_rel_user ADD INDEX idx_select_cs (course_id, session_id)':

SQLSTATE[42000]: Syntax error or access violation: 1061 Duplicate key name 'idx_select_cs'

Lo hemos repetido un par de veces volcando de nuevo la base de datos de Chamilo 1.9.

Muchas gracias.

Un saludo.

#31

Updated by Yannick Warnier over 3 years ago

Solo para estar seguro... borras la base final (con drop database) y luego importas el backup de la 1.9 nuevamente, verdad?
Porque si solo "aplastas" la base de datos final con el backup, eso te va a dejar todas las tablas extra que ya se crearon...

#32

Updated by Jose Garcia over 3 years ago

Hola.

El proceso que seguimos siempre es el mismo para evitar que existan tablas de la 1.10 antes de iniciar la migración desde la 1.9:

- Eliminamos todas las tablas de la base de datos 1.9.

- Con la base de datos vacía insertamos desde consola el archivo .sql de unos 800 Mb que contiene sentencias drop table y create table

- Realizamos de nuevo el proceso desde navegador web .../main/install/ y muestra

ERROR: An exception occurred while executing 'ALTER TABLE skill_rel_user ADD INDEX idx_select_cs (course_id, session_id)':

SQLSTATE[42000]: Syntax error or access violation: 1061 Duplicate key name 'idx_select_cs'

Un saludo.

#33

Updated by Yannick Warnier over 3 years ago

Te lo pregunto porque me da la sensación de que tu dump de 1.9 no está limpio de cosas de 1.10. Por ejemplo, el índice idx_select_cs no se encuentra de ningún lado dentro del código de la 1.9, y solo se encuentra una vez en el proceso de migración de 1.9 a 1.10. Por lo tanto, es imposible (en teoría) que te diga (como lo hace) que no se puede crear el índice porque ya existe.

He verificado los índices de la tabla skill_rel_user en una instalación de 1.9 que tengo aquí, y no hay ninguna señal de idx_select_cs.

Por eso insisto: el dump de 1.9 tiene que ser limpio de cosas de la 1.10, y si se hace el "borrado" a través de un script, entonces quizás le falte al script borrar tablas de las cuales no sabe nada. Por eso es recomendable hacer un "DROP DATABASE chamilo19" en vez de borrar las tablas una por una. Aquí no se trata de una tabla sino de un índice (no necesariamente se borra en el proceso).

#34

Updated by Jose Garcia over 3 years ago

Hola, Yannick. Mis disculpas lo primero ;-)

Ya hemos detectado donde se localizaba el error anterior del índice idx_select_cs era debido al .sql que lo contenía. Efectivamente tenía en la parte final un añadido no presente en la versión 1.9.

Con la copia correcta ahora del sql de la base de datos 1.9, eliminando todos los datos, con el código actualizado de la 1.10 del github y posteriormente volcando el fichero original .sql exportado (ahora pesa casi 1 Gb) hemos iniciado la migración en /main/install y nos indica

ERROR: An exception occurred while executing 'ALTER TABLE user DROP PRIMARY KEY':

SQLSTATE[42000]: Syntax error or access violation: 1075 Incorrect table definition; there can be only one auto column and it must be defined as a key

Un saludo y gracias de nuevo.

#35

Updated by Yannick Warnier over 3 years ago

  • Assignee changed from Jose Garcia to Yannick Warnier

Jajaja, esta tarea nunca termina :)
Gracias por la persistencia. Este error proviene de que no se puede hacer un "drop" del primary key si todavía el campo "user_id" está configurado en AUTO_INCREMENT. Vamos a ver lo que se puede hacer.

#36

Updated by Yannick Warnier over 3 years ago

  • Status changed from Needs testing to Assigned
  • Assignee changed from Yannick Warnier to Angel Quiroz
#37

Updated by Angel Quiroz over 3 years ago

  • Assignee changed from Angel Quiroz to Jose Garcia

Al tratar de migrar al 1.10.x desde una instalación de 1.9.10.4 con sólo los usuarios de prueba registrados, se obtiene el error del comentario #34
Hice un revert de 70c7ef3. Y se soluciona el error durante la migración.

Podrían verificar ahora la migración?

#38

Updated by Jose Garcia over 3 years ago

Gracias, Ángel:

He repetido el proceso 3 veces con el último código de github (rama 1.10.x) y en ambas ocasiones se ha eliminado el contenido de la base de datos y restaurado el .sql de Chamilo 1.9.

La salida de errores ahora muestra:

ERROR: An exception occurred while executing 'ALTER TABLE user MODIFY COLUMN user_id int unsigned DEFAULT NULL':
SQLSTATE42000: Syntax error or access violation: 1171 All parts of a PRIMARY KEY must be NOT NULL; if you need NULL in a key, use UNIQUE instead

Un saludo.

#39

Updated by Angel Quiroz over 3 years ago

Hola, José
He probado migrar desde 1.9.x hasta 1.10.x y no puedo reproducir el error. La migración se realiza correctamente
Estoy porbando con 5.5.5-10.0.23-MariaDB-0ubuntu0.15.10.1 en modo STRICT_TRANS_TABLES, luego STRICT_ALL_TABLES y luego ambos.

#40

Updated by Jose Garcia over 3 years ago

Hola, Angel.

Nuestro entorno es Debian 8, con PHP 7.0.6 y MySQL 5.7.12.

Nosotros podemos modificar las variables del fichero my.cnf en nuestros servidores pero no es lo habitual en entornos hosting disponer de acceso a este fichero o solicitar cambios en él.

Los errores de la migración apuntan a sentencias SQL.

El error

ERROR: An exception occurred while executing 'ALTER TABLE user MODIFY COLUMN user_id int unsigned DEFAULT NULL':
SQLSTATE42000: Syntax error or access violation: 1171 All parts of a PRIMARY KEY must be NOT NULL; if you need NULL in a key, use UNIQUE instead

se debe al código de línea 126-128 del archivo /app/Migrations/Schema/V110/Version110.php

        $this->addSql("ALTER TABLE user MODIFY COLUMN user_id int unsigned DEFAULT NULL");
        $this->addSql("ALTER TABLE user DROP PRIMARY KEY");
        $this->addSql("ALTER TABLE user ADD COLUMN id INT DEFAULT NULL");

Si se cambia a

    $this->addSql("ALTER TABLE user MODIFY COLUMN user_id int unsigned NOT NULL");
        $this->addSql("ALTER TABLE user DROP PRIMARY KEY");
        $this->addSql("ALTER TABLE user MODIFY COLUMN user_id int unsigned DEFAULT NULL");
        $this->addSql("ALTER TABLE user ADD COLUMN id INT DEFAULT NULL");

ya no muestra el error pero se visualiza otro posteriormente

ERROR: An exception occurred while executing 'ALTER TABLE c_announcement MODIFY COLUMN id INT NULL':
SQLSTATE[42000]: Syntax error or access violation: 1171 All parts of a PRIMARY KEY must be NOT NULL; if you need NULL in a key, use UNIQUE instead

ya que en el mismo archivo /app/Migrations/Schema/V110/Version110.php hay numerosas instrucciones SQL que provocan mensajes de error porque intentan poner como NULL una clave principal. También salen otros mensajes porque se intenta quitar una clave principal que es autonumérica.

Estamos cambiando el archivo indicado y si progresamos lo enviaremos como commit para su revisión.

Muchas gracias.

Un saludo.

#41

Updated by Jose Garcia over 3 years ago

Hola.

Adjunto el archivo* /app/Migrations/Schema/V110/Version110.php* con el que estamos realizando la migración con las correcciones que hemos realizado en él.

Enviaremos un commit con los cambios ya que ahora si parece que se está realizando la migración de 1.9 a 1.10 y no muestra ningún error de SQL.

En el paso Paso 7 – Ejecución del proceso de actualización
Por favor espere. Esto podría tomar un tiempo...

quizás habría que poner algún mensaje adicional indicando lo que está realizando o un barra de progreso aunque sea orientativa para conocer por donde va realizando los cambios ;-)

La migración se está ejecutando aún ya que la consulta del archivo /app/Migrations/Schema/V110/Version20151221150100.php con el update de

   UPDATE c_quiz_answer a
            INNER JOIN c_quiz_answer b
            ON a.question_id = b.question_id
            INNER JOIN c_quiz_question q
            ON b.question_id = q.id
            SET a.correct = b.id_auto
            WHERE
                a.correct = b.id AND
                q.c_id = a.c_id AND
                q.type IN (" . MATCHING . ", " . DRAGGABLE . ", " . MATCHING_DRAGGABLE . ")

está tardando bastante (lleva casi 80 minutos) dado que la tabla c_quiz_answer tiene más de 250.000 registros.

Ya os comentamos al respecto.

Muchas gracias.

Un saludo.

#42

Updated by Angel Quiroz over 3 years ago

Hola José
Estuve cambiando los id autoincrement de las migraciones a algo parecido a lo que has hecho https://github.com/AngelFQC/chamilo-lms/commit/d1c23556e5f17536df00d5f6108f13e7ae566d69 y lo tengo en mi repositorio personal
Pero tú código funciona bien, podrías envíarlo en un pull request para integrarlo en chamilo

#43

Updated by Jose Garcia over 3 years ago

Gracias, Angel ;-)

Hemos publicado el commit en https://github.com/nosolored/chamilo-lms/commit/95b9d65c7c95ba26197119a7e4e4dace09b4c952

Finalmente ayer después de 5 horas y media ejecutando la última consulta paramos la migración en


 UPDATE c_quiz_answer a
            INNER JOIN c_quiz_answer b
            ON a.question_id = b.question_id
            INNER JOIN c_quiz_question q
            ON b.question_id = q.id
            SET a.correct = b.id_auto
            WHERE
                a.correct = b.id AND
                q.c_id = a.c_id AND
                q.type IN (4, 18, 19)
        ':

es la consulta

$this->addSql(" 
            UPDATE c_quiz_answer a
            INNER JOIN c_quiz_answer b
            ON a.question_id = b.question_id
            INNER JOIN c_quiz_question q
            ON b.question_id = q.id
            SET a.correct = b.id_auto
            WHERE
                a.correct = b.id AND
                q.c_id = a.c_id AND
                q.type IN (" . MATCHING . ", " . DRAGGABLE . ", " . MATCHING_DRAGGABLE . ")
        ");
    }

¿Se podría optimizar de alguna manera la consulta final de actualización de "Fix c_quiz_answer's correct field for id_auto" del archivo .../app/Migrations/Schema/V110/Version20151221150100.php que comienza en la línea 32 para acelerarla?

¿Es normal que tarde tanto tiempo en realizarla? ¿Os ha ocurrido a vosotros en algún caso similar?

Como os comentaba la tabla c_quiz_answer tiene más de 250.000 registros.

Muchas gracias.

Un saludo.

#44

Updated by José Angel Ruiz (Nosolored) over 3 years ago

Hola,
Aquí el pull request con los cambios en el fichero /app/Migrations/Schema/V110/Version110.php
https://github.com/chamilo/chamilo-lms/pull/1157

#45

Updated by Angel Quiroz over 3 years ago

  • % Done changed from 70 to 80

Hola José
Acabo de probar otra vez la migración y no tengo errores en los error_logs ni en el instalador. Por lo que hice merge a tu PR.
Respecto a optimizar la consulta, no encuentro otra forma de hacer la migración en la tabla c_quiz_answer. Yannick me comentó que algunas migraciones le ha tomado mucho más tiempo.

#46

Updated by Jose Garcia over 3 years ago

Gracias, Ángel:

Prepararemos la migración de la otra base de datos de casi 1 Gb y lo dejaremos ejecutándose la migración.

Para ganar tiempo en el mismo entorno PHP 7 y MySQL 5.7 he repetido el proceso con una base de datos Chamilo 1.9 más pequeña (8 Mb) con el último código de Github (correcciones de hace unos minutos) y nos muestra al final un error en la tabla session (contiene 12 sesiones):

Hemos repetido el proceso 3 veces, eliminando el contenido de la base de datos y volcando el fichero .sql (comprobando previamente que no tuviera ningún índice salvo el drop y create table habituales).

Prueba 1:

ERROR: An exception occurred while executing 'ALTER TABLE session ADD CONSTRAINT FK_D044D5D4D1DC2CFC FOREIGN KEY (id_coach) REFERENCES user (id)':

SQLSTATE[23000]: Integrity constraint violation: 1452 Cannot add or update a child row: a foreign key constraint fails (`dbname`.`#sql-795_6c236`, CONSTRAINT `FK_D044D5D4D1DC2CFC` FOREIGN KEY (`id_coach`) REFERENCES `user` (`id`))

Prueba 2:

ERROR: An exception occurred while executing 'ALTER TABLE session ADD CONSTRAINT FK_D044D5D4D1DC2CFC FOREIGN KEY (id_coach) REFERENCES user (id)':

SQLSTATE[23000]: Integrity constraint violation: 1452 Cannot add or update a child row: a foreign key constraint fails (`dbname`.`#sql-795_6c38c`, CONSTRAINT `FK_D044D5D4D1DC2CFC` FOREIGN KEY (`id_coach`) REFERENCES `user` (`id`))

Prueba 3:

ERROR: An exception occurred while executing 'ALTER TABLE session ADD CONSTRAINT FK_D044D5D4D1DC2CFC FOREIGN KEY (id_coach) REFERENCES user (id)':

SQLSTATE[23000]: Integrity constraint violation: 1452 Cannot add or update a child row: a foreign key constraint fails (`dbname`.`#sql-795_6c3f6`, CONSTRAINT `FK_D044D5D4D1DC2CFC` FOREIGN KEY (`id_coach`) REFERENCES `user` (`id`))

El error log de Apache muestra

[Tue May 17 19:33:12 2016] [error] [client xx.xx.xxx.xxx] Starting migration process from 1.9.10.2 (2016-05-17 19:33:12), referer: /main/install/index.php?running=1&installType=update&updateFromConfigFile=main%2Finc%2Fconf%2Fconfiguration.php

[Tue May 17 19:33:22 2016] [error] [client xx.xx.xxx.xxx] There was an error during running migrations. Check error.log, referer: /main/install/index.php?running=1&installType=update&updateFromConfigFile=main%2Finc%2Fconf%2Fconfiguration.php

Un saludo.

#47

Updated by Jose Garcia over 3 years ago

Hola de nuevo.

Con otra base de datos más pequeña de Chamilo 1.9 (1 Mb) he realizado la migración (entorno PHP 7 y MySQL 5.7) y nos muestra al final el mensaje:

ERROR: Unknown database type enum requested, Doctrine\DBAL\Platforms\MySQL57Platform may not support it.

Mientras lo revisáis vamos a realizar también pruebas con estas bases de datos en otro servidor Debian con PHP 5.6.15 MySQL 5.6.27 y os comentamos.

Un saludo.

#48

Updated by Angel Quiroz over 3 years ago

Hola José

El problema de la tabla session quizás se deba a que se borró un usuario que fue coach de la sesión y ahora no existe. Lo cual también es raro, ya que desde 1.9.x, si un usuario que es coach de session (id_coach) se elimina, se establece el actual admin como nuevo coach.
No he podido reproducir el problema

El segundo error tampoco puedo reproducirlo, ya que no se usan tipos enum en las tablas de chamilo en 1.10.x. En 1.9.x sí. Pero durante el proceso de migración se cambian a varchar. https://github.com/chamilo/chamilo-lms/blob/1.10.x/main/install/index.php#L719

#49

Updated by Jose Garcia over 3 years ago

Gracias de nuevo.

Se nos resiste con las bases de datos que hemos reportado con anterioridad ;-)

Hemos progresado con la migración pero con otras bases de datos Chamilo 1.9 distintas en las que si ha finalizado la migración a 1.10 y se mueve /courses a /app/courses (mismo entorno PHP 7 y MySQL 5.7).

También estamos realizando pruebas en máquinas virtuales con Ubuntu, con git, por ftp, etc.

Por cierto, en https://github.com/chamilo/chamilo-lms/tree/1.10.x en Upgrade from 1.9.x indica

git fetch --all
git checkout origin 1.10.x

el segundo nos da error.

Si funciona ejecutando git checkout origin/1.10.x y luego con git pull origin 1.10.x si se realiza la migración de 1.9 a 1.10 con git

No sé si es que realizamos alguna cosa mal nosotros. Por reportar ;-)

Cuestiones:

1. ¿Se podría insertar un control para que no pare el proceso de actualización y lo asigne al admin como nuevo coach?

El problema de la tabla session quizás se deba a que se borró un usuario que fue coach de la sesión y ahora no existe. Lo cual también es raro, ya que desde 1.9.x, si un usuario que es coach de session (id_coach) se elimina, se establece el actual admin como nuevo coach.
No he podido reproducir el problema

Los usuarios siempre se han borrado desde la Administración de Chamilo nunca directamente desde la base de datos.

Esa instalación se ha ido actualizado desde las iniciales Chamilo 1.8, 1.9, etc. conforme se han ido liberando cada una de ellas se aplicaban los parches y los saltos de rama correspondientes sin cambios en la base de datos salvo los que realiza cada rama nueva.

Es probable que existan otras instalaciones con este mismo problema.

2. Al final de la migración en el apartado Detalles muestra un texto con todos los cambios realizados en las tablas de Chamilo. Este resumen es muy útil y quizás debería mostrarse durante el proceso de actualización en /main/install la ejecución de cada fichero php de app/Migrations/Schema/V110 por lo menos que indique el nombre del que se está ejecutando para en caso de fallo saber exactamente en que fichero php ha dado el error.

De otra forma hay que localizar la consulta revisando los ficheros php para intentar localizar el punto donde se produce el error de la migración.

La opción de detalles podría ir visualizando la actualización y conforme la va realizando mostrar el fichero que ejecuta. Aunque para esto se tendría que añadir código adicional para que sin recargar la página se pudiera ir viendo el resultado

VERSION: 110
----------------------------------------------
...

VERSION: 20150423093100
----------------------------------------------
---

VERSION: 20151221150100
----------------------------------------------

---
DONE!

Seguimos revisando los motivos por los que no realiza la migración las otras bases de datos Chamilo 1.9 que hemos comentado.

Un saludo.

#50

Updated by Jose Garcia over 3 years ago

Hola.

Como continuación de lo anterior. Hemos realizado una modificación para corregir los id_coach que ya no existen en la tabla user y que no aparezca el error

ERROR: An exception occurred while executing 'ALTER TABLE session ADD CONSTRAINT FK_D044D5D4D1DC2CFC FOREIGN KEY (id_coach) REFERENCES user (id)':
SQLSTATE[23000]: Integrity constraint violation: 1452 Cannot add or update a child row: a foreign key constraint fails (`dbname`.`#sql-795_6c236`, CONSTRAINT `FK_D044D5D4D1DC2CFC` FOREIGN KEY (`id_coach`) REFERENCES `user` (`id`))

en el fichero /app/Migrations/Schema/V110/Version110.php en la línea 26 si se añade

$this->addSql("UPDATE session SET session.id_coach = 1 WHERE id_coach NOT IN ( SELECT user_id FROM user)");

o
$this->addSql("UPDATE session SET session.id_coach = 1 WHERE NOT EXISTS ( SELECT * FROM user WHERE session.id_coach = user.user_id )");

De esta forma se realiza la migración correctamente.

Enviaremos un commit a Github.

Seguimos con las pruebas en el resto de instalaciones.

Un saludo.

#51

Updated by Jose Garcia over 3 years ago

Hola de nuevo.

Con la base de datos Chamilo 1.9 que nos indica el error de enum he repetido el proceso de migración a 1.10 de la manera habitual con el mismo resultado.

ERROR: Unknown database type enum requested, Doctrine\DBAL\Platforms\MySQL57Platform may not support it.

He seguido lo comentado y he ejecutado antes de la actualización las consultas SQL en Chamilo 1.9:

El segundo error tampoco puedo reproducirlo, ya que no se usan tipos enum en las tablas de chamilo en 1.10.x. En 1.9.x sí. Pero durante el proceso de migración se cambian a varchar. 
https://github.com/chamilo/chamilo-lms/blob/1.10.x/main/install/index.php#L719
ALTER TABLE course_category MODIFY COLUMN auth_course_child VARCHAR(40) DEFAULT 'TRUE'
ALTER TABLE course_category MODIFY COLUMN auth_cat_child VARCHAR(40) DEFAULT 'TRUE'
ALTER TABLE c_quiz_answer MODIFY COLUMN hotspot_type varchar(40) default NULL
ALTER TABLE c_tool MODIFY COLUMN target varchar(20) NOT NULL default '_self'
ALTER TABLE c_link MODIFY COLUMN on_homepage char(10) NOT NULL default '0'
ALTER TABLE c_blog_rating MODIFY COLUMN rating_type char(40) NOT NULL default 'post'
ALTER TABLE c_survey MODIFY COLUMN anonymous char(10) NOT NULL default '0'
ALTER TABLE c_document MODIFY COLUMN filetype char(10) NOT NULL default 'file'
ALTER TABLE c_student_publication MODIFY COLUMN filetype char(10) NOT NULL default 'file'

en /main/install en detalles sigue mostrando el mismo mensaje anterior:

El entorno es PHP 7 y MySQL 5.7. ¿Se tendría que definir el tipo enum en Doctrine para esta versión de MySQL?

Buscando he localizado esta info a través del artículo http://wildlyinaccurate.com/doctrine-2-resolving-unknown-database-type-enum-requested/

http://docs.doctrine-project.org/projects/doctrine-orm/en/latest/cookbook/mysql-enums.html
http://symfony.com/doc/2.0/cookbook/doctrine/dbal.html#registering-custom-mapping-types-in-the-schematool

por si sirve de ayuda.

Muchas gracias.

Un saludo.

#52

Updated by José Angel Ruiz (Nosolored) over 3 years ago

Pull-request con la modificación en la tabla de "session" en la cual los valores de "id_coach" que no se encuentren en la tabla "user" serán modificados al valor "1".

https://github.com/chamilo/chamilo-lms/pull/1169

#53

Updated by Jose Garcia over 3 years ago

Hola.

Hemos iniciado de nuevo la migración de la base de datos de casi 1 Gb de Chamilo 1.9. Ahora mismo está ejecutando la consulta final del archivo .../app/Migrations/Schema/V110/Version20151221150100.php

Query 15840 Sending data ---
UPDATE c_quiz_answer a INNER JOIN c_quiz_answer b ON a.question_id = b.quest

Esta última consulta que realiza deja bloqueada la migración durante horas mientras la ejecuta.

¿Qué hace exactamente esa consulta? Une una tabla consigo misma (esto implica una consulta lenta) y modifica el campo correct con un id cuando se supone que en la versión 1.10 este campo solo toma valores 1 o 0, no es así?

Lo mismo me equivoco así que disculpas ;-)

$this->addSql(" 
            UPDATE c_quiz_answer a
            INNER JOIN c_quiz_answer b
            ON a.question_id = b.question_id
            INNER JOIN c_quiz_question q
            ON b.question_id = q.id
            SET a.correct = b.id_auto
            WHERE
                a.correct = b.id AND
                q.c_id = a.c_id AND
                q.type IN (" . MATCHING . ", " . DRAGGABLE . ", " . MATCHING_DRAGGABLE . ")
        ");

En el servidor donde lo estamos probando tiene discos ssd, 32 Gb RAM, procesadores, etc. y no tiene nada más que la instalación de prueba.Tiene una carga mínima el sistema.

No sé si es tema de añadir alguna optimización a MySQL, caché, u optimizar tablas antes de realizar la migración, etc.

Si es tema de esperar dejaremos la consulta el tiempo necesario y os comentamos cuando finalice ;-)

Muchas gracias por todo.

Un saludo.

#54

Updated by Angel Quiroz over 3 years ago

Hola José
Se montó un servidor en Debian 8 con PHP 7.0.6 + MySQL 5.7.12 Community Server
Probé la migración de la base de datos bd2.sql (de 7.1M) y bd3.sql (de 1.2M) a la versión 1.10.x desde github y la migración no arrojó errores
Lo que encontré fueron tablas de curso crs_ que me generaron un error al generar un backup local. Estas tablas ya no se utilizan en chamilo19x y versiones posteriores.
Los procesos de migraciones se realizaron bien y no duró más de 1 hora en completarse casa migración.

Quizá podamos tomar esta tarea como un caso particular y cerrar este ticket

#55

Updated by Jose Garcia over 3 years ago

Hola Ángel:

En primer lugar os doy las gracias por vuestro tiempo en este tema, que sé le estáis dedicando mucho al igual que nosotros.

Tras los últimos cambios que se han hecho, probamos la migración 1.9 a 1.10 correctamente con todas las bases de datos excepto con la que pesa casi 1 Gb que después de 15 horas de ejecución paramos el proceso ya que no avanzaba la consulta de actualización.

Creemos que se une el tamaño de la base de datos y el de las tablas indicadas con la consulta final que provoca lentitud al realizar la migración:

Es esta consulta del archivo app/Migrations/Schema/V110/Version20151221150100.php (líneas 32 a 42) donde no avanza la migración:

UPDATE c_quiz_answer a
            INNER JOIN c_quiz_answer b
            ON a.question_id = b.question_id
            INNER JOIN c_quiz_question q
            ON b.question_id = q.id
            SET a.correct = b.id_auto
            WHERE
                a.correct = b.id AND
                q.c_id = a.c_id AND
                q.type IN (" . MATCHING . ", " . DRAGGABLE . ", " . MATCHING_DRAGGABLE . ")

No entiendo bien el sentido de esta consulta, pero lo que puedo ver es que el campo question_id en la tabla c_quiz_answer no tiene definido un índice. Esto provoca que la consulta sea extremadamente lenta en una base de datos como esta, que tiene muchos ejercicios.

¿Se podría añadir justo antes un índice a la tabla como

ALTER TABLE c_quiz_answer ADD INDEX (question_id);

para comprobar si acelera el proceso de migración?

Configuración MySQL/PHPMyAdmin
--------------------------------------------------------
El phpmyadmin del servidor que hemos utilizado para las pruebas proporciona información y devuelve algunos consejos, como añadir índices (se está usando en exclusiva para realizar migraciones Chamilo):

- Created tmp disk tables 410.6 k El número de tablas temporales en el disco que fueron creados automáticamente por el servidor mientras ejecuta las sentencias. Si las tablas Created_tmp_disk_tables es grande, puede incrementar el valor de tmp_table_size para hacer que las tablas temporales se basen en memoria en lugar de basarse en disco.

- Handler read rnd next 95.9 G El número de solicitudes hechas para leer la siguiente fila en el archivo de datos. Este es alto si usted está haciendo muchos escaneos de tablas. Generalmente, esto sugiere que sus tablas no están indizadas apropiadamente o que sus consultas no están escritas para tomar ventaja de los índices que tiene.

- Opened tables 15.7 M El número de tablas que han sido abiertas. Si el número de tablas abiertas es grande, su valor del cache de tabla probablemente es muy pequeño (<- Aumentaremos el valor de la caché de MySQL).

- Select full join 212.8 k El número de vínculos (joins) que no usan índices. Si este valor no es 0, deberá revisar los índices de sus tablas cuidadosamente.

- Select range check 19 El número de vínculos (joins) sin claves que revisan el uso de claves luego de cada fila. (Si no es 0, deberá revisar los índices de sus tablas cuidadosamente.)

Hemos descartado que el problema sea el entorno (PHP 7 y MySQL 5.7) ya que también se han realizado pruebas en servidores con PHP 5.6 y MYSQL 5.6, en máquinas virtuales con Ubuntu, en instalaciones Windows, etc. obteniendo el mismo resultado en todas las ocasiones.

Por nuestra parte vamos a hacer pruebas agregando este índice y ver si por fin finaliza la migración. Os contaremos el resultado.

Un saludo.

#56

Updated by Jose Garcia over 3 years ago

Hola.

¡¡¡Por fin se pudo migrar la base de datos de casi 1 Gb de Chamilo 1.9 a 1.10!!!

Si se añade la consulta SQL en app/Migrations/Schema/V110/Version20151221150100.php

ALTER TABLE c_quiz_answer ADD INDEX (question_id);

se realiza el proceso en 7 minutos ;-)

Nuestra sugerencia sería insertar en el archivo app/Migrations/Schema/V110/Version20151221150100.php el índice para c_quiz_answer justo antes de la línea 19 de

$this->addSql("ALTER TABLE c_quiz_answer ADD INDEX (question_id)");

quedando por tanto de la siguiente forma

public function up(Schema $schema)
    {
        $this->addSql(" 
            ALTER TABLE c_quiz_answer ADD INDEX (question_id)");

        $this->addSql(" 
            UPDATE track_e_attempt a
            INNER JOIN c_quiz_answer qa
            ON a.question_id = qa.question_id
            INNER JOIN c_quiz_question q
            ON qa.question_id = q.id
            SET a.answer = qa.id_auto
            WHERE
                a.answer = qa.id AND
                q.c_id = a.c_id AND
                q.type IN (" . MATCHING . ", " . DRAGGABLE . ", " . MATCHING_DRAGGABLE . ")
        ");

        $this->addSql(" 
            UPDATE c_quiz_answer a
            INNER JOIN c_quiz_answer b
            ON a.question_id = b.question_id
            INNER JOIN c_quiz_question q
            ON b.question_id = q.id
            SET a.correct = b.id_auto
            WHERE
                a.correct = b.id AND
                q.c_id = a.c_id AND
                q.type IN (" . MATCHING . ", " . DRAGGABLE . ", " . MATCHING_DRAGGABLE . ")
        ");
    }

Nosotros hemos probado directamente insertando el índice en la base de datos y hemos realizado un par de pruebas con demos de 1.9 y simulado el proceso en el servidor inicial (PHP 7 y MySQL 5.7) y en otro con PHP 5.6 y MySQL 5.6.

Enviaremos un commit para que lo reviséis.

Muchas gracias por todo.

Un saludo.

#58

Updated by Jose Garcia over 3 years ago

Hola.

El commit con el índice lo enviamos https://github.com/chamilo/chamilo-lms/pull/1198/commits/dceb5164e1adf284b0cb075c71ed1baa5497f10f

Ya nos comentáis.

Saludos.

#59

Updated by Jose Garcia over 3 years ago

Buenas.

En otra migración distinta Chamilo 1.9 a 1.10 nos ocurre lo que indican en #8278 (https://support.chamilo.org/issues/8278)

ERROR: An exception occurred while executing 'ALTER TABLE course_rel_user ADD CONSTRAINT FK_92CFD9FEA76ED395 FOREIGN KEY (user_id) REFERENCES user (id)':

SQLSTATE[23000]: Integrity constraint violation: 1452 Cannot add or update a child row: a foreign key constraint fails (`demodatabase`.`#sql-12d3_11d0301`, CONSTRAINT `FK_92CFD9FEA76ED395` FOREIGN KEY (`user_id`) REFERENCES `user` (`id`))

Las correcciones de https://support.chamilo.org/projects/chamilo-18/repository/revisions/aa640cd3a387e545055af911a0f0a9a37bd86c93 parece que no se ha aplicado en github

Nos podéis confirmar.

Muchas gracias.

Un saludo.

#60

Updated by Jose Garcia over 3 years ago

Hola.

Existen usuarios que estaban en la tabla course_rel_user pero el id no aparece en la tabla user
Imagino que porque en algún momento fueron eliminados de la tabla user sin borrarlos de la tabla course_rel_user

Una consulta de este tipo los localiza

SELECT *
FROM `course_rel_user` AS R
LEFT JOIN user AS U ON U.id = R.user_id
WHERE U.id IS NULL

Habría que insertar un check que lo comprobara y eliminara estos usuarios, algo como

delete course_rel_user.*
FROM `course_rel_user` LEFT JOIN user ON user.id = course_rel_user.user_id WHERE user.id IS NULL

Revisando las correcciones de https://support.chamilo.org/projects/chamilo-18/repository/revisions/aa640cd3a387e545055af911a0f0a9a37bd86c93 ya se realizaron consultas al respecto.

https://support.chamilo.org/projects/chamilo-18/repository/revisions/aa640cd3a387e545055af911a0f0a9a37bd86c93/diff/app/Migrations/Schema/V110/Version110.php
https://support.chamilo.org/projects/chamilo-18/repository/revisions/aa640cd3a387e545055af911a0f0a9a37bd86c93/diff/app/Migrations/Schema/V110/Version20150603181728.php
https://support.chamilo.org/projects/chamilo-18/repository/revisions/aa640cd3a387e545055af911a0f0a9a37bd86c93/diff/app/Migrations/Schema/V110/Version20151101082200.php
https://support.chamilo.org/projects/chamilo-18/repository/revisions/aa640cd3a387e545055af911a0f0a9a37bd86c93/diff/app/Migrations/Schema/V110/Version20151101082300.php

¿Estas correcciones se aplicarán en Github? ¿Creamos un commit y lo publicamos para que lo reviséis?

Muchas gracias.

Un saludo.

#61

Updated by Jose Garcia over 3 years ago

Hola.

Las correcciones parece que están aplicadas a la rama 1.11 pero no en la 1.10. ¿Se van a añadir a ésta?

Muchas gracias.

#62

Updated by Julio Montoya over 3 years ago

Jose Garcia (Nosolored) wrote:

Hola.

Las correcciones parece que están aplicadas a la rama 1.11 pero no en la 1.10. ¿Se van a añadir a ésta?

Muchas gracias.

Si hay un problema de envío de la correción. Ahora lo veo.

#63

Updated by Julio Montoya over 3 years ago

Agregado a 1.10.x

#64

Updated by Jose Garcia over 3 years ago

Muchas gracias, Julio ;-)

Un saludo.

#65

Updated by Jose Garcia over 3 years ago

Hola.

Nos muestra otro error en una migración


ERROR: An exception occurred while executing 'DELETE course_rel_user WHERE course_code NOT IN (SELECT code FROM course)':

SQLSTATE[42000]: Syntax error or access violation: 1064 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 'WHERE course_code NOT IN (SELECT code FROM course)' at line 1

en la línea 158 de app/Migrations/Schema/V110/Version110.php

$this->addSql("DELETE course_rel_user WHERE course_code NOT IN (SELECT code FROM course)");
por
$this->addSql("DELETE FROM course_rel_user WHERE course_code NOT IN (SELECT code FROM course)");

Haremos un commit.

Un saludo.

#66

Updated by Jose Garcia over 3 years ago

Hola de nuevo:

ERROR: An exception occurred while executing 'DELETE access_url_rel_course WHERE course_code NOT IN (SELECT code FROM course)':

SQLSTATE42000: Syntax error or access violation: 1064 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 'WHERE course_code NOT IN (SELECT code FROM course)' at line 1

app/Migrations/Schema/V110/Version110.php en la línea 520

$this->addSql("DELETE access_url_rel_course WHERE course_code NOT IN (SELECT code FROM course)");
por
$this->addSql("DELETE FROM access_url_rel_course WHERE course_code NOT IN (SELECT code FROM course)");

Un saludo.

#67

Updated by Yannick Warnier over 3 years ago

Jose Garcia (Nosolored) wrote:

Hola de nuevo:

ERROR: An exception occurred while executing 'DELETE access_url_rel_course WHERE course_code NOT IN (SELECT code FROM course)':

SQLSTATE42000: Syntax error or access violation: 1064 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 'WHERE course_code NOT IN (SELECT code FROM course)' at line 1

app/Migrations/Schema/V110/Version110.php en la línea 520

$this->addSql("DELETE access_url_rel_course WHERE course_code NOT IN (SELECT code FROM course)");
por
$this->addSql("DELETE FROM access_url_rel_course WHERE course_code NOT IN (SELECT code FROM course)");

Esta última ya está en una de las tareas para la 1.11.

Un saludo.

#68

Updated by Jose Garcia over 3 years ago

Gracias.

Also available in: Atom PDF