Mise a jour chamilo

Résolu/Fermé
bleconte Messages postés 5 Date d'inscription lundi 20 mars 2017 Statut Membre Dernière intervention 22 mars 2017 - 20 mars 2017 à 15:09
mamiemando Messages postés 33459 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 8 janvier 2025 - 21 mars 2017 à 10:34
Bonjour,
je m'excuse d'avance pour mon niveau assez faible de lycéen.
Je suis actuellement en stage et j'ai pour projet de mettre a jour chamilo (service elerning de l'entreprise).
Pour ce faire j'ai suivis le guide officiel http://www.esct.rnu.tn/rtpc/documentati ... fr_FR.html mais quand je lance l'installation il me marque cette erreur :

ERROR: An exception occured while executing 'ALTER TABLE c_lp ADD max_attempts INT NOT NULL, ADD subscribe_users INT NOT NULL DEFAULT ':
SQLSTATE[42S21]: Column already exists: 1060 Duplicate column name 'max_attempts'

je suppose donc que cela vient de mes tables qui sont dans MySQL , et dans l'installation il me marque ceci :

• assurez-vous qu'aucune table ne persiste d'une version antérieure de Chamilo. Ces tables peuvent en effet causer une erreur durant la mise à jour. En particulier, les tables des versions 1.8.* et antérieures pouvaient se répéter une fois par cours, résultant en un grand nombre de tables partageant le même préfixe. Seules les tables sans préfixe ou avec un préfixe "c_" sont légitimes dans les versions 1.9 et supérieures. Assurez-vous qu'aucune de ces anciennes tables ne persiste. Prenez une copie de sauvegarde de votre base de données (au cas où) puis supprimez-les (drop table ...).


je dois alors suprimer certaines tables mais je ne sais pas lesquelles . Pouvez vous m'aidez ?

Voici la liste , en gros de mes différentes tables :

A voir également:

1 réponse

mamiemando Messages postés 33459 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 8 janvier 2025 7 813
Modifié par mamiemando le 21/03/2017 à 10:36
Bonjour,

Explication du problème

En SQL :
- toutes les tables ont des noms distincts
- dans une table donnée, toutes les colonnes ont des noms distincts

C'est nécessaire car il faut que quand tu tapes une requête SQL relatives à une colonne ou à une table, celle-ci ne soit pas ambiguë. MySQL va donc veiller à ce que tu n'ailles pas à l'encontre de ces deux règles.

Si on regarde ton message d'erreur, tu tentes de créer une colonne "max_attempts" dans la table "c_lp". Vu que cette colonne existe déjà, en ajouter une irait à l'encontre de la règle qui oblige chaque colonne d'une table à avoir un nom distinct des autres.

Résolution du problème

1) Avant toute chose, il faut sauver ta base pour que si tu te trompes, tu puisses revenir en arrière. Le plus simple pour cela est d'utiliser
mysqldump
.

Exemple : pour sauver la base toto dans le fichier dans /home/titi/backup_toto.sql :

mysqldump -u root -p toto > /home/titi/backup_toto.sql


Le fichier sera créé dans le répertoire courant. Vérifie qu'il contient bien tout ce que tu voulais sauver.

Note : Si tu as bien réalisé ton backup, tu peux restaurer la base toto en la droppant puis en rechargeant ton dump.

mysql -u root -p -e "drop database toto"
mysql -u root -p < /home/titi/backup_toto.sql


2) Ensuite, si on lit ton message :

assurez-vous qu'aucune table ne persiste d'une version antérieure de Chamilo. Ces tables peuvent en effet causer une erreur durant la mise à jour. En particulier, les tables des versions 1.8.* et antérieures pouvaient se répéter une fois par cours, résultant en un grand nombre de tables partageant le même préfixe. Seules les tables sans préfixe ou avec un préfixe "c_" sont légitimes dans les versions 1.9 et supérieures. Assurez-vous qu'aucune de ces anciennes tables ne persiste. Prenez une copie de sauvegarde de votre base de données (au cas où) puis supprimez-les (drop table ...).

... donc tu es sensé avoir uniquement des tables dont le nom :
- commencé par le préfixe "c_"
- n'est pas préfixé

À première vue c'est ton cas. La table qui pose problème commence par un "c_" et semble donc légitime.

Personnellement je pense que le script part du principe que cette colonne doit exister, mais n'existe pas forcément. Du coup le plus simple serait de commenter dans le script d'installation cette commande sql (en ajoutant
--
devant la/les ligne(s) correspondante(s)).

J'imagine que le script que tu utilises ne prend pas en compte ce cas de figure, car tester l'existence ou non d'une colonne en mysql n'est pas très simple à écrire :
https://stackoverflow.com/questions/972922/add-column-to-mysql-table-if-it-does-not-exist

Bonne chance
0