Changer le moteur des tables MySQL de Prestashop

logo-prestashop

Que se cache-t-il derrière ce titre aguicheur ?

Ce billet est en fait une astuce que j’ai utilisée récemment pour une assistance technique sur un site utilisant la solution e-commerce prestashop.

Lorsque l’on débute, en construisant son premier site internet, il n’est pas nécessaire, très souvent, d’opter immédiatement pour un hébergement puissant.

On s’oriente donc vers un hébergement de type mutualisé chez OVH, par exemple, qui pour le tarif proposé offre, quoiqu’on en dise, de bonnes garanties notamment en terme de sauvegarde (fichiers et base de données).

Mais voilà, comme le stipule la documentation d’OVH les tables de votre base de données doivent utiliser le moteur MyISAM afin que le système de sauvegarde (snapshot) de l’hébergeur fonctionne.

Et Prestashop dans tout çà ?

Et bien l’installateur de Prestashop, dans son assistant d’installation, ne propose plus le moteur que vous souhaitez utiliser pour votre base de donnéescapture-installation

et effectue donc l’installation des tables avec le moteur InnoDB.

C’est grave docteur ?

En soit : non, votre installation va se dérouler normalement sur votre hébergement mutualisé et vous allez pouvoir profiter pleinement de votre plateforme e-commerce.
Tout va fonctionner correctement dans le meilleur des mondes.

Seulement voilà, comme je l’ai indiqué au début de ce billet la base de données ne sera alors pas sauvegardée puisqu’utilisant le moteur InnonDB au lieu de MyISAM par le système d’OVH.

En cas de pépin technique nécessitant de restaurer votre base de données vous ne pourrez pas le faire car la sauvegarde sera inexistante. Vous n’aurez alors que vos yeux pour pleurer avec quelques heures de travail mises à la poubelle.

La solution

Il faut donc changer le moteur MySQL de InnoDB vers MyISAM pour toutes les tables de la base de données.

On relève alors les manches, on ouvre phpMyAdmin, par exemple, sur la base de données. Et là, whouhaou ! 244 tables sur lesquelles il va falloir modifier le moteur de InnoDB vers MyISAM. Cela fait un bon paquet de clics en perspectives dans l’interface. C’est assez fastidieux !

Ce que je propose c’est donc d’utilisé MySQL lui même pour, avec une simple requête, construire les requêtes qui vont vous permettre de le faire en une seule manipulation.

NB  : dans l’exemple la base de données se nomme mabasededonnees pensez à remplacer ce nom par celui de votre base de données réelle (comme dans la capture d’écran où on y voit prestashop156)

Allez dans phpMyAdmin, chosissez votre base de données et dans l’onglet SQL, collez la requête suivante :

Ce qui donne concrètement avec une capture d’écran ceci

capture-phpmyadmin

Exécuter la requête. Vous obtenez alors le résultat qui est une liste des 244 requêtes pour modifier les tables.

capture-resultat-requete-myisam

Il reste encore un travail préparatoire afin de pouvoir les exécuter et terminer le travail.

  • Exportez le résultat dans un fichier texte de type CSV. Vous avez pour cela un lien tout en bas des résultats.

capture-exporter-requete

NB : ne tenez pas compte du message « Statut de table incorrect : TABLE_TYPE »

  • Ouvrez ensuite le fichier dans votre éditeur favori (Sublime Text pour n’en citer qu’un et faire plaisir aux fans de la marque à la pomme) pour faire un léger nettoyage. En effet, après l’export, toutes les requêtes se retrouvent encadrées par des guillemets qu’il va falloir enlever pour nous permettre de les exécuter correctement.
  • Dans l’éditeur, faites donc un simple « Rechercher/remplacer » pour remplacer toutes les guillemets par rien.

