Récupère des tables MySQL quand seulement le fichiers .frm et ibd sont disponibles

Comment résoudre “Erreur MySQL #1146 -Table n’existe pas” causée par le déplacement des fichiers .IDB (InnoDB) directement entre les répertoires (tablespace).

logo_mysql

Problème

Nombreux problèmes que nous avons sont des problèmes, que nous avons créé. J’avais juste mis en place un Site utilisant WordPress et pensée: Que diriez-vous de voir comment cela fonctionne en PHP 7? Bien, comme mon WampServer utilisé PHP 5.6, J’ai donc dû “heureux” idée pour améliorer la WampServer 2.5 (Apache-2.4.9, MySQL-5.6.17, PHP 5.5.12) à WampServer 3.0.6 (Apache 2.4.23, MySQL 5.7.14, 5.6.25 PHP et Php 7.0.10).

Bien sûr, Démarré par sauvegarde, mais mon grand glissement était choisir de ne pas exporter SQL à partir de ces sites, Au lieu de cela, vient de faire une copie des fichiers MySQL (Données/MySQL) et l’application (site/www). J’étais convaincu que ça marcherait, comme les autres fois.

Après avoir installé le nouveau WampServer avec PHP 7, mettre les fichiers de sauvegarde et à l’arrière de l’application, seulement quand je suis allé tester par le navigateur, n’a pas montré le site, mais l’écran d’installation de WordPress comme s’il s’agissait d’un nouveau Site. Gelé! Ouvrir PHPMyAdmin et vérifier pour voir si la base de données était Ok et j’ai vu que, Bien que figurant dans la base de données, Lorsque vous avez cliqué sur le dessus de la table pour afficher les données du message d’erreur suivant:

  MySQL Erreur #1146 -Table <NOM_TABLE> doesn ' t existent

J’ai cherché et je viens de découvrir que vous ne pouvez copier ou déplacer les fichiers directement vers un autre répertoire de MySQL MySQL si les fichiers sont de type MyISAM, ceux qui ont l’extension de fichier frm. MYD. MYI. Je ne sais pas ce qui s’est passé, mais ma base de données est apparue comme InnoDB (.frm et BID). Malheureusement, seulement après le fait que MySQL a alerté documentation:

  Vous ne pouvez pas librement déplacer .MICI de fichiers entre les répertoires de base de données comme vous pouvez avec les fichiers de table MyISAM. 
  La définition de la table stockée dans l’espace de table InnoDB partagé inclut le nom de la base de données. 
  L’ID de transaction et Journal les numéros de séquence stockés dans les fichiers du tablespace diffèrent également entre les bases de données.

Solution

Cheguei un ver algumas soluções simples, Mas vou descrever aqui une única que realmente funcionou para mim, apesar de parecer bem mais complexa, encontrada aucun poste “Restauration de table(s) dans la base de données MySQL lorsque les fichiers frm ou ibd sont disponibles uniquement“.

Antes, Cependant, un título de conhecimento, Vale lembrar que em relação ao tipo InnoDB, MySQL de votre structure de garde dans les fichiers et les données dans les MICI .frm.. Assez de théorie, Nous allons couper à la chasse!

Étape 1: Recréer la structure des fichiers .frm

Comme l’a dit, la frm contient la structure de votre table. Tout d’abord, nous avons besoin de récupérer cette structure pour ensuite remplir les données. Vous pouvez le faire 3 différentes méthodes décrites ci-dessous, mais avant, Permettez-moi de vous dire quelque chose sur le “Utilitaires MySQL”.

Utilitaires MySQL | mysqlfrm

Si vous ne souhaitez pas utiliser la première méthode proposée (En ligne) Si vous devez utiliser l’outil “mysqlfrm” fournies par le “Utilitaires MySQL“.

Cet outil pour extraire la structure de données et générer la script SQL de création de table. Pour cela, Télécharger “Utilitaires MySQL” (quelque chose comme mysql-utilitaires-1.6.4-winx64.msi) et l’installer.

Ouvrez la console (Commande / De la) et utilisez la commande CD pour déplacer le répertoire d’installation par défaut (quelque chose comme C:\C:Program FilesMySQLMySQL utilitaires 1.6\). Notez qu’il y a dans ce répertoire le fichier exécutable mysqlfrm.exe.

  CD "C:\C:Program FilesMySQLMySQL Utilities 1.6"

