MySQL : convertir une table MyISAM vers InnoDB

2 avril 2014

Il y a quelques temps et pour des questions de performances, j’ai eu à convertir une base de données d’une cinquantaine de tables du moteur MyISAM vers InnoDB.

Voici une méthode simple et rapide pour effectuer cette conversion en console et d’une seule commande :

Tout d’abords, simulation afin de voir quels seront les requêtes SQL envoyées au serveurs :

$ DB="LeNomDeVotreBaseDeDonnées"
$ ENGINE="InnoDB" # Mettre InnoBD pour convertir vers InnoDB. Inversement, mettre MyISAM pour convertir vers MyISAM.
$ echo 'SHOW TABLES;' \
| mysql --defaults-file=/etc/mysql/debian.cnf ${DB} \
| awk '!/^Tables_in_/ {print "ALTER TABLE `"$0"` ENGINE = ${ENGINE};"}' \
| column -t

Si tout semble correct, on exécute les requêtes :

ATTENTION :
Je ne prends aucune responsabilité en cas de dommage à votre base de données.
Veuillez TOUJOURS effectuer des sauvegardes dans le cas ou un problème se produirait lors de l’exécution de cette commande.
Il vous appartient de vérifier que votre base de données est compatible avant d’effectuer cette conversion !

L’exécution de cette commande peut être très longues suivant la taille et le nombre de vos tables !

$ DB="LeNomDeVotreBaseDeDonnées"
$ ENGINE="InnoDB" # Mettre InnoBD pour convertir vers InnoDB. Inversement, mettre MyISAM pour convertir vers MyISAM.
$ echo 'SHOW TABLES;' \
| mysql --defaults-file=/etc/mysql/debian.cnf ${DB} \
| awk '!/^Tables_in_/ {print "ALTER TABLE `"$0"` ENGINE = ${ENGINE};"}' \
| column -t \
| mysql --defaults-file=/etc/mysql/debian.cnf ${DB}

Laisser un commentaire

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

*

*