Cómo recuperar la base de datos MySQL de archivos .myd, .myi, .frm


183

Cómo restaurar una de mis bases de datos MySQL de .myd, .myi, .frmarchivos?


10
Aunque respondí esto, realmente pertenece a Serverfault.
derobert

31
@chandrajeet realmente deberías aceptar la respuesta más votada.
Torre

2
Hola Chandrajeet, ¿por qué no aceptas la respuesta de Derobert? Confirmo que también funciona para mí. ¿No es para ti? stackoverflow.com/help/someone-answers
Taz

Respuestas:


173

Si se trata de tablas MyISAM, entonces colocar los archivos .FRM, .MYD y .MYI en un directorio de base de datos (por ejemplo, /var/lib/mysql/dbname) hará que esa tabla esté disponible. No tiene que ser la misma base de datos de donde provienen, el mismo servidor, la misma versión de MySQL o la misma arquitectura. También es posible que deba cambiar la propiedad de la carpeta (por ejemplo, chown -R mysql:mysql /var/lib/mysql/dbname)

Tenga en cuenta que los permisos ( GRANT, etc.) son parte de la mysqlbase de datos. Entonces no serán restaurados junto con las mesas; Es posible que deba ejecutar las GRANTdeclaraciones apropiadas para crear usuarios, dar acceso, etc. ( mysqlEs posible restaurar la base de datos, pero debe tener cuidado con las versiones de MySQL y cualquier ejecución necesaria de la mysql_upgradeutilidad).

En realidad, probablemente solo necesite .FRM (estructura de tabla) y .MYD (datos de tabla), pero tendrá que reparar la tabla para reconstruir .MYI (índices).

La única restricción es que si está bajando de categoría, será mejor que revise las notas de la versión (y probablemente ejecute la tabla de reparación). Las versiones más recientes de MySQL agregan características, por supuesto.

[Aunque debería ser obvio, si combina y combina tablas, la integridad de las relaciones entre esas tablas es su problema; A MySQL no le importará, pero su aplicación y sus usuarios sí. Además, este método no funciona en absoluto para las tablas InnoDB. Solo MyISAM, pero considerando los archivos que tienes, tienes MyISAM]


¿Funcionaría esto realmente sin agregar las entradas apropiadas a la tabla information_schema? Quiero decir que MySQL necesita saber para buscar estos archivos, ¿verdad?
Zenshai

44
Las tablas de información_esquema en realidad no existen, solo son vistas en el estado interno de la base de datos. Ver dev.mysql.com/doc/refman/5.0/en/information-schema.html
brian-brazil

44
Wow, me sentí sucio, pero dejar caer todo el directorio de lo que creo que era una instalación de MySQL4 en mi MySQL5.1 simplemente recreó mágicamente las tablas. Sin reinicio ni nada (en Windows).
Dave

44
Funciona, solo debe recordar ejecutar (para cada tabla): check table sometable; y luego ejecutar la reparación (solo si es necesario): repair table sometable;
Nux

3
Esto funcionó muy bien! Había puesto los archivos en su lugar, pero mysql no los estaba "viendo" hasta que cambié la propiedad a "mysql: mysql".
sean.boyer

26

Tenga en cuenta que si desea reconstruir el archivo MYI, el uso correcto de REPAIR TABLE es:

TABLA DE REPARACIÓN sometable USE_FRM;

De lo contrario, probablemente obtendrá otro error.


24

Acabo de descubrir una solución para esto. Estoy usando MySQL 5.1 o 5.6 en Windows 7.

  1. Copie el archivo .frm e ibdata1 del archivo anterior que se encontraba en "C: \ Datos de programa \ MySQL \ MSQLServer5.1 \ Data"
  2. Detenga la instancia del servidor SQL en la instancia SQL actual
  3. Vaya a la carpeta de datos ubicada en "C: \ Datos de programa \ MySQL \ MSQLServer5.1 \ Data"
  4. Pegue el ibdata1 y la carpeta de su base de datos que contiene el archivo .frm del archivo que desea recuperar.
  5. Inicie la instancia de MySQL.

No es necesario ubicar el archivo .MYI y .MYD para esta recuperación.


Seguí estos pasos (después de que todo lo demás había fallado) y usé el innodb_force_recovery = 4nivel (no estoy seguro de que fuera necesario en este caso). ¡Gracias a dios!
Joshua Stewardson

66
FYI: ibdata1es InnoDB, no MyISAM.
derobert

14

Una cosa a tener en cuenta:

El archivo .FRM tiene la estructura de su tabla y es específico para su versión de MySQL.

El archivo .MYD NO es específico de la versión, al menos no versiones menores.

El archivo .MYI es específico, pero puede omitirse y regenerarse REPAIR TABLEcomo dicen las otras respuestas.

El objetivo de esta respuesta es hacerle saber que si tiene un volcado de esquema de sus tablas, puede usarlo para generar la estructura de la tabla, luego reemplazar esos archivos .MYD con sus copias de seguridad, eliminar los archivos MYI y repararlos. todas. De esta manera, puede restaurar sus copias de seguridad a otra versión de MySQL, o mover su base de datos por completo sin usar mysqldump. He encontrado esto súper útil al mover grandes bases de datos.


14

¡Sencillo! Crear una base de datos ficticia (por ejemplo, abc)

Copie todos estos archivos .myd, .myi, .frm en mysql \ data \ abc en donde mysql \ data \ es el lugar donde se almacenan .myd, .myi, .frm para todas las bases de datos.

Luego vaya a phpMyadmin, vaya a db abc y encontrará su base de datos.


la respuesta más corta y precisa
Serak Shiferaw

La mejor manera de recuperar los datos ... Instalé WAMP, luego creé una nueva base de datos, copié los archivos en el nuevo directorio de la base de datos C: \ WAMP64 \ bin \ mysql \ mysqlxx \ data \ newdatabase abrir phpmyadmin y su nueva base de datos, lo hará ver los datos
Alexandre georges

7

Creo que .myi puedes repararlo desde mysql.

Si ve este tipo de mensajes de error de MySQL: La base de datos no pudo ejecutar la consulta (consulta) 1016: No se puede abrir el archivo: 'sometable.MYI'. (errno: 145) Mensaje de error: 1034: archivo de clave incorrecto para la tabla: 'sometable'. Intente repararlo, entoncesb probablemente tenga una tabla dañada o dañada.

Puede verificar y reparar la tabla desde un indicador de mysql como este:

check table sometable;
+------------------+-------+----------+----------------------------+
| Table | Op | Msg_type | Msg_text | 
+------------------+-------+----------+----------------------------+ 
| yourdb.sometable | check | warning | Table is marked as crashed | 
| yourdb.sometable | check | status | OK | 
+------------------+-------+----------+----------------------------+ 

repair table sometable;
+------------------+--------+----------+----------+ 
| Table | Op | Msg_type | Msg_text | 
+------------------+--------+----------+----------+ 
| yourdb.sometable | repair | status | OK | 
+------------------+--------+----------+----------+

y ahora tu mesa debería estar bien:

check table sometable;
+------------------+-------+----------+----------+ 
| Table | Op | Msg_type | Msg_text |
+------------------+-------+----------+----------+ 
| yourdb.sometable | check | status | OK |
+------------------+-------+----------+----------+

6

Encontré una solución para convertir los archivos a un .sqlarchivo (luego puede importar el .sqlarchivo a un servidor y recuperar la base de datos), sin necesidad de acceder al /vardirectorio, por lo tanto, no necesita ser un administrador del servidor para hacerlo.

Requiere XAMPP o MAMP instalado en su computadora.

  • Después de haber instalado XAMPP, navegue al directorio de instalación (generalmente C:\XAMPP) y al subdirectorio mysql\data. El camino completo debe serC:\XAMPP\mysql\data
  • Dentro verá carpetas de cualquier otra base de datos que haya creado. Copiar y pegar la carpeta completa de .myd, .myiy .frmarchivos en allí. La ruta a esa carpeta debe ser

    C:\XAMPP\mysql\data\foldername\.mydfiles

  • Luego visite localhost/phpmyadminen un navegador. Seleccione la base de datos que acaba de pegar en la mysql\datacarpeta y haga clic en Exportar en la barra de navegación. Elige exportarlo como un .sqlarchivo. Luego aparecerá preguntando dónde guarda el archivo

¡Y eso es todo! Usted (debe) tener ahora un .sqlarchivo que contiene la base de datos que fue originalmente .myd, .myiy .frmarchivos. Luego puede importarlo a otro servidor a través de phpMyAdmin creando una nueva base de datos y presionando 'Importar' en la barra de navegación, luego siguiendo los pasos para importarlo


5

Puede copiar los archivos en un directorio de subdirectorio con el nombre apropiado de la carpeta de datos siempre que sea la misma versión EXACT de mySQL y haya retenido todos los archivos asociados en ese directorio. Si no tiene todos los archivos, estoy bastante seguro de que tendrá problemas.


Si no tengo la misma versión EXACT de MySQL, ¿qué debo hacer?
Jo Sprague


2

La descripción anterior no fue suficiente para que las cosas funcionen para mí (probablemente densa o perezosa), así que creé este script una vez que encontré la respuesta para ayudarme en el futuro. Espero que ayude a otros

vim fixperms.sh 

#!/bin/sh
for D in `find . -type d`
do
        echo $D;
        chown -R mysql:mysql $D;
        chmod -R 660 $D;
        chown mysql:mysql $D;
        chmod 700 $D;
done
echo Dont forget to restart mysql: /etc/init.d/mysqld restart;

-2

Para aquellos que tienen Windows XP y tienen instalado MySQL server 5.5: la ubicación de la base de datos es C: \ Documents and Settings \ All Users \ Application Data \ MySQL \ MySQL Server 5.5 \ data, a menos que haya cambiado la ubicación dentro de la instalación de MySql Workbench GUI


3
La pregunta es sobre la recuperación de tipos de archivos específicos, no dónde se pueden encontrar esos archivos en Windows XP MySQL 5.5.
Danpe
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.