Si no dispones de un backup de la base de datos Mysql en formato .sql o dump, y posees en cambio los ficheros que se encuentran en la carpeta:
carpeta/var/lib/mysql/data/NOMBRE_BASE_DE_DATOS
Ejemplo: /var/lib/mysql
En esa carpeta tendremos unos ficheros por cada tabla de la base:
– mitabla.frm que es el fichero con la definición de la tabla
– mitabla.MYD (extensión en MAYÚSCULAS) que es donde están los datos de la tabla
– mitabla.MYI (extensión en MAYÚSCULAS) donde se almacenan los índices de la tabla
Los pasos para restaurar son los siguientes:
- Creamos desde p.e. phpMyAdmin una base de datos que contendrá las tablas (servidor destino).
- Copiamos los ficheros anteriores dentro de la carpeta /var/lib/mysql/data/nombreBD
- Cambiamos de cada uno de los ficheros el usuario a “mysql – MySQL Server” en este caso y al grupo “mysql”, ambos con los permisos de Lectura y Escritura. Otros no tendrán ningún permiso sobre estos tres ficheros.
Con lo anterior debería funcionar. Uno de los errores que típicos es que a la hora de copiar los ficheros de extensión .frm, .MYD y .MYI se cambiaban a minúsculas las extensiones por lo que cuando desde phpMyAdmin intentaba leer estas tablas obtenía el siguiente error:
#1017 – Can’t find file: mitabla (errno: 2)
Que decir que tendremos que enviar esta información mediante ftp desde el servidor rescue hacia otro. (Puede ser local montando un filezilla server)
Para que el servidor ftp, funcione es necesario, desactivar el cortafuegos local, entrar en el router, dirigir la IP publica hacia la local y los puertos 21, activar zona DMZ en dicha ip local. (en función del router).
Otra posibilidad, 2 Alternativa
Para hacer un backup de una base de datos en modo rescue, debe seguir estos pasos:
– Montar las particiones / y /home
# mount /dev/sda1 /mnt/ # mount /dev/sda2 /mnt/home
Montar los directorios /proc y /dev para poder ejecutar comandos del sistema
# mount -o bind /proc/ /mnt/proc/ # mount -o bind /dev /mnt/dev
Hacer chroot sobre /mnt para empezar a trabajar como root en nuestras particiones
# chroot /mnt
Arrancamos el motor MySQL en modo seguro con el comando:
@ mysqld_safe --skip-grant-tables --skip-networking &
Entramos a MySQL con el comando:
@ mysql
Miramos nuestras bases de datos con el comando:
mysql> show databases;
Y salimos:
mysql> exit
Ejecutamos el dump con el comando:
@ mysqldump test > test.sql
Y ya tendremos nuestro backup sql que habrá que sacar del servidor antes de reinstalar.
Para subir los ficheros podemos emplear este script.
#!/bin/bash
FTP_HOST='xxx.xxx.xxx.xxx'
FTP_LOGIN='miservidor.net'
FTP_PASS='******'
ftp -in << EOF
open ${FTP_HOST}
user ${FTP_LOGIN} ${FTP_PASS}
bin
verbose
prompt
put $1
bye
EOF
Muy bueno, me sirvió bastante