Impossible de rentrer dans Moodle.

Impossible de rentrer dans Moodle.

par Raymi Phénix,
Nombre de réponses : 16

Bonjour,

J'ai actuellement un problème sur ma plateformes Moodle.

Informations techniques

  • Version Moodle précise : Moodle 3.6.3+
  • Version PHP : 7.2
  • Version MySQL : 5.1.73
  • Navigateur internet utilisé : Chrome
  • interclassement : utf8mb4_unicode_ci
  • Type : InnoDB

je suis sur un serveur mutualisé donc je passe par phpmysql

Description précise du problème

Après une mise a jour, lorsque je je veux me connecté, j'obtiens le message :

Debug info: COLLATION 'utf8_bin' is not valid for CHARACTER SET 'utf8mb4'
SELECT * FROM mdl_user WHERE LOWER(username) COLLATE utf8_bin = LOWER(?) AND deleted <> 1 AND mnethostid = ?
[array (
0 => 'xavier57',
1 => '1',
)]
Error code: dmlreadexception

Précisions importantes

Ma plateforme de production fonctionnait très bien jusqu'à la mise à jour. J'utilise Joomdle pour relier la plateforme à joomla.

Merci d'avance de l'aide que vous pourrez m'apporter.

Raymi


Moyenne des évaluations  -
En réponse à Raymi Phénix

Re: Impossible de rentrer dans Moodle.

par Christian Bocquet,
Avatar Moodleurs particulièrement utiles

Bonsoir,

Ce récent fil de discussion pourrait vous aider :

https://moodle.org/mod/forum/discuss.php?d=383711

Christian
En réponse à Christian Bocquet

Re: Impossible de rentrer dans Moodle.

par Raymi Phénix,

j'ai pourtant tout essayer mais rien !
Même ces requêtes ne changent rien :

ALTER TABLE mdl_user COLLATE utf8mb4_unicode_ci ;

ALTER TABLE mdl_user CONVERT TO character set utf8mb4 COLLATE utf8mb4_unicode_ci ;

Il faut peut être que je donne aussi : 
Stack trace:

  • line 486 of /lib/dml/moodle_database.php: dml_read_exception thrown
  • line 1245 of /lib/dml/mysqli_native_moodle_database.php: call to moodle_database->query_end()
  • line 1571 of /lib/dml/moodle_database.php: call to mysqli_native_moodle_database->get_records_sql()
  • line 1543 of /lib/dml/moodle_database.php: call to moodle_database->get_record_sql()
  • line 4810 of /lib/moodlelib.php: call to moodle_database->get_record_select()
  • line 4319 of /lib/moodlelib.php: call to get_complete_user_data()
  • line 143 of /login/index.php: call to authenticate_user_login()

En réponse à Raymi Phénix

Re: Impossible de rentrer dans Moodle.

par Nicolas Martignoni,
Avatar Développeurs Avatar Développeurs de plugins Avatar Documentation writers Avatar Moodleurs particulièrement utiles Avatar Testeurs Avatar Traducteurs

AMHA, faire ceci sur toutes les tables de la BDD.

Mieux encore, utiliser les outils fournis par Moodle pour faire ce type de manipulation. Voir par exemple cette discussion très récente.

En réponse à Nicolas Martignoni

Re: Impossible de rentrer dans Moodle.

par Raymi Phénix,

Merci beaucoup? apparemment ça plante

Erreur

Requête SQL:

ALTER TABLE mdl_auth_oauth2_linked_login CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

MySQL a répondu: Documentation

#1071 - Specified key was too long; max key length is 767 bytes 
En réponse à Raymi Phénix

Re: Impossible de rentrer dans Moodle.

par Ioura Batugowski,

Bonsoir,

Je viens d'être confronté au même problème en mettant à jour vers Moodle 3.5.5+

Dans mon cas c'était une valeur de configuration 'dbcollation' erronée qui restait dans config.php:

$CFG->dboptions = array (
  'dbcollation' => 'utf8_unicode_ci',
  ...
);

Elle était déjà présente avant la mise à jour, et la base était déjà convertie en utf8mb4, mais étonnamment le problème ne s'était pas manifesté avant cette mise à jour. Je l'ai changée en utf8mb4_unicode_ci et le problème est résolu.

Si ce n'est pas ça, jetez un œil sur lib/dml/mysqli_native_moodle_database.php; en particulier les méthodes get_dbcollation et connect (c'est cette dernière qui m'a mis sur la voie). L'erreur ne se situe sans doute pas dans la base de données, mais dans la requête SQL générée par moodle.

En réponse à Ioura Batugowski

Re: Impossible de rentrer dans Moodle.

par Raymi Phénix,

Merci 
Le fichier config est bon.
Ce qui est drôle c'est que le fichier config de base me met l'erreur
et le fichier config-dist.php ne me met pas d'erreur juste : ErreurLa connexion a échoué, veuillez réessayer
très étrange cette histoire...

En réponse à Raymi Phénix

