8 votos

¿Cómo restaurar la base de datos mysql utilizando los archivos de la carpeta de datos?

No puedo ejecutar mi mysql desde ayer, y no puedo acceder a él, así que decidí reinstalarlo. He hecho una copia de seguridad de la carpeta de datos, que supongo que contiene todo lo que necesito para restaurar la base de datos después de reinstalar mysql.

He copiado y pegado y he sobrescrito la carpeta de datos antigua con la copia de seguridad, pero da un error que impide cargar el mysql.

He copiado y pegado sólo la carpeta con el mismo nombre que mi base de datos (digamos mi base de datos ), y se ejecuta sin problemas, pero la base de datos en sí no se puede cargar. Cuando intento acceder a la base de datos con SQLyog, cada tabla arroja "No se puede abrir el archivo nombretabla.ibd "

¿Cómo puedo restaurar mi base de datos correctamente?

Estoy usando MySQL 4.1 y Windows 7.

4voto

PJ Mahoney Puntos 889

Restauración de archivos MySQL InnoDB en Windows

Los archivos de tipo InnoDB fueron una tarea más difícil, y por eso estoy escribiendo este post. Me costó mucho encontrar la forma de hacerlo, pero pero reuní suficiente información para realizar la tarea. Ahora, en un esfuerzo por devolver, voy a explicar exactamente lo que hice para conseguir restaurado.

En nuestras copias de seguridad teníamos los siguientes archivos:

\MySQL\MySQL Server 4.1\data\ibdata1
\MySQL\MySQL Server 4.1\data\ib_logfile0
\MySQL\MySQL Server 4.1\data\ib_logfile1

Además, en la carpeta de datos había una carpeta con el nombre del base de datos que estaba restaurando y que contenía *.frm archivos ( table_name.frm ).

Hice la restauración en mi máquina de desarrollo en lugar de la real servidor porque no quería estropear lo que estaba funcionando en el servidor. Ya tenía MySQL instalado desde una instalación de XAMPP. (Mi caja de desarrollo está ejecutando Windows XP SP2). XAMPP instala MySQL de forma un poco diferente que la instalación regular de MySQL, así que si ayuda a seguir lo que hice aquí, puede que quieras instalarlo.

Primero paré mi servicio MySQL usando el panel de control de XAMPP.

He movido los archivos mencionados anteriormente ( ib* y la carpeta que contiene el *.frm ) a la carpeta de datos de mi mysql local ( C:\Program Files\xampp\mysql\data ).

Luego edité my.cnf (situado en C:\Program Files\xampp\mysql\bin ) e hice los siguientes cambios (a partir de la línea 66 para mí):

ANTIGUO:

skip-innodb
#innodb_data_home_dir = C:/Program Files/xampp/mysql/data/
#innodb_data_file_path = ibdata1:10M:autoextend
#innodb_log_group_home_dir = C:/Program Files/xampp/mysql/data/
#innodb_log_arch_dir = C:/Program Files/xampp/mysql/data/
#set-variable = innodb_buffer_pool_size=16M
#set-variable = innodb_additional_mem_pool_size=2M
#set-variable = innodb_log_file_size=5M
#set-variable = innodb_log_buffer_size=8M
#innodb_flush_log_at_trx_commit=1
#set-variable = innodb_lock_wait_timeout=5

NUEVO:

#skip-innodb
innodb_data_home_dir = C:/Program Files/xampp/mysql/data/
innodb_data_file_path = ibdata1:10M:autoextend
innodb_log_group_home_dir = C:/Program Files/xampp/mysql/data/
innodb_log_arch_dir = C:/Program Files/xampp/mysql/data/
set-variable = innodb_buffer_pool_size=16M
set-variable = innodb_additional_mem_pool_size=2M
set-variable = innodb_log_file_size=170M
set-variable = innodb_log_buffer_size=8M
innodb_flush_log_at_trx_commit=1
set-variable = innodb_lock_wait_timeout=50

(Tuve que ajustar innodb_log_file_size al tamaño real de mi archivo de registro)

Luego edité el archivo batch de XAMPP que inicia el servicio mysql ( C:\Program Files\xampp\mysql_start.bat ). He añadido –innodb_force_recovery=6 al final de la llamada a mysqld. Así que la línea 8 de ese archivo ahora se lee:

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

