Sistemas

Restaurar una base de datos MySQL de un fichero de backups completo

Algunas veces puede ocurrir que por pereza, solo tengamos un backup completo (mysqldump –all-databases) con más de una base de datos y queramos restaurar una única base de datos. Por internet circulan algunos tips algo peligrosos como es el uso de mysql –one-database, el cual no es aconsejable. Conozco algún gurú que al final, lo que hace es recuperar la copia en un sistema local y después hacer el dump de la base de datos. Toda una perdida de tiempo.

Actualización
Se actualizo el contenido y el código el 25/03/2020

Artículo mejorado
Se incluyó este artículo en la Wiki de Castris ya que progresivamente, hemos comenzado a trasladar los artículos más técnicos y con código a ese medio, en detrimento de WordPress

mysql –one-database

Esta opción esta desaconsejada incluso por MySQL, y puede ser útil en ciertos escenarios (sobre todo cuando trabajamos con logs binarios), que requiere un conocimiento más elevado de MySQL que a lo que solemos estar acostumbrados. Mejor ir a lo práctico.

Filtrar el fichero dump con sed

Para mi la mejor opción que llevo años usándola. Sencilla, eficaz y adaptable, ya que para mas tranquilidad podemos adecuar el código para hacerlo en dos pasos, con el fin de verificar o de manipular la salida, si queremos cambiar de nombre la base de datos.

Actualización
El código no tiene visualiza las comillas simple inclinadas que deben encerrar los nombre de la bd o de las tablas según sea el caso

Versión actualizada 21/11/2018 (me funciona)

sed -n '/^-- Current Database: `nombre_de_la_base_de_datos`/,/^-- Current Database: `/p' nombre_del_backup.sql > nombre_de_la_base_de_datos.sql
Información sobre el accesso
En mi codigo no uso mysql -u user -p por que prefiero tener en mi entorno una acutentificacion basada en el fichero my.cnf. Si no usas este método debes añadir al comando mysql donde aparezca el par -u user -p

Versión antigua (no funciona siempre)

cat mysqldumped.sql | \
sed -n -e '/^CREATE DATABASE.*`the_database_you_want`/,/^CREATE DATABASE/ p' | \
sed -e '$d' | \
mysql -u user -p

Versión una sola linea (versión antigua)

cat all-databases.sql | sed -n -e '/^CREATE DATABASE.*`the_database_you_want`/,/^CREATE DATABASE/ p' | sed -e '$d' | mysql -u user -p
Dump SQL
Si el dump no contiene (mala praxis) CREATE DATABASE, puedes usar en su lugar USE.

Evidentemente podemos adaptar el script para que en lugar de hacer el restore directamente volquemos la salida a un fichero de texto, con el fin de verificar y/o manipular los datos de la salida.

Comparte este artículo

Restaurar una sola tabla de un fichero de mysqldump (2018-04-17)

Bueno, en vez de hacer un nuevo artículo prefiero poner la solución actualizando este.

¿Alguna has necesitado o necesitas restaurar una sala tabla? Bueno es sencillo solo hay que cambiar  un poco el código anterior

Versión actualizada 21/11/2018

sed -n '/^-- Table structure for table nombre_de_la_tabla/,/^-- Table structure for table /p' backup_de_la_base_dedatos.sql > nombre_de_la_tabla.sql

Versión antigua

cat backup_de_database.sql|sed -n -e '/-- Table structure for table nombre_de_la_tabla/,/-- Table structure for table/ p' | sed -e '$d' | mysql nombre_de_la_base_de_datos

Nota:

Un error de transcripción no muestra los acentos invertidos que deben rodear a nombre_de_la_tabla

Espero que te sea útil.

Artículo Antiguo
Este artículo tiene más de 2 años. Es muy probable que su contenido este anticuado, aunque pueda ser de utilidad, es conveniente que revises otras informaciones al respecto. Si lo encuentras útil o crees que puede ser actualizado, deja tu comentario con la actualización para poder editarlo y que pueda ser útil a los demás.

Comparte este articulo en

Abkrim

Yo solo se que no se nada, y que me paso la vida aprendiendo

Ver comentarios

  • Un tip adicional. Si queremos volcar la tabla en otra con otro nombre hay que cambiar, los insert, los locks, el create de la tabla etc.

    sed -i.bak 's/`nombre_de_la_tabla`/`nombre_de_la_tabla_nueva`/g' nombre_de_la_tabla.sql
    mysql nombre_de_la_base_de_datos < nombre_de_la_tabla.sql
    

Entradas recientes

Youtube – Mod Security en DirectAdmin. Conocerlo y gestionarlo en el panel de control DirectAdmin.

¡Hola a todos! Vamos a sumergirnos en el fascinante mundo de Mod Security y aprender…

3 meses hace

Apertura del canal Youtube, Tecno Boomer, dedicado al mundo del hosting

Ya son muchos años en el sector, muchos años pasando por varios paneles de control,…

3 meses hace

El Uso de la Lista UCEPROTECT en los Niveles 2 y 3: Una Falacia de Causa Cuestionable

La lista UCEPROTECT es una herramienta utilizada por muchos administradores de sistemas y proveedores de…

5 meses hace

Fatal error: Allowed memory size of 268435456 bytes exhausted en WordPress. Otro post más… pero diferente

No es la primera vez que me encuentro con el agotamiento de la memoria en…

11 meses hace

Problemas de Acceso con Centos 7, Almalinux 8, Ubuntu 20.04, y Debian 10/11: Un Enigma Firewall CSF

Descubre cómo solucionar problemas de acceso a servidores con Centos 7, Almalinux 8, Ubuntu 20.04…

1 año hace

MySQL no inicia debido a errores en la base de datos interna de MySQL

Uno de los mensajes más alarmantes que puedes encontrarte es aquel que indica que tu…

1 año hace