Support #8200
openError MySQL (foreign key) al actualizar de 1.9.10 a 1.10.4
80%
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
Updated by Jose Garcia over 7 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.
Updated by Yannick Warnier over 7 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.
Updated by Julio Montoya over 7 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.
Updated by Julio Montoya over 7 years ago
Acabo de agregar unas condiciones:
https://github.com/chamilo/chamilo-lms/commit/30648a5154d2e3b31217ef8baeaccd722ddff36e
Updated by Julio Montoya over 7 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?
Updated by Jose Garcia over 7 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.
Updated by Julio Montoya over 7 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)
Updated by Jose Garcia over 7 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.
Updated by Jose Garcia over 7 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.
Updated by Jose Garcia over 7 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.
Updated by Yannick Warnier over 7 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).
Updated by Julio Montoya over 7 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.
Updated by Jose Garcia over 7 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.
Updated by Jose Garcia over 7 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.
Updated by Julio Montoya over 7 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
Updated by Jose Garcia over 7 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.
Updated by Yannick Warnier over 7 years ago
- Target version changed from 1.11.0 to 1.10.6
Updated by Angel Quiroz over 7 years ago
He corregido un problema con extra_fields en las migraciones
https://github.com/chamilo/chamilo-lms/commit/f1c94b89ed228cdab048a60cd7bbfe751b4ae1ff
Updated by Yannick Warnier over 7 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.
Updated by Julio Montoya over 7 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_valuesInfo 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
Updated by Jose Garcia over 7 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.
Updated by Jose Garcia over 7 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.
Updated by Angel Quiroz over 7 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
Updated by Julio Montoya over 7 years ago
He agregado correciones para "ALTER TABLE user MODIFY COLUMN user_id int unsigned DEFAULT null" y skill_rel_user.
Updated by Jose Garcia over 7 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.
Updated by Julio Montoya over 7 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".
Updated by Jose Garcia over 7 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.
Updated by Yannick Warnier over 7 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?
Updated by Jose Garcia over 7 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.
Updated by Yannick Warnier over 7 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...
Updated by Jose Garcia over 7 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.
Updated by Yannick Warnier over 7 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).
Updated by Jose Garcia over 7 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.
Updated by Yannick Warnier over 7 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.
Updated by Yannick Warnier over 7 years ago
- Status changed from Needs testing to Assigned
- Assignee changed from Yannick Warnier to Angel Quiroz
Updated by Angel Quiroz over 7 years ago
- Assignee changed from Angel Quiroz to Jose Garcia
Updated by Jose Garcia over 7 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.
Updated by Angel Quiroz over 7 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.
Updated by Jose Garcia over 7 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.
Updated by Jose Garcia over 7 years ago
- File Version110.php Version110.php added
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.
Updated by Angel Quiroz over 7 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
Updated by Jose Garcia over 7 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.
Updated by José Angel Ruiz (Nosolored) over 7 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
Updated by Angel Quiroz over 7 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.
Updated by Jose Garcia over 7 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.
Updated by Jose Garcia over 7 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.
Updated by Angel Quiroz over 7 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
Updated by Jose Garcia over 7 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.
Updated by Jose Garcia over 7 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.
Updated by Jose Garcia over 7 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.
Updated by José Angel Ruiz (Nosolored) over 7 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".
Updated by Jose Garcia over 7 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.
Updated by Angel Quiroz over 7 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
Updated by Jose Garcia over 7 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.
Updated by Jose Garcia over 7 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.
Updated by José Angel Ruiz (Nosolored) over 7 years ago
Updated by Jose Garcia over 7 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.
Updated by Jose Garcia about 7 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.
Updated by Jose Garcia about 7 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.
Updated by Jose Garcia about 7 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.
Updated by Julio Montoya about 7 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.
Updated by Jose Garcia about 7 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.
Updated by Jose Garcia about 7 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.
Updated by Yannick Warnier about 7 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.