1

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

MySQL MariaDB restaurar una base de datos

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

Comments 1

  1. Post
    Author

    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
    

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *