Script para respaldar base de datos de MySQL funcionando

Script para respaldar base de datos de MySQL / MariaDB en Linux usando MySQLDump

En este tutorial de Linux vamos a ver cómo respaldar o hacer un backup de una base de datos completa de MySQL o MariaDB usando la utilidad de MySQLDump también llamada mysqldump.

Todo eso será llamado desde un script sh programado por nosotros.

Por otro lado, veremos cómo no exponer nuestras credenciales de acceso para llamar al comando sin pasarle nuestra contraseña, evitando así riesgos de seguridad.

La segunda parte del tutorial (que traeré muy pronto) indicará cómo respaldar una base de datos periódicamente con cron, es decir, respaldarla cada mes, a diario o cada determinado tiempo.

Nota: este tutorial está probado con ubuntu 16.04 y 18.10 pero debería funcionar para otras versiones. Por cierto, aquí puedes ver cómo instalar y configurar MySQL en Linux en caso de que no lo tengas instalado.

Paso 1: probar credenciales

Primero que nada, verifica que puedes loguearte en el servidor. Para ello mira este tutorial de introducción a la línea de comandos con MySQL o escribe:

mysql -u tu_usuario -p

En este caso lo haré con root, así:

mysql -u root -p

Eso preguntará la contraseña y si está bien, nos dejará pasar:

Iniciar sesión con MySQL
Iniciar sesión con MySQL

Paso opcional: crear base de datos de prueba

Si quieres probar sin una base de datos real, crea una llamada pruebas así:

create database pruebas;
use pruebas;
create table contactos(nombre varchar(255), sitio_web varchar(255));
insert into contactos values 
('Luis Cabrera Benito', 'parzibyte.me'),
('Luis Cabrera Benito', 'parzibyte.me'),
('Luis Cabrera Benito', 'parzibyte.me'),
('Luis Cabrera Benito', 'parzibyte.me');

Ahora sí podemos continuar.

Paso 2: probar mysqldump sin script

Antes de programar el script vamos a ver si la utilidad de mysqldump funciona. La sintaxis es:

mysqldump -u usuario -p base_de_datos > /ruta/al/respaldo

En mi caso quiero el respaldo en /home/cabox/bd.sql, mi usuario es root y la base de datos es pruebas así que queda así:

mysqldump -u root -p pruebas > /home/cabox/bd.sql

El script preguntará la contraseña (para el script no vamos a escribirla, pero vamos paso por paso) así que la escribimos. Luego verificamos que el respaldo tenga datos con:

tail /home/cabox/bd.sql

Todo eso se ve en la siguiente imagen:

Respaldo de base de datos creado con éxito
Respaldo de base de datos creado con éxito

No importa el contenido del respaldo, sino que tenga contenido. Podemos continuar entonces.

Paso 3: crear archivo de configuración de MySQL y pasarlo a mysqldump

Cuando programamos un script para respaldar una base de datos en MySQL, no vamos a escribir nuestra contraseña. Una opción es pasarla así:

mysqldump -u usuario -pLaContraseñaAquíJuntoALaLetraP base_de_datos > /ruta/absoluta.sql

Pero estamos pasando la contraseña en la línea de comandos, y si alguien más listara los procesos con:

ps

Vería nuestro comando, y lo vería durante el proceso de respaldo; dependiendo de la base de datos esto sería corto o largo, pero mejor no nos arriesgamos.

Lo bueno de MySQL es que nos permite pasarle un archivo de configuración con nuestras credenciales, y eso es lo que haremos. Así le indicamos en dónde está el usuario y la contraseña, pero no las escribimos en el comando.

Más tarde podemos configurar ese archivo para que solamente nosotros podamos leerlo, pero esa es otra historia.

Entonces creamos el archivo de configuración (recomiendo usar nano) en una ruta que recordemos, recomiendo que sea en ~/ con extensión .cnf, el mío será my.cnf y lo pondré en /home/cabox/my.cnf con el siguiente contenido:

[mysqldump]
user=root
password=hunter2

Obviamente cámbialo de acuerdo a tus credenciales, y después guarda cambios.

Nota: no recomiendo hacerlo con root, mejor crea un nuevo usuario pero lo dejo a tu criterio. El mío queda así:

Configurar credenciales para mysqldump
Configurar credenciales para mysqldump

Luego le asignamos permisos con:

sudo chmod 600 my.cnf

Ya tenemos configurado nuestro archivo.

Paso 4: respaldar con mysqldump sin contraseña

Finalmente probamos el comando de mysqldump pero con distintas opciones:

mysqldump --defaults-file=/ruta/al/archivo/de/configuracion.cnf nombre_base_de_datos > /ruta/absoluta/salida/del/respaldo.sql

Ahora no pasamos ni el usuario ni la contraseña, solamente el nombre de la base de datos, el archivo de configuración y la ruta de salida. El mío queda así:

mysqldump --defaults-file=/home/cabox/my.cnf pruebas > /home/cabox/bd.sql

Listo, si configuramos todo correctamente, el respaldo estará en la ruta de salida. Queda comprobado en la siguiente imagen:

Backup de MySQL creado con mysqldump y archivo de configuración
Backup de MySQL creado con mysqldump y archivo de configuración

Paso 5: script sh para respaldar base de datos

Una vez que aprendimos todo esto, meterlo en un script no cuesta nada. El código final es este:

#!/bin/bash
# Respaldar base de datos de MySQL con
# mysqldump y archivo de configuración
# @author parzibyte | Visita: parzibyte.me/blog
NOMBRE_BASE_DE_DATOS="pruebas"
RUTA_ARCHIVO_CONFIGURACION="/home/cabox/my.cnf"
RUTA_SALIDA_RESPALDO="/home/cabox/"
NOMBRE_ARCHIVO_RESPALDO="bd.sql"
RUTA_ARCHIVO_RESPALDO="$RUTA_SALIDA_RESPALDO/$NOMBRE_ARCHIVO_RESPALDO"
mysqldump --defaults-file=$RUTA_ARCHIVO_CONFIGURACION $NOMBRE_BASE_DE_DATOS > $RUTA_ARCHIVO_RESPALDO

Más tarde se le da permisos de ejecución con:

chmod +x respaldar_mysqldump.sh

Hora de probar con:

./respaldar_mysqldump.sh

Y si no hay ningún error, significa que el respaldo fue creado bien. Todo ese proceso queda en esta imagen final:

Script para respaldar base de datos de MySQL funcionando
Script para respaldar base de datos de MySQL funcionando

Así es como terminamos. La segunda parte será sobre cómo agregarlo a cron para que sean respaldos periódicos.

Estoy aquí para ayudarte 🤝💻


Estoy aquí para ayudarte en todo lo que necesites. Si requieres alguna modificación en lo presentado en este post, deseas asistencia con tu tarea, proyecto o precisas desarrollar un software a medida, no dudes en contactarme. Estoy comprometido a brindarte el apoyo necesario para que logres tus objetivos. Mi correo es parzibyte(arroba)gmail.com, estoy como@parzibyte en Telegram o en mi página de contacto

No te pierdas ninguno de mis posts 🚀🔔

Suscríbete a mi canal de Telegram para recibir una notificación cuando escriba un nuevo tutorial de programación.

Dejar un comentario

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