NB : En fait il n’est pas nécessaire de passer par cette étape d’édition du fichier CSV pour supprimer les guillemets. En effet, lorsque vous choisissez le format d’exportation CSV, vous avez de nouveaux champs qui apparaissent permettant de définir les options du format de sortie. Dans le champ « colonnes entourées par : », supprimez simplement la valeur "
Vous aurez alors en sortie un fichier CSV tout propre, prêt à l’emploi pour l’étape suivante.

Il ne vous reste plus qu’à copier / coller l’ensemble de ce fichier dans le champ de l’onglet « SQL » de phpMyAdmin afin d’exécuter l’ensemble des requêtes sur votre base de données prestashop.

NB : Pensez bien à vous replacer sur votre base de données. En effet à l’issue de l’exécution de l’export du résultat de la première requête vous pouvez vous retrouver sur la base information_schema de MySQL.

capture-requete-changement-moteur

Et voilà, normalement l’ensemble de vos tables de votre base de données Prestashop sont donc maintenant avec le moteur MyISAM.

 

Dernière étape, il faut également changer votre fichier config/settings.inc.php de configuration Prestashop afin de lui indiquer que les tables utilisent le moteur MyISAM

NB : modification indispensable surtout si vous installez des modules qui ajoutent des tables par la suite dans la base de données, comme la navigation à facettes par exemple.

Si ce billet vous a été utile ou si vous avez des remarques, n’hésitez pas à utiliser les commentaires ci-dessous.

8 réflexions au sujet de « Changer le moteur des tables MySQL de Prestashop »

  1. Hello Manooweb,

    J’ai installé ma boutique Prestashop en local grâce à Wampserver et je suis en train de télécharger ça sur un hébergement OVH.

    Je viens de lire ton article très précis et détaillé, cependant, comme il date d’il y a plus de 2 ans, je me demande si OVH a toujours cette même contrainte. D’ailleurs, en allant sur la page d’OVH que tu indiques, on ne peut lire nulle part cette obligation d’être en MyISAM.

    Aurais-tu la gentillesse de confirmer si c’est encore le cas ?

    Cordialement,
    Amar GC

    • Bonjour Amar,

      Effectivement mon billet date de 2 ans et depuis les offres « 2014 » d’hébergement mutualisé d’OVH sont sortis. Il est probable que cette limitation n’existe plus comme elle n’est plus indiqué dans la documentation que j’avais mis en lien. Toutefois, ces mêmes guides ont parfois du mal à suivre les évolutions des offres d’hébergement :-).

      En effet, dans le sommaire des guides que l’on trouve encore ici : http://guides.ovh.com/ il est encore indiqué (tables MyISAM) à côté des liens qui pointent vers la documentation à jour.

      Par ailleurs avec un peu de recherche on trouve également ceci : https://www.ovh.com/tn/hebergement-web/sauvegarde_incrementale_des_bases_de_donnees_sql.xml qui indique que les snapshots de base de données sont maintenant compatible avec le moteur InnoDB ( depuis le 29 août 🙂 de quelle année ? on ne sait pas ^=^ ). Il est indiqué que cela fonctionne uniquement pour les nouvelles bases de données. Pour celles qui existent avant cette date, cela ne fonctionnera pas. C’est à dire que l’on reste toujours sur l’ancien système (moteur MyISAM + snapshot j-1 et j-7)

      Bref pour en avoir le coeur net, j’ai fait un test sur une de mes bases de données (pas trop importante). Rendez-vous demain matin après la sauvegarde de la nuit. A mon avis comme il s’agit d’une ancienne base, il faudra probablement la recréer pour qu’elle intègre le nouveau système. A suivre ….

      Manu

    • Merci Valérie !
      Bien content que cela puisse servir.
      Une sauvegarde périodique de sa base de données est de nos jours essentielle pour un site internet. C’est encore plus vrai pour un e-commerce (suivi de commande, suivi client … etc. )
      Il ne faut pas compter que sur l’hébergeur pour garantir sa restauration en cas de pépin.

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *