Las buenas prácticas dictan que si tienes una base de datos con información «importante», deberías tener también un sistema automatizado de creación de copias de seguridad de la misma. Aún así, puede que por no ser an «importante», o por un fallo de algún script, te encuentres con que la máquina donde estaba falla, y solo puedes recuperar los ficheros.
En MySQL los ficheros que nos interesan, en una máquina linux, suelen encontrarse en la ruta /var/lib/mysql, y tienen una pinta tal que así:
auto.cnf
ib_buffer_pool
ib_logfile0
ib_logfile1
ibdata1
mysql
mysql_upgrade_info
performance_schema
database_blog
Teniendo localizada esta carpeta, podemos crear un fichero docker-compose.yaml justo en el directorio superior:
mysql
docker-compose.yaml
Dentro de este fichero ponemos lo siguiente:
mysql:
container_name: temp_mysql
restart: always
image: mysql:5.5
command: --skip-grant-tables --innodb_force_recovery 6
volumes:
- ./mysql:/var/lib/mysql
ports:
- "5000:3306"
Aquí especificamos que queremos crear un contenedor docker con lo siguiente:
- restart:always reiniciar el contenedor si se para el solo
- basado en la imagen mysql:5.5 (para otras versiones cambiarlo)
- –skip-grant-tables no hacer autentificación de usuarios
- –innodb_force_recovery 6 no intentar recuperar la base de datos, intentar tenerla disponible aunque solo sea para solo lectura
- volumes: – ./mysql:/var/lib/mysql montar la carpeta local dentro del contenedor en la ruta correspondiente
- ports: – «5000:3306» exponer el puerto mysql en el puerto 5000 de la máquina local
Ahora solo queda ejecutar un docker-compose up en el directorio, y se debería ve el log del docker levantándose y, si hay datos corruptos, algún mensaje de error:
Pero lo que nos interesa es que a pesar de mostrar esos errores, llegue al punto donde dice que está listo para conexiónes en el puerto MySQL:
Ahora ya solo quedaría acceder a ese puerto con algún cliente MySQL, y extraer los datos en los que estuviésemos interesados.
Foto de Bertram Nudelbach