Mysql
 sql >> Database >  >> RDS >> Mysql

Ripristina la struttura della tabella dai file frm e ibd

Ho ripristinato la tabella solo da .frm e .idb file.

Ottieni la query SQL per creare le tabelle

Se conosci già lo schema delle tue tabelle, puoi saltare questo passaggio.

  1. Innanzitutto, installa MySQL Utilities .Quindi puoi usare mysqlfrm comando nel prompt dei comandi (cmd).

  2. In secondo luogo, ottieni le query SQL da .frm file usando mysqlfrm comando:

    mysqlfrm --diagnostic <path>/example_table.frm
    

Quindi puoi ottenere la query SQL per creare la stessa tabella strutturata. In questo modo:

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;

Crea le tabelle

Crea le tabelle utilizzando la query SQL precedente.

Se i vecchi dati esistono ancora, potrebbe essere necessario eliminare prima il database e le tabelle rispettivi. Assicurati di avere un backup dei file di dati.

Ripristina i dati

Esegui questa query per rimuovere i nuovi dati della tabella:

ALTER TABLE example_table DISCARD TABLESPACE;

Questo rimuove le connessioni tra il nuovo .frm file e il (nuovo, vuoto) .idb file. Inoltre, rimuovi il .idb file nella cartella.

Quindi, inserisci il vecchio .idb file nella nuova cartella, ad esempio:

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

Assicurati che il .ibd i file possono essere letti da mysql utente, ad es. eseguendo chown -R mysql:mysql *.ibd nella cartella.

Esegui questa query per importare i vecchi dati:

ALTER TABLE example_table IMPORT TABLESPACE;

Questo importa i dati da .idb file e ripristinerà i dati.