Important : vous ne devez pas convertir les tables de la base
mysql
, telles que user
ou
host
) en type InnoDB
. Ces
tables doivent conserver le moteur MyISAM
.
Si vous voulez que toutes les tables non-système soient crées
directement en MySQL, depuis MySQL 3.23.43, ajoutez la ligne
default-table-type=innodb
dans la section
[mysqld]
de votre fichier
my.cnf
ou my.ini
.
InnoDB
n'a pas d'optimisation particulière
pour séparer la création d'index. Par conséquent, cela ne
sert à rien d'exporter et de réimporter les données de la
table pour créer les index après. Le moyen le plus rapide pour
mettre la table au format InnoDB
est
d'insérer directement les lignes dans une table
InnoDB
, c'est à dire, utiliser
ALTER TABLE ... TYPE=INNODB
, ou créer un
table InnoDB
vide, avec la même définition
et de faire l'insertion de toutes les lignes avec
INSERT INTO ... SELECT * FROM ...
.
Si vous avez une contrainte UNIQUE
sur des
clés secondaires, depuis MySQL 3.23.52, vous pouvez accélérer
l'importation dans les tables en désactivant la vérification
de cette contrainte durant l'insertion : SET
UNIQUE_CHECKS=0;
Pour les grosses tables, cela
économise beaucoup d'accès disques car
InnoDB
peut alors utiliser un buffer
d'insertion pour écrire les lignes par bloc.
Pour avoir un meilleur contrôle sur le processus d'insertion, il est mieux de faire les insertions des grosses tables par blocs :
INSERT INTO newtable SELECT * FROM oldtable WHERE yourkey > something AND yourkey <= somethingelse;
Une fois que toutes les données ont été insérées dans la table, vous pouvez la renommer.
Durant la conversion des grosses tables, vous pouvez donner à
InnoDB
un gros buffer pour réduire les
accès disques. Ne le portez pas au-delà de 80% de votre
mémoire physique. Donnez aussi de gros fichiers de logs, et un
buffer de log important.
Assurez vous que vous n'allez pas manquer d'espace : les tables
InnoDB
prennent beaucoup plus d'espace que
les tables MyISAM
. Si la commande
ALTER TABLE
manque d'espace, elle va lancer
une annulation, et cela peut prendre des heures sur un disque
plein. Durant les insertions, InnoDB
utiliser
un buffer d'insertion pour rassembler les lignes d'index
secondaires avec les index, en groupe. Cela économise beaucoup
d'accès disques. Durant l'annulation, ce mécanisme n'est pas
utilisé, et elle peut prendre jusqu'à 30 fois plus de temps.
Dans le cas d'un annulation immensément longue, si vous n'avez pas de données critiques dans votre base, il est mieux de tuer le processus, d'effacer tous les fichiers, et de recommencer, plutôt que d'attendre la fin de l'annulation. Pour la procédure complète, voyez Section 15.9.1, « Forcer la restauration ».
This is a translation of the MySQL Reference Manual that can be found at dev.mysql.com. The original Reference Manual is in English, and this translation is not necessarily as up to date as the English version.