jueves, 12 de noviembre de 2020

Usando su archivo FRM para obtener Schema y luego importar archivos idb ..

Este es un tema que, en general, nunca debería tener que hacer ... ¿Por qué? Porque creó las copias de seguridad correctamente ... Ha probado y sabe que las copias de seguridad funcionan, por lo que puede restaurar esas copias de seguridad y obtener su esquema perdido y los datos relacionados ... 

Sin embargo, esa instancia en la oficina de la esquina ... nunca llegaste a configurar ... no es tan importante ... simplemente se bloqueó y ahora te das cuenta de how lo usas realmente ... 

No todo está perdido ..  

MySQL lanzó sus utilidades de MySQL hace un tiempo y desde entonces ha sido reemplazado por MySQL Shell.  

mysqlfrm sigue siendo muy útil cuando se necesita extraer el esquema de un archivo FRM en un comando rápido y simple y es una instalación simple. 

mysqlfrm --diagnostic city.frm
# WARNING: Cannot generate character set or collation names without the --server option. # CAUTION: The diagnostic mode is a best-effort parse of the .frm file. As such, it may not identify all of the components of the table correctly. This is especially true for damaged files. It will also not read the default values for the columns and the resulting statement may not be syntactically correct.
# Reading .frm file for city.frm:
# The .frm file is a TABLE.
# CREATE TABLE Statement:

CREATE TABLE `city` (
  `ID` int(11) NOT NULL AUTO_INCREMENT,
  `Name` char(160) DEFAULT NULL,
  `CountryCode` char(12) NOT NULL,
  `District` char(80) NOT NULL,
  `Population` int(11) NOT NULL,
PRIMARY KEY `PRIMARY` (`ID`),
KEY `CountryCode` (`CountryCode`),
KEY `popkey` (`Population`)
) ENGINE=InnoDB;

#...done.


Entonces, ahora que tiene el esquema que perdió ... reconstruya la base de datos o la tabla. Por el bien del ejemplo, diré que acabamos de perder los datos de la ciudad de la base de datos mundial. 

$ cp  ciudad.ibd  / tmp /  

$ cp city.ibd /tmp/
mysql> LOCK TABLES city WRITE;
mysql> ALTER TABLE city DISCARD TABLESPACE;

cp city.ibd /edb/local/mysql/data/rundeck/
chown tmdba:dba /edb/local/mysql/data/rundeck/city.ibd

mysql> ALTER TABLE city IMPORT TABLESPACE;
mysql> UNLOCK TABLES;
mysql> SELECT COUNT(*) FROM city;