Assistance pédagogique

Erreur de sauvegarde de cours (Moodle3.2.2)

 
Avatar Gaetan Loosfelt
Erreur de sauvegarde de cours (Moodle3.2.2)
 

Bonjour à la communauté,

Peut être pourrez-vous m'aider.

Je viens de mettre en route un Moodle dans lequel j'ai réaliser un seul cours avec 2 sections. La particularité de ce cours c'est qu'il est composé d'un wiki qui est l'outil principal de cours. J'ai préparé un centaines de pages préformées dans lesquels j'ajoute un fichier audio (50 à 80MO) à chaque fois et un lien vers une video avec un lien distant du type :


Je souhaite sauvegarder ce cours, mais lors de la sauvegarde j'ai un message d'erreur à +- 80%.

----------------------------------------------------------------------------------------------------

Erreur de lecture de la base de données

Plus d'informations sur cette erreur

Debug info: MySQL server has gone away
SELECT COUNT(*)
FROM mdlwy_backup_ids_temp b
JOIN mdlwy_user u ON u.id = b.itemid
WHERE b.backupid = ?
AND b.itemname = 'userfinal'
AND u.mnethostid != ?
[array (
0 => '0d33f3345551aa17c630db7b5cc65fb7',
1 => '1',
)]
Error code: dmlreadexception


Stack trace:

  • line 479 of /lib/dml/moodle_database.php: dml_read_exception thrown
  • line 1175 of /lib/dml/mysqli_native_moodle_database.php: call to moodle_database->query_end()
  • line 1551 of /lib/dml/moodle_database.php: call to mysqli_native_moodle_database->get_records_sql()
  • line 1624 of /lib/dml/moodle_database.php: call to moodle_database->get_record_sql()
  • line 1834 of /lib/dml/moodle_database.php: call to moodle_database->get_field_sql()
  • line 477 of /backup/util/dbops/backup_controller_dbops.class.php: call to moodle_database->count_records_sql()
  • line 1771 of /backup/moodle2/backup_stepslib.php: call to backup_controller_dbops::backup_includes_mnet_remote_users()
  • line 88 of /backup/util/plan/backup_structure_step.class.php: call to backup_main_structure_step->define_structure()
  • line 181 of /backup/util/plan/base_task.class.php: call to backup_structure_step->execute()
  • line 177 of /backup/util/plan/base_plan.class.php: call to base_task->execute()
  • line 120 of /backup/util/plan/backup_plan.class.php: call to base_plan->execute()
  • line 322 of /backup/controller/backup_controller.class.php: call to backup_plan->execute()
  • line 136 of /backup/util/ui/backup_ui.class.php: call to backup_controller->execute_plan()
  • line 131 of /backup/backup.php: call to backup_ui->execute()
___________________________________________________________________

J'ai essayé de sauvegarder uniquement le wiki, mais le contenu des pages créées est vide...

Je joins le message d'erreur de la base.

Merci de votre aide.


Gaetan


 
Moyenne des évaluations  -
Gilles Le Page
Re: Erreur de sauvegarde de cours (Moodle3.2.2)
Moodleurs particulièrement utiles

Bonjour Gaetan,

Si je me base sur mon expérience, c'est le poids très important des ressources qui fait planter ces sauvegardes.

Je conseille aux gens que je forme sur Moodle d'éviter des cours comportant plus de 10 Mo de ressources ;

Solutions : 

  • des liens vers des ressources déposées sur un répertoire en ligne
  • un "système de fichiers" qui permet de ne pas inclure les ressources qui s'y trouvent dans les sauvegardes

Bonne suite

Gilles

 
Moyenne des évaluations  -
Avatar Nicolas Martignoni
Re: Erreur de sauvegarde de cours (Moodle3.2.2)
DéveloppeursDéveloppeurs de pluginsDocumentation writersMoodleurs particulièrement utilesTesteursTraducteurs

La question est abordée dans la documentation, ici : error/moodle/dmlwriteexception.

Comme le suggère Gilles, c'est vraisemblablement une question de limitation au niveau du serveur. Voir aussi https://moodle.org/mod/forum/discuss.php?d=274077 (en anglais) pour des pistes pour corriger ce problème.

 
Moyenne des évaluations  -
C'est moi :-)
Re: Erreur de sauvegarde de cours (Moodle3.2.2)
Documentation writersMoodleurs particulièrement utilesTesteursTraducteurs