Choisissez seulement une des méthodes ci-dessous pour extraire votre structure de table figurant dans les fichiers .frm:

1º Méthode | En ligne

1. Allez sur le site HTTPS://Recovery.twindb.com/;
2. Cliquez sur le menu “Récupérer la Structure” puis, en “FRM, dossier.“;
3. Cliquez sur le bouton “Navigateur…” et sélectionnez votre fichier frm; et
4. Cliquez sur le bouton “Télécharger” et le script de création de tableau s’affichera sur l’écran.

Il est possible d’envoyer plusieurs fichiers frm, générant une fois un script unique avec toutes les tables. Juste pour vous permettre de créer un fichier zip avec toutes ses .frm avant “Navigateur/Upload”.

2º Méthode | À l’aide –diagnostic

/* Exemple générique */
   mysqlfrm-diagnostic "<source/chemin>/MyTable.frm" > "<Destination/Path/recovered_mytable.SQL>"
 
/* Exemple en pratique avec la table wp_posts.frm de la WordPress */
   mysqlfrm --diagnostic "C:\wampbinmysqlmysql5.6.17datameubancowp_posts.frm" > "C:\recovered_wp_posts.SQL"

3º Méthode | À l’aide –Serveur

/* Exemple générique */
  mysqlfrm-serveur=racine:monmotdepasse@localhost-port=3311 "<source/chemin>/MyTable.frm" > "<chemin de destination />/recovered_mytable.SQL"
 
/* Exemple en pratique avec la table wp_posts.frm de la WordPress */
  mysqlfrm --Serveur=racine@localhost --port=3307 ""(C):\wampbinMySQL\MySQL5.6.17\datameubancowp_posts.FRM" > "(C):\recovered_wp_posts.SQL"

N’utilisez pas le port MySQL! Choisissez une autre disposition. Notez que la commande redirige la sortie vers un fichier .SQL qui est enregistré dans le chemin d’accès spécifié (dans le cas, (C):).

Étape 2: Recréez la table dans votre base de données

Dans une nouvelle base de données, Créez une table avec le script généré à l’étape 1. Personnellement, j’ai installé une version de WampServer et utilisé PHPMyAdmin (http://localhost/phpmyadmin /) pour créer la base de données et importer le script SQL créé à l’étape 1 (recovered_wp_posts.SQL). Ce script va créer 2 fichiers dans le répertoire de votre base de données MySQL:

  SUA_TABELA.FRM SUA_TABELA.BID

Dans mon cas, Ces fichiers ont été créés en (C):\wamp64binmysqlmysql5.7.14data<mon siège>. IE, Rechercher votre installation MySQL et remarque que, dans le répertoire Date Il y aura votre base de données et les deux fichiers mentionnés.

Étape 3: Supprimer le nouveau fichier .IDB

Pour supprimer le nouveau fichier .IDB, Exécutez la commande SQL suivante:

/* Exemple générique */
  ALTER TABLE mytable jeter TABLESPACE;
 
/* Exemple en pratique avec la table wp_posts de WordPress */
  ALTER TABLE wp_posts jeter TABLESPACE;

Cette commande supprime le lien entre la table et le tablespace (Où sont stockés physiquement les fichiers de base de données), et supprimez le fichier .IDB.

Étape 4: Copiez le fichier .IDB vieux

Le fichier .IDB original (le qui contient les données) doit être copié à l’endroit qui a été supprimé à l’étape .IDB 3. Utilisez Ctrl + C et Ctrl + V ou tuer vous-même à l’aide de la ligne de commande.

Étape 5: Réactiver la table

Le lien rompu à l’étape 3 doit être restauré avec la commande suivante:

/* Exemple générique */
  ALTER TABLE mytable importation TABLESPACE;
 
/* Exemple en pratique avec la table wp_posts de WordPress */
  ALTER TABLE wp_posts importation TABLESPACE;

Ne vous inquiétez pas si vous recevez des avertissements, Cependant, Il pourrait être le dysfonctionnement général qui apparaît l’erreur suivante:

  #1808 - Incompatibilité de schéma (Table a format de ligne ROW_TYPE_DYNAMIC, .Fichier de l’EIA a format de ligne ROW_TYPE_COMPACT.)

Dans ce cas, Cela s’est passé à différemment de mysql 5.7.14 (Nouveau) crée une table par défaut par rapport à Mysql-5.6.17 (VIEUX), sans la ROW_FORMAT = compact.

Alors, Si vous utilisez MySQL > = mysql 5.7.14, tout que vous devez faire est d’ajouter ROW_FORMAT = compact dans la définition de création de table.

  CREATE TABLE « wp_posts » (. . .) MOTEUR=ROW_FORMAT InnoDB=Compact

Autres erreurs

Juste pour mémoire, avant d’avoir réussi à extraire les données de. frm, J’ai eu quelques erreurs:

  # Source sur localhost: ... relié.
  # Démarrage du serveur pondu sur le port 3304 ... ERREUR en essayant d’arrêter n’a pas engendré de serveur.  Id de processus = 6648.
  ERREUR: Frayer le fonctionnement du serveur a échoué. Erreur de serveur de clone: Incapable de communiquer avec Nouveau instance. Id de processus = 6648.. Pour diagnostiquer, Réexécutez l’utilitaire et utilisation le --option de verbosité pour afficher les messages du serveur ayant frayé et corriger d’éventuelles erreurs présenté puis réexécuter l’utilitaire.
  SUCCÈS: Le processus de PID 6648 (processus enfant du PID 7264) a pris fin.
Retraçage (plus récent appeler dernière):
  Fichier "G:\adebuildsb_0-19921351-1470074463.97Python-2.7.6-Windows-x86-64bitlibsite-packagescx_FreezeinitscriptsConsole.py", ligne 27, dans <module>
  Fichier "scripts\mysqlfrm.py", ligne 422, dans <module>
  Fichier ".\mysql\utilities\command\read_frm.py", ligne 439, dans read_frm_files
  Fichier ".\mysql\utilities\command\read_frm.py", ligne 166, dans _spawn_server
  Fichier ".\mysql\utilities\command\serverclone.py", ligne 180, dans clone_server
  Fichier ".\mysql\utilities\common\tools.py", ligne 273, en get_mysqld_version IOError: [Errno 13] Autorisation refusée: « version_check »

Dans le cas spécifique de WordPress, vous devez supprimer le script qui a généré le code SQL généré sous. frm, par défaut toutes les entrées ‘0000-00-00 00:00:00’, dans le cas contraire, intercepte l’erreur:

  #1067 - Valeur par défaut (par défaut) non valide pour « comment_date »

Qui!

Fontes

http://www.voxteneo.com/restoring-tables-mysql-database-frm-ibd-files-available/

https://medium.com/@alexquick/transporting-mysql-tablespaces-from-5-6-to-5-7-517c01345fbb#.72zermd8b

http://dev.mysql.com/doc/refman/5.5/en/innodb-multiple-tablespaces.html

https://lanmenezesbr.wordpress.com/2014/10/21/mysql-erro-1146-table-doesnt-exist/

http://stackoverflow.com/questions/7759170/mysql-table-doesnt-exist-but-it-does-or-it-should

Totales hits: 21481

12 Commentaires sur “Récupère des tables MySQL quand seulement le fichiers .frm et ibd sont disponibles

  1. Rodrigo a dit:

    Quoi faire quand vous voyez le message d’erreur suivant: #1815 – Erreur interne. Ne peut pas réinitialiser les numéros LSN dans tableau “mon siège”.”myTable”: Altération de structure de données.
    Je peux courir les insertions de données manuellement? Como fazer isso?
    Desde já te agradeço.

  2. Cristian U a dit:

    Salut Taylor,

    Comment résoudre cette erreur:
    ERREUR: Frayer le fonctionnement du serveur a échoué. Erreur de serveur de clone: Incapable de communiquer avec la nouvelle instance. Id de processus = 6648.. Pour diagnostiquer, Réexécutez l’utilitaire et utiliser le –option de verbosité pour afficher les messages du serveur ayant frayé et corriger d’éventuelles erreurs présenté puis réexécuter l’utilitaire.
    SUCCÈS: Le processus de PID 6648 (processus enfant du PID 7264) a pris fin.

    J’ai reçu le même message et j’ai don t sais comment ´ pour le résoudre.

    Merci

  3. Reginaldo Luiz de Freitas a dit:

    Parabéns Taylor, Mas didático impossível!! vous êtes le même gars!

    Hug et Merci de partager votre expérience!

Laisser une réponse

Votre adresse email ne sera pas publié. Les champs obligatoires sont marqués avec *