2008-09-22 17 views
9

Tengo que restaurar una base de datos que se ha DROPped inadvertidamente en MySQL 5.0. Al revisar los archivos de respaldo, parece que solo tengo archivos .FRM para contener los datos de la base de datos.Restauración de la base de datos MySQL InnoDB

¿Alguien me puede decir si esto es todo lo que necesito para restaurar/importar una base de datos desde la copia de seguridad, o hay otros archivos que debería tener a mano para completar esto?

Respuesta

14

.Los archivos .frm no son los archivos de datos, solo almacenan la "información del diccionario de datos" (ver MySQL manual). InnoDB almacena sus datos en archivos ib_logfile *. Eso es lo que necesita para hacer una copia de seguridad/restauración. Para más detalles, vea here.

+0

InnoDB requiere los archivos ibdata, ib_logfile * y/.ibd además de los archivos * .frm. – silfreed

+0

¿qué sucede si solo tiene los archivos ib_logfile * y .frm (junto con una copia de seguridad de meses de antigüedad)? alguna oportunidad de recuperarse en ese escenario? ¿o necesitas el ibdata para recuperar algo? – eglasius

6

Oh mi ... estás en problemas. Cerrar la base de datos. Copia de seguridad del archivo innodb. Ora porque no hiciste NADA después de que abandonaste la base de datos.

Los chicos de Percona (incluye autores de MySQL Performance Blog) deberían poder ayudarte: Percona emergency support.

Si se aventura por su cuenta, lleve esto con usted: Data Recovery Toolkit for Innodb.

¿La logística de la misma? Tienes que leer cada página (la página de términos de la computadora ... bloque de 16k en el caso de Innodb) y reconstruir tus datos de esa manera. Es un trabajo de muy bajo nivel (estamos hablando abre tu editor hexadecimal y comienza a contar bytes si el kit de herramientas no lo hace por ti), y si no eres un programador con mucha experiencia, te va a doler. .

7

Restauración innodb: (asumiendo que su carpeta de datos es C: \ Datos de programa \ MySQL \ MySQL Server 5.5 \ data)

  1. Copiar las carpetas de las bases de datos (llamada así por el nombre de base de datos) que desea restaurar a C: \ ProgramData \ MySQL \ MySQL Server 5.5 \ data
  2. Copie los 3 archivos ibdata a la carpeta de datos, p. ej. (C: \ Datos de programa \ MySQL \ MySQL Server 5.5 \ data)

    _ib_logfile0 
    _ib_logfile1 
    _ibdata1 
    
  3. Obtener el tamaño de la _ib_logfile0 en MB (debe ser el mismo que _ib_logfile1) por File Haga clic derecho -> Propiedades

  4. Editar el archivo de configuración de MySQL (mysql \ bin my.ini \) para la innodb_log_file_size = 343m a ser exactamente el tamaño de los archivos ibdata

  5. Run

    mysqld --defaults-file = mysql \ bin \ my.ini --standalone --console --innodb_force_recovery = 6

  6. Ahora sus datos debería estar de vuelta en su base de datos.Exportarlos usando phpmysql o cualquier otra herramienta

+0

no funciona para mí - en phpMyAdmin Puedo ver las tablas InnoDb, pero no puedo acceder a ellas –

+0

Paso 3/4 No estoy seguro de si hicieron algo. Tuve que eliminar los archivos en orden para que realmente reinicie mysql. No sé qué hace el paso 5 ... ¡Pero el paso 1,2,5 y el mysql reiniciado parecían funcionar! – msponagle

+0

Como dice @msponagle. No pude completar todos los pasos, pero defenetly los pasos 1, 2, quizás 3, luego reiniciar el servicio y, si no lo hace, intentar reiniciar la máquina. Eso funcionó para mí. – ingkevin

-2

La solución detallada se puede encontrar aquí:

http://www.unilogica.com/mysql-innodb-recovery/ (artículo en portugués)

Además de la bandera de innodb_force_recovery, he encontrado otra solución: innodb_file_per_table, que divide las tablas InnoDB en cada archivo como las tablas MyISAM.

En una recuperación de fallos puede perder menos datos que en un solo archivo ibdata1.

Cuestiones relacionadas