Bonjour,

Et rien que le message d'erreur ("MySQL server has gone away") indique que le serveur MySQL est devenu injoignable. Donc, vérifier tout ce qui touche à une durée d'exécution et taille d'éléments à traiter.

Séverin

 
Moyenne des évaluations  -
Avatar Gaetan Loosfelt
Re: Erreur de sauvegarde de cours (Moodle3.2.2)
 

Merci pour vos retours.

Je vais essayer de voir coté limitation du serveur. Mais je craints que la quantité de fichiers sons soit un peut lourde.

Pour les videos j'ai créée un espace sur mon serveur.

à bientôt


 
Moyenne des évaluations  -
Daniel
Re: Erreur de sauvegarde de cours (Moodle3.2.2)
Moodleurs particulièrement utiles

Bonjour Geatan,

Vous dites au début : "centaines de pages préformées dans lesquels j'ajoute un fichier audio (50 à 80MO) à chaque fois"

Donc votre cours fait plusieurs centaines de Mo. Au pire 800Mo ?

Chez moi la limite serveur est de 500Mo.

Aucune de mes sauvegardes de cours ne dépasse 150Mo. Plutôt entre 10 et 50Mo en général.

Il serait souhaitable de lier (alias) vos fichiers sons qui seraient déposés eux-aussi sur votre serveur.

Surtout si votre cours n'est pas destiné au "nomadisme"...

Vous allez redonner beaucoup de souffle à votre système asphyxié.

Daniel

 

 
Moyenne des évaluations  -
Avatar Bruno Bouret
Re: Erreur de sauvegarde de cours (Moodle3.2.2)
 
Bonjour,
 
Comme pour Gaetan, beaucoup de mes sauvegardes de cours plantent alors que certains ne comportent pas de gros fichiers, ou ne sont pas nos plus gros cours.
Toujours sur la même requête que celle rapportée par Gaetan.
En ajoutant des traces j'ai pu déterminer à quelle étape de la sauvegarde le problème se produisait.
Il s'agit de la tâche (backup_task) de construction du fichier xml qui sera ensuite zippé.
Elle s'arrête dès la première étape (backup_step) qui cherche les utilisateurs externes. Comme le dit Séverin, à ce stade, la base est déjà déconnectée,
Le problème vient donc de la tâche d'avant : c'est celle qui collecte les fichiers utilisés par le cours.
Quand cette collecte est longue on perd la connexion au serveur car elle se fait à partir d'une liste déjà constituée avant, sans requête SQL .
J'ai donc été voir mon DBA et nous avons trouvé wait_timeout=15 dans /etc/mysql/my.cnf
En augmentant cette valeur à wait_timout=60, la plupart de mes sauvegardes sont passées.
Attention cependant, il est déconseillé d'augmenter wait_timout car on court le risque d'atteindre le nombre de sessions mysql simultanées si certains process ne ferment pas correctement leur session.
Il faudrait donc,  
 soit augmenter dynamiquement la valeur dans le script (mais jusqu'à où ?),
 soit insérer une petite requête SQL dans la boucle de collecte, toutes les 5 secondes par exemple, ce qui permettrait de laisser wait_timeout à 15 secondes.
 
Je vais donc
  1°) augmenter temporairement wait_timeout dans my.cnf pour faire passer mes sauvegardes
  2°) patcher la tache de collecte des fichiers pour tester les 2 solutions.
 
Et je vous tiens au courant.
 
Bien à vous

 
Moyenne des évaluations Utile (1)
Avatar Nicolas Martignoni
Re: Erreur de sauvegarde de cours (Moodle3.2.2)
DéveloppeursDéveloppeurs de pluginsDocumentation writersMoodleurs particulièrement utilesTesteursTraducteurs

Bonjour,

Merci pour ce retour. Pour info, la valeur par défaut de wait_timeout de MySQL sur une Debian (par exemple sur ma RaspberryPi) est de 28800 (donc 8 heures) ! Et ceci ne pose aucun problème de performance.

La valeur de 15 secondes est donc nettement trop basse. Il est même conseillé à divers endroits de la mettre à 200 (http://www.serveridol.com/2012/04/13/mysql-interactive_timeout-vs-wait_timeout/) ou 300 (ici: https://peaceloveandmoodle.wordpress.com/tag/max-connections/).

Donc pas nécessaire de patcher quoi que ce soit.

 
Moyenne des évaluations Utile (2)