Convertir les tables MyISAM vers InnoDB d’une base MySQL / MariaDB

Convertir les tables MyISAM vers InnoDB d’une base MySQL / MariaDB

I. Présentation

Dans ce tutoriel, nous allons voir comment convertir les tables MyISAM vers InnoDB d’une base de données sous MySQL ou MariaDB.

MyISAM et InnoDB correspondent à des moteurs de bases de données, que l’on peut appliquer au niveau de chaque table d’une base de données. Le moteur MyISAM est utilisé sur les versions plus anciennes de MySQL tandis que sur les versions plus récentes, c’est le moteur InnoDB qui est défini par défaut.

Si votre base de données existe depuis plusieurs années, il y a des chances qu’elle s’appuie sur le moteur MyISAM si vous n’avez pas fait le changement. Dans certains cas, par exemple avec WordPress, les extensions peuvent modifier le moteur de base de données lors d’une mise à jour (pour passer de MyISAM à InnoDB), mais les tables correspondantes au cœur de WordPress peuvent rester en MyISAM.

Pourquoi passer de MyISAM à InnoDB ? Je ne suis pas un expert en bases de données, mais InnoDB est plus performant (le temps d’exécution de certaines requêtes peut fortement diminuer), moins sujet à la corruption de données grâce à la gestion de transactions, et au niveau du verrouillage, InnoDB est capable de verrouiller une seule ligne d’une table tandis que MyISAM verrouille la table complète (ce qui peut engendrer des dysfonctionnements). Par contre, le moteur InnoDB consomme plus d’espace disque.

Avant de réaliser cette opération, prenez vos précautions : effectuez une sauvegarde de votre base de données, avec mysqldump ou PhpMyAdmin par exemple, ou avec votre extension de sauvegarde si vous utilisez un CMS comme WordPress.

II. Lister les tables avec le moteur MyISAM

Pour ce tutoriel, je ne vais pas manipuler avec PhpMyAdmin, mais directement avec la console MySQL / MariaDB (pour rappel, c’est un fork open source de MySQL).

Connectez-vous à votre serveur et ouvrez la console :

mysql -u root -p

Saisissez le mot de passe « root » de votre instance MySQL, et voilà, vous avez accès à la console.

Ensuite, on va lister les tables de notre base de données qui utilisent le moteur « MyISAM ». Voici un exemple pour une table nommée « dbwordpress » (nom à remplacer) :

SELECT TABLE_NAME, ENGINE FROM information_schema.TABLES WHERE TABLE_SCHEMA = 'dbwordpress' and ENGINE = 'myISAM';

Vous allez obtenir un tableau comme résultat. Ce tableau aura deux colonnes : TABLE_NAME (le nom de la table) et ENGINE (le nom du moteur). Si vous obtenez un résultat vide, c’est que vous n’avez pas de tables en MyISAM !

D’ailleurs, vous pouvez faire l’inverse et lister vos tables en InnoDB :

SELECT TABLE_NAME, ENGINE FROM information_schema.TABLES WHERE TABLE_SCHEMA = 'dbwordpress' and ENGINE = 'InnoDB';

Une fois que vous avez votre liste de tables en MyISAM, copier-coller cette liste dans un fichier texte pour la garder de côté. Pour ma part, j’ai obtenu plusieurs tables : abcd_comments, abcd_users, etc…

III. Passer de MyISAM à InnoDB

Maintenant que nous avons la liste des tables à modifier, il va falloir agir sur chacune de ces tables pour changer le moteur de base de données.

Remarque : pour effectuer cette opération, je pense qu’il vaut mieux couper les accès par la base de données. Si c’est sur un serveur Web, vous pouvez simplement arrêter le service Apache2 (systemctl stop apache2) et il faudra le démarrer à la fin de l’opération (systemctl start apache2).

Pour modifier le moteur de base de données, on va utiliser la requête SQL « ALTER TABLE ». Pour chacune des tables MyISAM, il va falloir exécuter une requête sous cette forme :

ALTER TABLE dbwordpress. ENGINE=InnoDB;

Ce qui va donner la requête SQL suivante pour la table « abcd_comments » :

ALTER TABLE dbwordpress.abcd_comments ENGINE=InnoDB;

Une requête à répéter pour chaque table, en adaptant le nom de la table à chaque fois. Pour ma part, je préfère réaliser l’action table par table, sans envoyer toutes les requêtes d’un coup, pour être sûr que tout se passe bien et vérifier au fur et à mesure.

L’opération peut prendre moins d’une seconde comme 5 secondes, en fonction du nombre de lignes à traiter dans la table. À chaque fois, la requête ALTER TABLE va indiquer s’il y a eu une erreur ou non.

À vous de jouer et pensez à réaliser une sauvegarde avant la modification.

Hébergez votre site à partir de 2$ sur 👉👉👉 https://www.tnctech.ca

À propos Santana

Analyste en cybersécurité avec 5 ans d'expérience dans la protection des systèmes d'information contre les menaces et les attaques. Expertise dans la surveillance des réseaux, l'analyse des vulnérabilités, et la gestion des incidents de sécurité. Passionnée par l'innovation technologique et la mise en œuvre de solutions de sécurité robustes pour protéger les données sensibles et assurer la conformité réglementaire.

Vérifiez également

Comment mettre en place MariaDB Galera Cluster sur Debian 11 ?

Comment mettre en place MariaDB Galera Cluster sur Debian 11 ?

Table de Matieres1 I. Présentation2 II. Les prérequis3 III. Quel est le moteur de stockage …

Comment mettre à niveau MariaDB 5.6 vers MariaDB 10.X ?

Comment mettre à niveau MariaDB 5.6 vers MariaDB 10.X ?

Table de Matieres1 I. Présentation2 II. Faire un dump de toutes les bases de données …

Activer le mode concepteur dans PhpMyAdmin

Activer le mode concepteur dans PhpMyAdmin

I. Présentation du mode concepteur Le mode concepteur dans PHPMyAdmin permet de visualiser les bases …

Laisser un commentaire

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.