start - mysql repair innodb database
Cómo recuperar una base de datos MySQL desde archivos.myd,.myi,.frm (11)
¡Sencillo! Crear una base de datos ficticia (decir abc)
Copie todos estos archivos .myd, .myi, .frm a mysql / data / abc 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 encuentre su base de datos.
¿Cómo restaurar una de mis bases de datos MySQL desde .myd
, .myi
, .frm
?
Acabo de descubrir una solución para esto. Estoy usando MySQL 5.1 o 5.6 en Windows 7.
- Copie el archivo .frm y ibdata1 del archivo anterior que se encuentra en "C: / Program Data / MySQL / MSQLServer5.1 / Data"
- Detenga la instancia del servidor SQL en la instancia SQL actual
- Vaya a la carpeta de datos ubicada en "C: / Program Data / MySQL / MSQLServer5.1 / Data"
- Pegue el ibdata1 y la carpeta de su base de datos que contiene el archivo .frm del archivo que desea recuperar.
- Comience la instancia de MySQL.
No es necesario ubicar el archivo .MYI y .MYD para esta recuperación.
Creo que .myi puedes repararlo desde dentro 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) Msg de error: 1034: archivo de clave incorrecta para la tabla: ''sometable''. Intenta repararlo, probablemente tengas una tabla dañada o corrupta.
Puede verificar y reparar la tabla desde un prompt 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 |
+------------------+-------+----------+----------+
Encontré una solución para convertir los archivos a un archivo .sql
(luego puede importar el archivo .sql
a un servidor y recuperar la base de datos), sin necesidad de acceder al directorio /var
, por lo tanto, no necesita ser un administrador del servidor para hacer esto tampoco
Requiere que XAMPP o MAMP estén instalados en su computadora.
- Después de haber instalado XAMPP, navegue hasta el directorio de instalación (normalmente
C:/XAMPP
) y el subdirectoriomysql/data
. La ruta completa debe serC:/XAMPP/mysql/data
En su interior verá carpetas de cualquier otra base de datos que haya creado. Copie y pegue la carpeta llena de
.myd
,.myi
y.frm
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 la carpetamysql/data
, y haga clic en Exportar en la barra de navegación. Elige la exportación como un archivo.sql
. Aparecerá preguntando dónde guardar el archivo
¡Y eso es todo! Usted (debería) ahora tiene un archivo .sql
que contiene la base de datos que originalmente era .myd
, .myi
y .frm
. A continuación, 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 siga los pasos para importarlo
La descripción anterior no fue suficiente para hacer que las cosas funcionen para mí (probablemente densa o floja), así que creé esta secuencia de comandos 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 el servidor MySQL 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.
Puede copiar los archivos en un directorio del subdirectorio apropiadamente nombrado de la carpeta de datos, siempre que sea la misma versión EXACTA de mySQL y haya conservado todos los archivos asociados en ese directorio. Si no tiene todos los archivos, estoy bastante seguro de que tendrá problemas.
Si se trata de tablas MyISAM, colocar los archivos .FRM, .MYD y .MYI en un directorio de base de datos (p. Ej., /var/lib/mysql/dbname
) hará que esa tabla esté disponible. No tiene que ser la misma base de datos de la que provienen, el mismo servidor, la misma versión de MySQL o la misma arquitectura. Es posible que también necesite 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 base de datos mysql
. Entonces no serán restaurados junto con las tablas; es posible que necesite ejecutar las instrucciones GRANT
apropiadas para crear usuarios, dar acceso, etc. (Es posible restaurar la base de datos mysql
, pero debe tener cuidado con las versiones de MySQL y las ejecuciones necesarias de la utilidad mysql_upgrade
).
En realidad, probablemente solo necesite .FRM (estructura de tabla) y .MYD (datos de tabla), pero deberá reparar la tabla para reconstruir .MYI (índices).
La única limitación es que si está degradando, será mejor que revise las notas de la versión (y probablemente ejecute la tabla de reparación). Las nuevas versiones de MySQL agregan características, por supuesto.
[Aunque debería ser obvio, si mezcla 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 pueden hacerlo. Además, este método no funciona en absoluto para las tablas InnoDB. Solo MyISAM, pero teniendo en cuenta los archivos que tienes, tienes MyISAM]
Tenga en cuenta que si desea reconstruir el archivo MYI, entonces el uso correcto de REPAIR TABLE es:
TABLA DE REPARACIÓN sometable USE_FRM;
De lo contrario, probablemente solo obtendrá otro error.
Una cosa a tener en cuenta:
El archivo .FRM tiene su estructura de tabla y es específico de su versión de MySQL.
El archivo .MYD NO es específico para la versión, al menos no para versiones menores.
El archivo .MYI es específico, pero puede omitirse y regenerarse con REPAIR TABLE
como dicen las otras respuestas.
El objetivo de esta respuesta es hacerte saber que si tienes un volcado de esquema de tus tablas, puedes utilizarlo para generar la estructura de la tabla, luego reemplazar esos archivos .MYD con tus 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 sin usar mysqldump
. He encontrado esto súper útil al mover grandes bases de datos.
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ó el DB.