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?
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.
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.
¡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 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:
checktable sometable;+------------------+-------+----------+----------------------------+|Table| Op | Msg_type | Msg_text |+------------------+-------+----------+----------------------------+ | yourdb.sometable |check| warning |Tableis 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:
checktable sometable;+------------------+-------+----------+----------+ |Table| Op | Msg_type | Msg_text |+------------------+-------+----------+----------+ | yourdb.sometable |check| status | OK |+------------------+-------+----------+----------+
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
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.
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;
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
Respuestas:
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 lamysql
base de datos. Entonces no serán restaurados junto con las mesas; Es posible que deba ejecutar lasGRANT
declaraciones apropiadas para crear usuarios, dar acceso, etc. (mysql
Es posible restaurar la base de datos, pero debe tener cuidado con las versiones de MySQL y cualquier ejecución necesaria de lamysql_upgrade
utilidad).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]
fuente
check table sometable;
y luego ejecutar la reparación (solo si es necesario):repair table sometable;
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.
fuente
Acabo de descubrir una solución para esto. Estoy usando MySQL 5.1 o 5.6 en Windows 7.
No es necesario ubicar el archivo .MYI y .MYD para esta recuperación.
fuente
innodb_force_recovery = 4
nivel (no estoy seguro de que fuera necesario en este caso). ¡Gracias a dios!ibdata1
es InnoDB, no MyISAM.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 TABLE
como 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.fuente
¡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.
fuente
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:
y ahora tu mesa debería estar bien:
fuente
Encontré una solución para convertir los archivos a un
.sql
archivo (luego puede importar el.sql
archivo a un servidor y recuperar la base de datos), sin necesidad de acceder al/var
directorio, por lo tanto, no necesita ser un administrador del servidor para hacerlo.Requiere XAMPP o MAMP instalado en su computadora.
C:\XAMPP
) y al subdirectoriomysql\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
,.myi
y.frm
archivos en allí. La ruta a esa carpeta debe serC:\XAMPP\mysql\data\foldername\.mydfiles
Luego visite
localhost/phpmyadmin
en un navegador. Seleccione la base de datos que acaba de pegar en lamysql\data
carpeta y haga clic en Exportar en la barra de navegación. Elige exportarlo como un.sql
archivo. Luego aparecerá preguntando dónde guarda el archivo¡Y eso es todo! Usted (debe) tener ahora un
.sql
archivo que contiene la base de datos que fue originalmente.myd
,.myi
y.frm
archivos. 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 importarlofuente
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.
fuente
http://forums.devshed.com/mysql-help-4/mysql-installation-problems-197509.html
Dice cambiar el nombre de los archivos ib_ *. Lo hice y me devolvió la base de datos.
fuente
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
fuente
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
fuente