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í:

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:

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:

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 interesado en trabajar contigo de manera remota para llevar tu idea a la realidad, formar parte de tu equipo de desarrolladores, ayudarte con tu tarea, dar asesorías y todo lo relacionado con tecnología y programación. Contáctame para más información
No te vayas sin seguirme en Twitter, Facebook y GitHub
Si tienes dudas déjalas en un comentario, pero asegúrate de seguirme antes como agradecimiento (no te cuesta nada y me ayudas mucho)


parzibyte

He trabajado por más de 4 años en el desarrollo de software con experiencia en Java, PHP, JavaScript, HTML, Node.JS, Python, Android y Go. También he trabajado con bases de datos SQL como MySQL y SQLite, así como con bases de datos NoSQL usando MongoDB. Soy bueno utilizando algunos frameworks y herramientas como Firebase, jQuery, AngularJS, VueJS, CodeIgniter, Laravel, BulmaCSS, Bootstrap y Electron. Otros términos que conozco son: Arduino, GraphQL, API's, REST, AJAX, PouchDB, CouchDB, Experiencia de usuario, buenas prácticas de programación, Webpack, NPM, Administración de servidores y programación de scripts La plataforma en la que tengo más experiencia es la web, pero en mis ratos libres realizo unos pequeños ejercicios en C# y C. Estoy aquí para ayudarte a resolver tus problemas de programación y depuración :-)

Deja un comentario

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

This site uses Akismet to reduce spam. Learn how your comment data is processed.

A %d blogueros les gusta esto: