Maison  >  Questions et réponses  >  le corps du texte

Restaurer la structure de la table à partir des fichiers frm et ibd

J'essaie de restaurer la base de données dans PMA mais je ne peux accéder qu'aux fichiers frm et ibd - pas au fichier ib_log dont je comprends que vous avez besoin.

Je sais que je ne pourrai peut-être pas récupérer les données de la base de données, mais est-il possible de récupérer la structure de la table à partir du fichier frm ?

P粉637866931P粉637866931366 Il y a quelques jours663

répondre à tous(2)je répondrai

  • P粉043566314

    P粉0435663142023-10-20 00:08:59

    InnoDB nécessite le fichier ib_log pour la récupération des données, mais il nécessite également le fichier ibdata1, qui contient le dictionnaire de données et parfois les données en attente pour la table.

    Le dictionnaire de données est un système répétitif qui enregistre la structure d'une table et fait correspondre l'ID de la table au fichier physique .ibd contenant les données de la table.

    Vous ne pouvez pas déplacer un fichier .ibd sans un dictionnaire de données InnoDB, et le dictionnaire de données doit correspondre à l'ID de table trouvé dans le fichier .ibd. Vous pouvezrattacher le fichier .ibd et récupérer les données, mais le processus n'est pas pour les âmes sensibles. Veuillez vous référer à http://www.chriscalender.com/recover table innodb à partir du fichier ibd uniquement/

    Vous pouvez restaurer les structures avec quelques astuces de fichiers en utilisant des fichiers .frm, mais vous ne pouvez pas les créer en tant que tables InnoDB en premier lieu. Voici un blog qui explique comment restaurer des fichiers .frm vers des tables MyISAM :

    http://www.percona.com/blog/2008/12/17/recovering-create-table-statement-from-frm-file/" percona.com/blog/2008/12/17/recovering-create- instruction-de-table-du-fichier-frm/

    Vous ne pourrez pas utiliser PMA pour cela. Vous avez besoin d'un accès superutilisateur au répertoire de données sur le serveur.

    répondre
    0
  • P粉569205478

    P粉5692054782023-10-20 00:04:57

    J'ai restauré la table à partir de .frm.idb fichiers uniquement.

    Récupérez la requête SQL utilisée pour créer la table

    Si vous connaissez déjà le schéma du tableau, vous pouvez sauter cette étape.

    1. Tout d'abord, installez l'Utilitaire MySQL. Vous pouvez ensuite utiliser la commande mysqlfrm dans l'invite de commande (cmd).

    2. Deuxièmement, utilisez la commande mysqlfrm 命令从 .frm pour obtenir la requête SQL à partir du fichier .frm :

      mysqlfrm --diagnostic <path>/example_table.frm

    Vous pouvez ensuite obtenir la requête SQL pour créer la même table structurée. Comme ça :

    CREATE TABLE `example_table` (
      `id` int(11) NOT NULL AUTO_INCREMENT,
      `username` varchar(150) NOT NULL,
      `photo_url` varchar(150) NOT NULL,
      `password` varchar(600) NOT NULL,
      `active` smallint(6) NOT NULL,
      `plan` int(11) NOT NULL,
    PRIMARY KEY `PRIMARY` (`id`)
    ) ENGINE=InnoDB;

    Créer une table

    Créez la table à l'aide de la requête SQL ci-dessus.

    Si d'anciennes données existent toujours, vous devrez peut-être d'abord supprimer la base de données et les tables correspondantes. Assurez-vous d'avoir une sauvegarde de vos fichiers de données.

    Récupérer des données

    Exécutez cette requête pour supprimer les nouvelles données de la table :

    ALTER TABLE example_table DISCARD TABLESPACE;

    Cela supprimera le nouveau fichier .frm 文件和(新的、空的).idb 文件之间的连接。另外,删除文件夹中的 .idb.

    Ensuite, placez les anciens .idb fichiers dans le nouveau dossier, par exemple :

    cp backup/example_table.ibd <path>/example_table.idb

    Assurez-vous .ibd 文件可以被 mysql 用户读取,例如通过在文件夹中运行 chown -R mysql:mysql *.ibd.

    Exécutez cette requête pour importer d'anciennes données :

    ALTER TABLE example_table IMPORT TABLESPACE;

    Cela importera les données du fichier .idb et restaurera les données.

    répondre
    0
  • Annulerrépondre