IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Administration MySQL Discussion :

Recup base InnoDB impossible ?


Sujet :

Administration MySQL

  1. #1
    Membre expérimenté
    Avatar de yotta
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Septembre 2006
    Messages
    1 088
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2006
    Messages : 1 088
    Points : 1 540
    Points
    1 540
    Par défaut Recup base InnoDB impossible ?
    Bonjour,

    Je me permets de solliciter votre aide face à un problème de récupération d'une base de données InnodB.
    Voilà le contexte :
    Un ami à moi faisait tourner sur un de ses vieux serveurs Linux Ubuntu un serveur MySQL. Puis il a utilisé ce dernier pour héberger la base de données de son CMS Drupal hébergé lui sur une autre machine.
    Tout fonctionnait très bien.
    Malheureusement, trop confiant, mon ami n'a jamais réalisé le moindre Dump ni la moindre sauvegarde de ses bases MySQL. Finalement, est arrivé ce qui devait arriver, son vieux serveur hébergeant son MySQL a craché...
    Dans son malheur, il a eu de la chance, ce dernier était constitué de deux disques, un dédié au système, l'autre aux données, et c'est uniquement le disque système qui a lâché. Le disque avec les données qui contient son arborescence /var/lib/mysql complète est intacte, et nous avons pu en extraire sans difficulté le dossier /var/lib/mysql qui contient ses trois fichiers ibdata1, ib_logfile0 et ib_logfile1 ainsi que le dossier contenant tous ses fichiesr .frm et .ibd ainsi que le fichier db.opt.
    Bref, je me suis dit, cela ne devrait pas être bien compliqué à récupérer...

    J'ai tout essayé, sur le net, on trouve tout et son contraire, mais quoi que je fasse, j'obtiens systématiquement l'erreur : #1146 table doesn't exist dés que je tente d'agir sur une des tables de la base restaurée.

    Comment j'ai procédé :
    J'ai créé une machine virtuelle sous Ubuntu 14.04 en mode LAMP. Puis, après m'être assuré de mes accès et des fonctionnalités du duo mysql-phpmyadmin j'ai ouvert un shell sur la machine virtuelle. Je me suis déplacé dans le dossier /var/lib/mysql, puis j'ai stoppé MySQL ("service mysql stop"). Ensuite, j'ai mis de côté les trois fichiers ibdata1, ib_logfile0 et ib_logfile1 présents sur une installation fraîche vierge de toute base ajoutée. J'ai copié à leur place, les trois fichierrs récupérés, et j'ai pris soin de définir les attributs des fichiers (rw-rw----, mysql, mysql). Ensuite, (j'avais la base vide avec phpmyadmin juste avant d'arrêter mysql) je suis entré dans le dossier de la base à restaurer, puis j'y ai copié tous les fichiers .frm, .ibd et le fichier db.opt. Là aussi j'ai pris soin de redéfinir correctement les attributs des fichiers. Pour finir, j'ai démarré le serveur mysql. Ce dernier a démarré sans problème. Je me suis rendu sur phpmyadmin, et là, bingo, je vois ma base de données restaurée, et lorsque je déploie cette dernière, je vois toutes ses tables. Seulement voilà, dés que je veux voir une table, sa structure ou son contenu, j'obtiens ce message d'erreur, #1146 table doesn't exist....

    J'ai alors pris mon courage à deux mains et j'ai fouillé sur le net concernant ce code erreur. Impossible de comprendre ce qu'il signifie exactement. De toute évidence, il manque quelque part des données, mais ce n'est pas dans les tables de phpmyadmin, en effet, j'ai le même résultat en locale dans le client mysql. Au passage j'ai essayé tous les outils CHECK TABLE, REPAIR TABLE, etc, pour n'avoir pour seul résultat ce code erreur....

    J'ai alors fait un dernier test. Sur un autre serveur MySQL, strictement identique en terme de version que celui de la machine virtuelle utilisée ici, j'ai créé une base bidon avec une seule table de deux colonnes et un seule enregistrement contenu.
    Et j'ai essayé de "restaurer" les fichiers de cette base dans l'autre serveur. C'est tout simplement impossible.....
    Ce que je remarque au final, c'est que quel que soient les fichiers ibdata1 et ib_logfile en place, le résultat est le même. Si on conserve les fichiers d'origine, en se contentant d'intégrer les .frm, .ibd et .opt, même résultat. La base est visible, les tables s'affichent, mais aucune n'est accessible avec toujours le même code erreur.

    Existe t-'il un moyen de restaurer une base de données MySQL InnoDB à partir des fichiers d'une base ?
    Et si oui, comment ?

  2. #2
    Membre expérimenté
    Avatar de yotta
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Septembre 2006
    Messages
    1 088
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2006
    Messages : 1 088
    Points : 1 540
    Points
    1 540
    Par défaut Pas de réponses ?
    Bonjour,

    Après m'être relu, je me rends compte que je ne donne pas vraiment envie de me répondre. Désolé si le ton vous a semblé agressif, c'est que j'ai passé beaucoup de temps sur ce problème, persuadé qu'avec tous ces fichiers, ce serait simple.
    Mais la question reste ouverte, je me permet de la reformuler :

    Existe t'il un moyen de restaurer une base de données MySQL InnoDB uniquement à partir de ses trois fichiers ibdata1, ib_logfile0, ib_logfile1 ainsi que le dossier de la base de données avec tout son contenu, fichiers .frm, .ibd et .opt ?

    Merci à vous.

  3. #3
    Expert éminent sénior Avatar de Artemus24
    Homme Profil pro
    Agent secret au service du président Ulysses S. Grant !
    Inscrit en
    Février 2011
    Messages
    6 462
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Agent secret au service du président Ulysses S. Grant !
    Secteur : Finance

    Informations forums :
    Inscription : Février 2011
    Messages : 6 462
    Points : 19 449
    Points
    19 449
    Par défaut
    Salut yotta.

    Citation Envoyé par yotta
    Un ami à moi faisait tourner sur un de ses vieux serveurs Linux Ubuntu un serveur MySQL.
    Votre ami, c'est vous, n'est-ce pas !

    Citation Envoyé par yotta
    Bref, je me suis dit, cela ne devrait pas être bien compliqué à récupérer...
    Tout dépend si vous avez écrasé ou pas les fichiers : ibdata1, ib_logfile0 et ib_logfile1.

    Citation Envoyé par yotta
    j'obtiens systématiquement l'erreur : #1146 table doesn't exist
    De toute évidence, vous avez écrasé ce qu'il ne fallait surtout pas faire.

    Citation Envoyé par yotta
    Existe t'il un moyen de restaurer une base de données MySQL InnoDB uniquement à partir de ses trois fichiers ibdata1, ib_logfile0, ib_logfile1 ainsi que le dossier de la base de données avec tout son contenu, fichiers .frm, .ibd et .opt ?
    Je vais faire court : non !

    J'ai déjà étudié le problème et si vous avez altéré les fichiers ibdata1, ib_logfile0 et ib_logfile1, vous ne pouvez rien faire.
    Voire mon sujet sur Ibdata1. Le lien se trouve en bas de ce message.

    @+

  4. #4
    Membre expérimenté
    Avatar de yotta
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Septembre 2006
    Messages
    1 088
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2006
    Messages : 1 088
    Points : 1 540
    Points
    1 540
    Par défaut Merci pour la réponse
    Bonsoir,
    Merci pour la réponse. c'est un peu ce que je craignais. Pour ce qui est du dédouanement par un ami imaginaire, ce n'est pas le cas. Il s'agit bien d'un soucis qui c'est produit sur le serveur d'un ami. Pour ma part, je ne m'embête pas avec ces fichiers mes bases sont répliquées et régulièrement sauvegardées.
    Je vais donc indiqué ce post comme résolu.

    Cordialement,

  5. #5
    Expert éminent sénior Avatar de Artemus24
    Homme Profil pro
    Agent secret au service du président Ulysses S. Grant !
    Inscrit en
    Février 2011
    Messages
    6 462
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Agent secret au service du président Ulysses S. Grant !
    Secteur : Finance

    Informations forums :
    Inscription : Février 2011
    Messages : 6 462
    Points : 19 449
    Points
    19 449
    Par défaut
    Salut Yotta.

    Dans le cas du moteur "InnoDB", MySql se sert du fichier "ibdata1" et les autres log, pour y mettre des caractéristiques spécifiques.
    A vrai, je ne sais pas du tout ce qui s'y trouve dedans.

    Il est initialisé lors de la création de la table ou lors d'un restauration.
    Donc si au préalable, tu as fait une sauvegarde de ta base, tu peux détruire ces fichiers et laisser MySql les reconstruire.
    Puis ensuite, faire la restauration de ta base de données.

    Tu n'es pas le premier qui pose cette question. Je m'y suis intéressé pour trouver une solution, mais sans succès.
    D'où ma recommandation de faire régulièrement des sauvegardes de sa base de données pour éviter ce genre de désagrément.

    @+

  6. #6
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 897
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 897
    Points : 53 135
    Points
    53 135
    Billets dans le blog
    6
    Par défaut
    Citation Envoyé par yotta Voir le message
    Existe t-'il un moyen de restaurer une base de données MySQL InnoDB à partir des fichiers d'une base ?
    Et si oui, comment ?
    C'est l'un des principal défaut de MySQmerde qui est incapable de faire des sauvegardes proprement. Pas possible par des copies de fichier ni sauvegarde binaires à chaud, sauf à acheter le module Oracle pour ce faire et donc passer votre base MySQL en version Enterprise (comptez plusieurs dizaines de milliers d'euros....)
    https://www.mysql.fr/products/enterprise/backup.html

    La seule chose que vous pouvez faire avec la version gratuite c'est un "dump" (script SQL de création des objets et insertion des lignes) mais ceci doit être fait impérativement à froid sinon l'intégrité de la base peut être violée...

    Ce qui me fait dire que la version soit disant "free" de MySQmerde est inexploitable de manière professionnelle et à termes, coûte beaucoup plus cher que les outils concurrents comme SQL Server ! (en sus d'être très pauvre en fonctionnalités).

    A +

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Creation de ma base SQL impossible sous Linux Ubuntu
    Par kalisteboat dans le forum Langage SQL
    Réponses: 1
    Dernier message: 15/03/2008, 13h10
  2. Création de base : liaison impossible
    Par morgan4 dans le forum Modélisation
    Réponses: 2
    Dernier message: 10/09/2007, 16h27
  3. Probleme d'import en base InnoDB
    Par SYL_DBA dans le forum Outils
    Réponses: 5
    Dernier message: 26/03/2007, 15h16
  4. Base plantée impossible à supprimer
    Par asticot7 dans le forum Access
    Réponses: 5
    Dernier message: 29/08/2006, 18h59
  5. 1 base InnoDB et 1 base MyISAM pour recherche fulltext
    Par babarincairo dans le forum SQL Procédural
    Réponses: 2
    Dernier message: 23/06/2006, 09h25

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo