Voici pourquoi MySQL ne peut pas voir ces fichiers: L'espace disque logique système (ibdata1) possède un dictionnaire de données spécifique au moteur de stockage qui permet à InnoDB de cartographier l'utilisation potentielle de la table:
Le déplacement des tables InnoDB d'un endroit à un autre nécessite des commandes telles que
ALTER TABLE tblname DISCARD TABLESPACE;
ALTER TABLE tblname IMPORT TABLESPACE;
Voici une partie de la documentation MySQL 5.5 expliquant ce qui doit être pris en compte
Considérations de portabilité pour les fichiers .ibd
Vous ne pouvez pas déplacer librement les fichiers .ibd entre les répertoires de base de données comme vous pouvez le faire avec les fichiers de table MyISAM. La définition de table stockée dans l'espace de table partagé InnoDB inclut le nom de la base de données. Les ID de transaction et les numéros de séquence de journal stockés dans les fichiers d'espace disque logique diffèrent également entre les bases de données.
Pour déplacer un fichier .ibd et la table associée d'une base de données vers une autre, utilisez une instruction RENAME TABLE:
RENAME TABLE db1.tbl_name TO db2.tbl_name; Si vous avez une sauvegarde «propre» d'un fichier .ibd, vous pouvez le restaurer dans l'installation MySQL d'où il provient comme suit:
La table ne doit pas avoir été supprimée ou tronquée depuis que vous avez copié le fichier .ibd, car cela modifie l'ID de table stocké dans l'espace disque logique.
Émettez cette instruction ALTER TABLE pour supprimer le fichier .ibd actuel:
ALTER TABLE tbl_name DISCARD TABLESPACE; Copiez le fichier .ibd de sauvegarde dans le répertoire de base de données approprié.
Émettez cette instruction ALTER TABLE pour indiquer à InnoDB d'utiliser le nouveau fichier .ibd pour la table:
ALTER TABLE tbl_name IMPORT TABLESPACE; Dans ce contexte, une sauvegarde de fichier .ibd «propre» est une sauvegarde pour laquelle les conditions suivantes sont remplies:
Il n'y a aucune modification non validée par des transactions dans le fichier .ibd.
Il n'y a aucune entrée de tampon d'insertion non fusionnée dans le fichier .ibd.
La purge a supprimé tous les enregistrements d'index marqués comme supprimés du fichier .ibd.
mysqld a vidé toutes les pages modifiées du fichier .ibd du pool de tampons dans le fichier.
Compte tenu de ces mises en garde et protocoles, voici un plan d'action suggéré
Pour cet exemple, essayons de restaurer la tags
table dans la mydb
base de données
ÉTAPE 1
Assurez-vous d'avoir des sauvegardes de ceux-ci .frm
et des .ibd
fichiers dans/tmp/innodb_data
ÉTAPE 2
Obtenez l' CREATE TABLE tags
instruction et exécutez-la en tant que CREATE TABLE mydb.tags ...
. Assurez-vous que c'est exactement la même structure que l'originaltags.frm
ÉTAPE 3
Supprimer le vide en tags.ibd
utilisant MySQL
ALTER TABLE mydb.tags DISCARD TABLESPACE;
ÉTAPE 4
Apportez la copie de sauvegarde de tags.ibd
cd /var/lib/mysql/mydb
cp /tmp/innodb_data.tags.ibd .
chown mysql:mysql tags.ibd
ÉTAPE # 5
Ajouter une tags
table au dictionnaire de données InnoDB
ALTER TABLE mydb.tags IMPORT TABLESPACE;
ÉTAPE 6
Testez l'accessibilité de la table
SHOW CREATE TABLE mydb.tags\G
SELECT * FROM mydb.tags LIMIT 10;
Si vous obtenez des résultats normaux, félicitations pour l'importation d'une table InnoDB.
ÉTAPE 7
À l'avenir, veuillez ne pas supprimer ibdata1 et ses journaux
Essaie !!!
J'ai discuté de choses comme ça avant
CAVEAT
Et si vous ne connaissez pas la structure de la table du tags
?
Il existe des outils pour obtenir l'instruction CREATE TABLE en utilisant simplement le .frm
fichier. J'ai également écrit un article à ce sujet: Comment extraire le schéma de table à partir du fichier .frm? . Dans ce post, j'ai copié un fichier .frm sur une machine Windows à partir d'une boîte Linux, j'ai exécuté l'outil Windows et obtenu la CREATE TABLE
déclaration.