Re: Impossible de rentrer dans Moodle.

par Ioura Batugowski,

Si ça peut vous aider, voici où j'en été arrivé dans mon débogage. Malheureusement comme c'est un serveur de prod, je n'avais pas les outils de débogage dessus.

C'est le "COLLATE utf8_bin" dans la requête qui est incorrect. Cette partie de la requête est générée dans la méthode sql_equal() dans mysqli_native_moodle_database.php. Celle-ci fait appel à get_dbcollation() (dans la même classe). Un test à faire serait de coder en dur une valeur de retour (insérer return 'utf8mb4_unicode_ci'; comme première ligne) dans get_dbcollation(). Si cela fonctionne, c'est que le problème vient bien de là...

La valeur retournée peut provenir soit de config.php (ce qui était mon cas), soit de la première des requêtes suivantes qui fonctionne:

  1. SELECT collation_name FROM INFORMATION_SCHEMA.COLUMNS WHERE table_schema = DATABASE() AND table_name = 'mdl_config' AND column_name = 'value'
  2. SELECT @@collation_database
  3. SHOW COLLATION WHERE Collation LIKE 'utf8mb4\_%' AND Charset = 'utf8mb4'

Je ne sais pas si ça vous aidera, mais j'avais exactement le même symptôme donc le diagnostic ne devrait pas être trop différent...

En réponse à Raymi Phénix

Re: Impossible de rentrer dans Moodle.

par Nicolas Martignoni,
Avatar Développeurs Avatar Développeurs de plugins Avatar Documentation writers Avatar Moodleurs particulièrement utiles Avatar Testeurs Avatar Traducteurs

Pas du tout étrange, mais tout à fait normal au contraire: le fichier config-dist.php ne connaît pas les identifiants de la BDD, donc ne peut pas se connecter.

En réponse à Nicolas Martignoni

Re: Impossible de rentrer dans Moodle.

par Raymi Phénix,

Il me semblais qu'il fallait renseigner config-dist.php et le mettre en config.php.
est ce bien cela ? Merci

En réponse à Raymi Phénix

Re: Impossible de rentrer dans Moodle.

par Nicolas Martignoni,
Avatar Développeurs Avatar Développeurs de plugins Avatar Documentation writers Avatar Moodleurs particulièrement utiles Avatar Testeurs Avatar Traducteurs

Oui, mais si vous laissez faire l'installeur de Moodle, il créera lui-même un fichier config.php, sans risque d'erreur (et sans toucher config-dist.php, toujours utile à titre de référence).

En réponse à Nicolas Martignoni

Re: Impossible de rentrer dans Moodle.

par Raymi Phénix,

je crois que je bugg moi aussi.
Je suis allé sur les pistes, rapatrié en local moodle, téléchargé la base et la verifier :

Search "utf8_unicode_ci" (0 hits in 0 files)
Search "utf8_bin" (0 hits in 0 files)

Tout est bien en "ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;"

Donc apparemment le problème vient d’ailleurs... Mais d'ou ?

En réponse à Raymi Phénix

Re: Impossible de rentrer dans Moodle.

par Ludovic ORNON,

Bonjour,

De ce que je comprends de:

Debug info: COLLATION 'utf8_bin' is not valid for CHARACTER SET 'utf8mb4'
SELECT * FROM mdl_user WHERE LOWER(username) COLLATE utf8_bin = LOWER(?) AND deleted <> 1 AND mnethostid = ?
[array (
0 => 'xavier57',
1 => '1',
)]
Error code: dmlreadexception

la collation demande un utf8_bin alors que la donnée est un utf8mb4. Je pense que la clé se trouve dans le config.php comme dit précédemment.

Mes options :

$CFG->dboptions = array (
  'dbpersist' => 0,
  'dbport' => '',
  'dbsocket' => '',
  'dbcollation' => 'utf8mb4_general_ci',
);

J'espere que cela peut aider,

Ludovic

En réponse à Ludovic ORNON

Re: Impossible de rentrer dans Moodle.

par Ludovic ORNON,

Peut-être que ce post sur le forum anglais peut t'aider :

Permalink

En réponse à Ludovic ORNON

Re: Impossible de rentrer dans Moodle.

par Raymi Phénix,

Merci beaucoup
Finalement j'ai fait appel à Antonio de Joomdle qui m'a fait le travail.
Apparemment c’était pas simple et il a chercher pendant un bon moment.
Je lui ai demandé ce qu'il avait fait mais pour le moment je n'ai pas de réponses.
Merci à vous tous.

Raymi

En réponse à Raymi Phénix

Re: Impossible de rentrer dans Moodle.

par Raymi Phénix,

Le problème de la base de données a été résolu en modifiant le fichier config.php de Moodle :

$CFG->dboptions = array (
  'dbpersist' => 0,
  'dbport' => '',
  'dbsocket' => '',
  'dbcollation' => 'utf8mb4_unicode_ci',
);

Merci encore à tous pour vos réponses et votre aide.

Bien à vous 

Raymi