InnoDB et la réplication MySQL
<<<
Multiple tablespaces - putting each table into its own .ibd file Tables InnoDB
>>>

16.7 Créer des tables InnoDB
16 Tables InnoDB
 Manuel de Référence MySQL 4.1 : Version Française

Comment utiliser les transactions de InnoDB avec différentes API
Convertir des tables MyISAM vers InnoDB
Comment les colonnes AUTO_INCREMENT fonctionnent avec InnoDB
Contraintes de clés étrangères FOREIGN KEY
InnoDB et la réplication MySQL
->Multiple tablespaces - putting each table into its own .ibd file

16.7.6 Multiple tablespaces - putting each table into its own .ibd file

NOTE IMPORTANTE : si vous passez en version InnoDB-4.1.1 ou plus récent, il devient très difficile de retourner en versions 4.0 ou 4.1.0! Ceci est dû au fait que les versions antérieures de InnoDB ne sont pas comptatibles avec les espaces de tables multiples. Si vous devez revenir à une vieille version 4.0, vous devez faire des exports des tables, et recréer tout votre espace de tables InnoDB. Si vous n'avez pas créé de nouvelles tables sous InnoDB >= 4.1.1, et que vous devez revenir rapidement en arrière, vous pouvez passer directement en versions 4.0.18, ou plus récent. Avant de faire un retour en arrière direct en version 4.0.xx, vous devez terminer toutes les connexions, et laisser mysqld vider les buffers d'insertion, jusqu'à ce que SHOW INNODB STATUS indique que le thread principal soit dans un état de waiting for server activity . Alors, vous pouvez éteindre le serveur mysqld et démarrer votre version 4.0.18 ou plus récent. Un retour en arrière direct n'est pas recommandé, car il n'a pas été totalement testé.

Depuis MySQL-4.1.1, vous pouvez stocker chaque table InnoDB et ses index dans son propre fichier. Cette fonctionnalité est appelé espaces de tables multiples, car chaque table a son propre espace de table.

Vous pouvez activer cette fonctionnalité en utilisant la ligne

innodb_file_per_table
dans la section [mysqld] du fichier my.cnf . Alors, InnoDB va stocker chaque table dans son propre fichier tablename.ibd du dossier de données, où les tables sont stockées. C'est la même méthode que MyISAM, mais si MySQL divise les tables en un fichier de données et un fichier d'index, tablename.MYD et tablename.MYI , InnoDB place les données et les index dans le même fichier .ibd .

Si vous supprimez la ligne innodb_file_per_table du fichier my.cnf , alors InnoDB créera les tables dans le fichier ibdata . Les vieilles tables que vous aviez dans le fichier ibdata avant la mise à jour en >= 4.1.1 resteront en place, ils ne seront pas convertis en fichiers .ibd .

InnoDB a toujours besoin du système d'espace de tables, les fichiers .ibd ne sont pas suffisants. Le système d'espaces de table est constitué des fichiers classiques ibdata . InnoDB y place son dictionnaire de données interne, et ses historiques d'annulation.

Vous NE POUVEZ PAS DƒPLACER les fichiers .ibd à volonté , comme vous pouvez le faire avec les tables MyISAM. Ceci est dû au fait que les définitions de tables sont stockées dans le système d'espace de tables InnoDB, et aussi, parceque InnoDB doit préserver la cohérence des identifiants de transactions et les numéros de séquence des logs.

Vous pouvez déplacer le fichier .ibd et la table associée d'une base à l'autre (dans la même installation MySQL/InnoDB) avec la classique commande RENAME :

RENAME TABLE olddatabasename.tablename TO newdatabasename.tablename;
Si vous avez une sauvegarde du fichier .ibd issue de la même installation MySQL/InnoDB, vous pouvez restaurer la base InnoDB avec les commandes suivantes : the commands:

ALTER TABLE tablename DISCARD TABLESPACE; /* ATTENTION : efface la base courante! */
<remettez le fichier de sauvegarde en place .ibd>
ALTER TABLE tablename IMPORT TABLESPACE;
'propre', dans ce contexte, signifie :
  • Il n'y a pas de modifications non validées par des transactions dans le fichier .ibd file.
  • Il n'y a pas de buffer d'insertion non intégrés dans le fichier .ibd .
  • La purge a supprimé toutes les lignes marquées pour l'effacement dans le fichier .ibd .
  • mysqld a envoyé toute les pages modifiées au fichier .ibd depuis le buffer de fichier.
Vous pouvez faire une sauvegarde propre du fichier .ibd en suivant la méthode :
  • Cessez toute activité sur le serveur mysqld et validez toutes les transactions.
  • Attendez que SHOW INNODB STATUS\G indique qu'il n'y a plus de transaction active dans la base, et que le thread principal de InnoDB est dans l'état Waiting for server activity . Vous pouvez alors faire une copie du fichier .ibd .
Une autre méthode (non libre) de faire une sauvegarde propre du fichier .ibd est de :
  • Utilisez InnoDB Hot Backup pour faire une sauvegarde de votre installation InnoDB.
  • Lancez un second serveur mysqld sur le backup, et laissez le nettoyer les fichiers .ibd du backup.

La liste de tâche include la possibilité de déplacer les fichiers .ibd vers une autre installation MySQL/InnoDB. Cela impose la remise à zéro des numéros de transactions et des séquences de fichiers de log du fichier .ibd .

<< Multiple tablespaces - putting each table into its own .ibd file >>
InnoDB et la réplication MySQL Créer des tables InnoDB Tables InnoDB