¡Esto hizo el truco! Mis bases de datos se recuperaron en mi máquina. Utilicé SQLyog para hacer un volcado sql de la base de datos para restaurarla en nuestro servidor de producción.

Fuente


Más recursos

0 votos

Hice toda la copia de archivos que escribiste pero sin editar en my.cnf. Funcionó como un encanto.

0voto

Dremation Puntos 934

Un voto arriba y gracias a Pimp Juice IT para una gran respuesta. Resolví un problema similar con la ayuda de su respuesta, pero un poco diferente, así que pensé en compartir.

He actualizado a una versión más reciente de XAMPP. No uso el instalador sólo lo descargo como un nuevo zip y al hacerlo me encuentro con problemas.

  1. Primero paré mysql (lo estoy ejecutando localmente usando XAMPP)
  2. A continuación abrí el mi.ini archivo ubicado en /xampp/mysql/bin/ archivo - para mí mis cambios comenzaron en #skip-innoodb (línea 136). Su número de línea puede variar.

Esto es lo que encontré inicialmente:

#... omitted lines above ...
#skip-innodb
innodb_data_home_dir = "/xampp/mysql/data"
innodb_data_file_path = ibdata1:10M:autoextend
innodb_log_group_home_dir = "/xampp/mysql/data"
#innodb_log_arch_dir = "/xampp/mysql/data"
#... omitted lines below ...

El problema aquí parece ser las rutas relativas; observe la falta de C: en los directorios anteriores. Hacer las rutas absolutas fue mi primer paso.

#skip-innodb
innodb_data_home_dir = "C:/xampp/mysql/data"
innodb_data_file_path = ibdata1:10M:autoextend
innodb_log_group_home_dir = "C:/xampp/mysql/data"
#innodb_log_arch_dir = "C:/xampp/mysql/data"
  1. Mientras que en la nueva versión de XAMPP quiero empezar a utilizar:
    • En /xampp/mysql/ He cambiado el nombre de datos a datos_viejos
    • Entonces, todavía en el mismo directorio /xampp/mysql/ He copiado el datos de mi antiguo XAMPP.
  2. Luego encendí mi servidor mysql y todo estaba bien para ir

Espero que esto ayude a alguien.

0voto

watery Puntos 108

Esto es lo que hice en Windows 10 con MySQL 5.7

Ambas instalaciones se han realizado con MySQL Installer, por lo que las configuraciones fueron las mismas y un poco diferentes a las descritas en las otras respuestas.

Básicamente, de la carpeta de instalación original sólo copié las carpetas con el nombre de los esquemas que me interesaban. A continuación, los ajustes fundamentales que hay que aplicar están en la pestaña Seguridad del cuadro de diálogo de propiedades de la carpeta:

  • asignando la propiedad de la carpeta principal de datos y de todas sus subcarpetas (incluidas las recién copiadas) al SYSTEM (no a admin, administrador o cualquier usuario que se haya utilizado para hacer la copia);
  • añadiendo el NETWORK SERVICE a los usuarios con control total sobre la carpeta.

Encontré estas instrucciones en los foros de MySQL, aquí están los mensajes originales:

Instrucciones originales y completas de Ray Yates:

Para la posteridad:

  1. Hice clic con el botón derecho del ratón en la C:... \Data\ y seleccionó Propiedades -> Seguridad - Avanzada y vio el Principal llamado SERVICIO DE RED

  2. En una ventana separada hice clic con el botón derecho del ratón en la copia E:\MYSQL\Data\ y descubrí que no existía tal configuración.

  3. I Haga clic en el botón [Add], luego en el enlace Select a principal e introduzca el nombre del objeto NETWORK SERVICE y [OK].

  4. He seleccionado SERVICIO DE RED y he hecho clic en [editar] y he marcado Control total [ok]

  5. Luego repetí todos los pasos originales y el servidor arrancó como se esperaba.

EnMiMaquinaFunciona.com

EnMiMaquinaFunciona es una comunidad de administradores de sistemas en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros sysadmin, hacer tus propias preguntas o resolver las de los demás.

Powered by: