Me apasiona la tecnología y disfruto de los retos informáticos. Me gusta la música; rock, jazz, blues, bossa y disfruto además de la comida y de viajar. Soy Gerente de Mantareys S. A. y soy un adicto a la Internet y el conocimiento.

Tenia mucho tiempo que no compartía un recurso, y hoy me toco una tarea que pensé iba a tomarme mucho tiempo. El requerimiento era respaldar una base de datos MySQL grande de casi 90GB, y cargarla en un nuevo servidor. El problema es que no deseaban importar todas las tablas en el nuevo servidor, pero si mantener su respaldo.

Ya había escrito antes una una guía de lo básico para exportar e importar bases de datos desde la consola, pero en este caso particular la situación es que son muchas tablas y el requerimiento fue, exportar por tablas para su respaldo e importar las necesarias. Por tal motivo hice un pequeño bash que genera todo el trabajo de forma automática.

Exportando cada tabla en un .sql independiente

Primero que nada, debemos definir las variables que vamos a usar en nuestro script. Lo hice rápido, así que mi solución fue colocar variables seteadas desde el inicio pero si te gusta algo más “personalizado”, puedes solicitar al usuario el ingreso de datos.

Una vez obtenido los datos necesarios para el funcionamiento del script, nos conectamos a MySQL y obtenemos la lista de las tablas de nuestra base de datos ejecutamos el comando show tables;

Posteriormente procedemos a recorrer cada uno de los resultados. Nótese que elimino la primer linea del resultado, ya que no corresponde a un nombre de la tabla.

Una vez generados todos los archivos .sql de manera separada, tal cual fue mi necesidad, procedemos a comprimir cada uno de ellos en un archivo .zip para reducir su espacio, recordemos que al menos en mi necesidad puntual no usare todas las tablas exportadas, pues simplemente es para generar un respaldo de la data en general.

Tambien podemos generar un solo archivo zip unicamente con el comando zip $dbname.zip $dbbackup*.sql con el cual empaquetariamos en un solo archivo .zip todos los .sql, por lo que todo el codigo anterior seria innecesario.

Pero esta no es mi necesidad, por tal motivo empaquete cada archivo .sql por separado, ya que solo usare algunas tablas y prefiero manipularlas en .zip, luego pienso automatizar la descrompresión y la cargar 😉

Para no ocupar espacio de manera innecesaria en el disco, procedemos a eliminar los archivos .zip generados anteriormente por cada una de las tablas.

Puedes también borrar todo lo respaldado en el directorio, si lo deseas, puesto que en el pedazo de código anterior ya se genero el .zip con toda la data. Para esto solo necesitas modificar la linea de código anterior por esta: rm -Rf $dbbackup

El código final

Para el código final he dejado comentado las lineas donde se solicita al usuario la data, puesto que ya la seteo directamente, y adicionalmente he dejado comentado la linea que elimina los archivos .zip generados para que puedas personalizarlo a tu gusto. El código final quedaría así:

Recuerda que debes dar permisos de ejecución al script con chmod a+x exportar.sh y luego lo corres únicamente ejecutando ./exportar.sh

y ahora… ¿Cómo muevo el archivo generado, de gran tamaño, a un nuevo servidor?

Mi hermano me comparte una solución bastante efectiva que es transfiriendo el fichero por ssh con rsync, para lo que basta únicamente usar el siguiente comando:

Simplemente reemplaza /backup/archivo.zip por la ruta y nombre de tu archivo local y reemplaza root@192.168.0.0:/ruta/carga/ por tu user@host y la ruta de destino del fichero.

Una vez exportada la data, con los ejemplos anteriores, queda ya muy fácil importarla.

Espero les haya gustado y les sea de utilidad. Salud!

Deja un comentario

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