¿Cómo restaurar la base de datos MySQL usando archivos en la carpeta de datos?

¿Cómo restaurar la base de datos MySQL usando archivos en la carpeta de datos?

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

Copié, pegué y sobrescribí la carpeta de datos anterior con la copia de seguridad, pero arroja un error que evitará que MySQL se cargue.

Copié y pegué solo la carpeta con el mismo nombre que mi base de datos (digamosmi base de datos), y funciona bien, pero la base de datos en sí no se pudo cargar. Cuando intento acceder a la base de datos con SQLyog, cada tabla arroja "No se puede abrir el archivonombretabla.ibd"

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

Estoy usando MySQL 4.1 y Windows 7.

Respuesta1

Restaurar archivos MySQL InnoDB en Windows

Los archivos tipo InnoDB fueron una tarea más difícil, y por eso escribo este post. Me costó mucho descubrir cómo hacerlo, pero reuní suficiente información para realizar la tarea. Ahora, en un esfuerzo por retribuir, explicaré exactamente lo que hice para restaurarlo.

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 de la base de datos que estaba restaurando y que contenía *.frmarchivos ( table_name.frm).

Hice la restauración en mi máquina de desarrollo en lugar del servidor real 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 ejecuta Windows XP SP2). XAMPP instala MySQL de forma un poco diferente a la instalación normal de MySQL, por lo que si te resulta útil seguir lo que hice aquí, es posible que desees instalarlo.

Primero detuve mi servicio MySQL usando el panel de control de XAMPP.

Moví los archivos enumerados anteriormente ( ib*archivos y la carpeta que contiene los *.frmarchivos) a mi carpeta de datos mysql local ( C:\Program Files\xampp\mysql\data).

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

VIEJO:

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 configurar innodb_log_file_size al tamaño real de mi archivo de registro)

Luego edité el archivo por lotes XAMPP que inicia el servicio mysql ( C:\Program Files\xampp\mysql_start.bat). Agregué –innodb_force_recovery=6al final de la llamada a mysqld. Entonces la línea 8 de ese archivo ahora dice:

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

¡Esto funcionó! Mis bases de datos fueron recuperadas en mi máquina. solía SQLyoghacer un volcado sql de la base de datos para restaurarla en nuestro servidor de producción.

Fuente


Recursos adicionales

Respuesta2

Un voto positivo y gracias aJugo de proxenetapara una gran respuesta. Resolví un problema similar con la ayuda de su respuesta, pero de manera un poco diferente, así que pensé en compartirlo.

Actualicé a una versión más reciente de XAMPP. No uso el instalador, simplemente lo descargo como un nuevo zip y al hacerlo tengo problemas.

  1. Primero detuve mysql (lo estoy ejecutando localmente usando XAMPP)
  2. Luego abrí elmi.iniarchivo 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 los caminos relativos; tenga en cuenta lo que falta C:en los directorios anteriores. Absolutalizar los caminos 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 estoy en la nueva versión de XAMPP quiero empezar a usar:
    • En/xampp/mysql/cambié el nombredatosadatos_antiguos
    • Entonces todavía en el mismo directorio/xampp/mysql/Copié eldatosdirectorio de mi antiguo XAMPP.
  2. Luego encendí mi servidor MySQL y todo estuvo listo.

¡Espero que esto ayude a alguien!

Respuesta3

Esto es lo que hice en Windows 10 con MySQL 5.7

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

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

  • asignar la propiedad de la carpeta de datos principal y todas sus subcarpetas (incluidas las que se acaban de copiar) a la SYSTEMcuenta (no al administrador, administrador o cualquier usuario que se haya utilizado para realizar la copia);
  • agregando el NETWORK SERVICEa 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 derecho en la carpeta C:...\Data\ y Propiedades seleccionadas -> Seguridad - Avanzada y vi el principal llamado SERVICIO DE RED

  2. En una ventana separada, hice clic derecho en la carpeta copiar E:\MYSQL\Data\ y descubrí que no existía tal configuración.

  3. Hago clic en el botón [Agregar], luego en el enlace Seleccionar un principal e ingresé el nombre del objeto SERVICIO DE RED y [Aceptar]

  4. Seleccioné SERVICIO DE RED, hice clic en [editar] y marqué Control total [ok]

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

información relacionada