« Migration de MyISAM vers InnoDB » : différence entre les versions

De MoodleDocs
Aller à :navigation, rechercher
 
(7 versions intermédiaires par 2 utilisateurs non affichées)
Ligne 1 : Ligne 1 :
{{Installation}}
{{Installation}}
'''Attention ! Depuis Moodle 2.9, le moteur MyISAM n'est plus supporté !''' Voir MDL-46064 et https://moodle.org/mod/forum/discuss.php?d=260200. La migration de vos tables vers InnoDB est donc indispensable.
Cette page concerne les sites Moodle utilisant MySQL, et devrait contenir toutes les informations nécessaires pour prendre une décision concernant le changement de [http://dev.mysql.com/doc/refman/5.0/fr/storage-engines.html moteur de données] pour passer à InnoDB (au lieu de MyISAM). Elle a été créée suite à [http://moodle.org/mod/forum/discuss.php?d=162871 cette discussion].
Cette page concerne les sites Moodle utilisant MySQL, et devrait contenir toutes les informations nécessaires pour prendre une décision concernant le changement de [http://dev.mysql.com/doc/refman/5.0/fr/storage-engines.html moteur de données] pour passer à InnoDB (au lieu de MyISAM). Elle a été créée suite à [http://moodle.org/mod/forum/discuss.php?d=162871 cette discussion].


== Pourquoi passer de MyISAM à InnoDB ==
== Pourquoi passer de MyISAM à InnoDB ? ==
InnoDB sera plus adapté pour une montée en charge importante. Pour des petits sites, son utilisation est moins utile.
{{Moodle 2.9}}
'''Depuis Moodle 2.9, il n'est plus possible d'utiliser le moteur MyISAM'''. InnoDB fonctionne de manière plus robuste, est plus performant sur les grandes plateformes et mieux adapté pour une montée en charge importante. Il offre également une meilleure intégrité des données (transactions).


== Différences entre MyISAM et InnoDB ==
== Différences entre MyISAM et InnoDB ==
* Lisez [http://tag1consulting.com/MySQL_Engines_MyISAM_vs_InnoDB]
 
* InnoDB est meilleur pour l'intégrité des données, moins bon pour la recherche dans de gros fichiers, et utilise plus de ressources CPU et d'espace de stockage (jusqu'à 2 ou 3 fois plus) que MyISAM
* Lisez [http://www.tux-planet.fr/mysql-les-principales-differences-entre-myisam-et-innodb/] ou [http://tag1consulting.com/MySQL_Engines_MyISAM_vs_InnoDB] (en anglais).
* InnoDB est plus jeune que MyISAM, mais devient de plus en plus attrayant... mais étant plus complexe, certains utilitaires écrit pour MyISAM comme mysqlhotcopy peuvent ne pas fonctionner
* InnoDB est meilleur pour l'intégrité des données, moins bon pour la recherche dans de gros fichiers, et utilise plus de ressources CPU et d'espace de stockage (jusqu'à 2 ou 3 fois plus) que MyISAM.
* Lors d'une modification dans une table, MyISAM verrouille la table entière (ce qui "bloque" les autres mises à jour) alors qu'InnoDB ne verrouille que l'enregistrement concerné (il est donc plus facile de réaliser plusieurs opérations en "quasi simultané") : en bref, plus un site est utilisé, plus l'avantage d'InnoDB sera notable
* InnoDB est plus jeune que MyISAM, mais devient de plus en plus attrayant... Mais étant plus complexe, certains utilitaires écrits pour MyISAM comme mysqlhotcopy peuvent ne pas fonctionner.
* Il est parfaitement possible d'utiliser InnoDB pour certaines tables, et MyISAM pour d'autres (selon les critères ci-dessus)
* Lors d'une modification dans une table, MyISAM verrouille la table entière (ce qui "bloque" les autres mises à jour) alors qu'InnoDB ne verrouille que l'enregistrement concerné (il est donc plus facile de réaliser plusieurs opérations en "quasi simultané") : en bref, plus un site est utilisé, plus l'avantage d'InnoDB sera notable.
* Il est parfaitement possible d'utiliser InnoDB pour certaines tables, et MyISAM pour d'autres (selon les critères ci-dessus). Cependant un tel mélange est à utiliser avec prudence.


== Configuration MySQL ==
== Configuration MySQL ==
Ligne 18 : Ligne 22 :


== Différentes façon de migrer de MyISAM à InnoDB ==
== Différentes façon de migrer de MyISAM à InnoDB ==
Il suffit d'utiliser '''une''' des méthodes ci-dessous, qui correspond le plus à votre cas, et vos possibilités.
Il suffit d'utiliser '''une''' des méthodes ci-dessous, qui correspond le plus à votre cas, et vos possibilités.
* Exécutez le script depuis la page web :
* '''Méthode recommandée''' : utilisez le [[Administration en ligne de commande|script en ligne de commande]] : '''php admin/cli/mysql_engine.php''' (nécessite l'accès au shell, et le fichier config.php doit n'avoir qu'une seule instance Moodle !
* Activez le mode de maintenance, et exécutez le script depuis la page web :
** Depuis Moodle 2.2 : ''<nowiki>http://www.MON_SITE_MOODLE.fr/admin/tool/innodb</nowiki>'' (Vous devez être connecté en tant qu'administrateur)
** Depuis Moodle 2.2 : ''<nowiki>http://www.MON_SITE_MOODLE.fr/admin/tool/innodb</nowiki>'' (Vous devez être connecté en tant qu'administrateur)
** Pour Moodle 1.9, 2.0 et 2.1 : ''<nowiki>http://www.MON_SITE_MOODLE.fr/admin/innodb.php</nowiki>''
** Pour Moodle 1.9, 2.0 et 2.1 : ''<nowiki>http://www.MON_SITE_MOODLE.fr/admin/innodb.php</nowiki>''
: Attention, il peut y avoir des problèmes de timeout sur les grandes bases de données.
: Attention, il peut y avoir des problèmes de timeout sur les grandes bases de données.
* Utilisez le [[Administration en ligne de commande|script en ligne de commande]] (depuis Moodle 2.0) dans ''admin/cli/mysql_engine.php'' (nécessite l'accès au shell, et le fichier config.php doit n'avoir qu'une seule instance Moodle, mais il n'y a aucun problème de timeout) - Moodle 2.x uniquement !
: Ajoutez au fichier /etc/my.cnf sous la section [mysqld] une ligne "binlog_format=ROW" (sans les guillemets) et arrêtez puis redémarrez MySQL. Sans cela, vous risquez de rencontrer l'erreur dmlwriteexception lorsque Moodle essaie d'écrire vers MySQL.
* Utilisez PHPMyAdmin en entrant dans la vue de la structure d'une table et cliquez sur l'onglet ''Opérations''. Recherchez les paramètres du moteur de stockage. Il s'agit d'une tâche fastidieuse à cause du nombre de tables [http://moodle.org/mod/forum/discuss.php?d=162002]
* Utilisez PHPMyAdmin en entrant dans la vue de la structure d'une table et cliquez sur l'onglet ''Opérations''. Recherchez les paramètres du moteur de stockage. Il s'agit d'une tâche fastidieuse à cause du nombre de tables [http://moodle.org/mod/forum/discuss.php?d=162002]
* Effectuez un dump de base de données (par exemple : mysqldump moodle_database > dump.sql), utilisez un éditeur ou des commandes sed/perl/awk pour trouver/remplacer MyISAM par InnoDB. Enfin, restaurez votre base dans le serveur (mysql < dump.sql ou équivalent). '''Attention''' : si vous utilisez cette méthode, assurez vous d'utiliser le même encodage lors du dump et de l'import !
* Effectuez un dump de base de données (par exemple : mysqldump moodle_database > dump.sql), utilisez un éditeur ou des commandes sed/perl/awk pour trouver/remplacer MyISAM par InnoDB. Enfin, restaurez votre base dans le serveur (mysql < dump.sql ou équivalent). '''Attention''' : si vous utilisez cette méthode, assurez vous d'utiliser le même encodage lors du dump et de l'import !
Ligne 30 : Ligne 36 :


== Retours d'expérience ==
== Retours d'expérience ==
Vous avez migré, n'hésitez pas à ajouter vos retours d'expérience : temps de traitement, en liaison avec la taille de votre base, éventuels problèmes rencontrés et solutions trouvées...
 
Vous avez migré, n'hésitez pas à ajouter vos retours d'expérience : temps de traitement, en liaison avec la taille de votre base, éventuels problèmes rencontrés et solutions trouvées.


== Voir aussi ==
== Voir aussi ==

Dernière version du 20 mai 2015 à 13:27

Attention ! Depuis Moodle 2.9, le moteur MyISAM n'est plus supporté ! Voir MDL-46064 et https://moodle.org/mod/forum/discuss.php?d=260200. La migration de vos tables vers InnoDB est donc indispensable.

Cette page concerne les sites Moodle utilisant MySQL, et devrait contenir toutes les informations nécessaires pour prendre une décision concernant le changement de moteur de données pour passer à InnoDB (au lieu de MyISAM). Elle a été créée suite à cette discussion.

Pourquoi passer de MyISAM à InnoDB ?

Nouveauté
Moodle
2.9

Depuis Moodle 2.9, il n'est plus possible d'utiliser le moteur MyISAM. InnoDB fonctionne de manière plus robuste, est plus performant sur les grandes plateformes et mieux adapté pour une montée en charge importante. Il offre également une meilleure intégrité des données (transactions).

Différences entre MyISAM et InnoDB

  • Lisez [1] ou [2] (en anglais).
  • InnoDB est meilleur pour l'intégrité des données, moins bon pour la recherche dans de gros fichiers, et utilise plus de ressources CPU et d'espace de stockage (jusqu'à 2 ou 3 fois plus) que MyISAM.
  • InnoDB est plus jeune que MyISAM, mais devient de plus en plus attrayant... Mais étant plus complexe, certains utilitaires écrits pour MyISAM comme mysqlhotcopy peuvent ne pas fonctionner.
  • Lors d'une modification dans une table, MyISAM verrouille la table entière (ce qui "bloque" les autres mises à jour) alors qu'InnoDB ne verrouille que l'enregistrement concerné (il est donc plus facile de réaliser plusieurs opérations en "quasi simultané") : en bref, plus un site est utilisé, plus l'avantage d'InnoDB sera notable.
  • Il est parfaitement possible d'utiliser InnoDB pour certaines tables, et MyISAM pour d'autres (selon les critères ci-dessus). Cependant un tel mélange est à utiliser avec prudence.

Configuration MySQL

Avant de tenter de changer le type de table, vous devriez :

  • Vérifier qu'InnoDB est activé. Connectez-vous à MySQL et lancez la commande SHOW ENGINES. Assurez vous que le support pour InnoDB montre "YES" ou "DEFAULT".
  • Activer innodb_file_per_table si nécessaire. Ce paramètre peut être utile pour de grosses installations, mais s'applique uniquement aux nouvelles tables créées et ne peut être appliqué après coup.

Différentes façon de migrer de MyISAM à InnoDB

Il suffit d'utiliser une des méthodes ci-dessous, qui correspond le plus à votre cas, et vos possibilités.

  • Méthode recommandée : utilisez le script en ligne de commande : php admin/cli/mysql_engine.php (nécessite l'accès au shell, et le fichier config.php doit n'avoir qu'une seule instance Moodle !
  • Activez le mode de maintenance, et exécutez le script depuis la page web :
    • Depuis Moodle 2.2 : http://www.MON_SITE_MOODLE.fr/admin/tool/innodb (Vous devez être connecté en tant qu'administrateur)
    • Pour Moodle 1.9, 2.0 et 2.1 : http://www.MON_SITE_MOODLE.fr/admin/innodb.php
Attention, il peut y avoir des problèmes de timeout sur les grandes bases de données.
Ajoutez au fichier /etc/my.cnf sous la section [mysqld] une ligne "binlog_format=ROW" (sans les guillemets) et arrêtez puis redémarrez MySQL. Sans cela, vous risquez de rencontrer l'erreur dmlwriteexception lorsque Moodle essaie d'écrire vers MySQL.

Retours d'expérience

Vous avez migré, n'hésitez pas à ajouter vos retours d'expérience : temps de traitement, en liaison avec la taille de votre base, éventuels problèmes rencontrés et solutions trouvées.

Voir aussi