Bash script para respaldar y restaurar base de MySQL

Muchas veces por alguna razón tenemos que respaldar alguna base de datos mysql y luego restaurarla en un motor MySQL destino, el siguiente bash script lo escribí para este fin, voy a explicar las líneas claves del script.

Aclaración, este script no contempla como habilitar los permisos necesarios para realizar el respaldo y restaurarlo, esta diseñado para un ambiente donde estos permisos existen y funcionan, al igual que los permisos a nivel red y Firewall.

Respaldar la base de datos MySQL

Para realizar el respaldo con la bash de Linux utilice la utilidad que viene con MySQL “mysqldump”:

mysqldump -h ${MYSQL_HOST} \ -P ${MYSQL_PORT} \ -u ${MYSQL_USER} \ -p${MYSQL_PASS} \${MYSQL_DB} | sed -e 's/DEFINER[ ]*=[ ]*[^*]*\*/\*/'|grep -v 'Warning' > ${HOME}/${DB_BACKUP_PATH}/${TODAY}/${MYSQL_DB}-${TODAY}".sql"

La explicación de la linea anterior es:

-Los campos definidos como ${VARIABLE} son variables definidas dentro de la bash y que se definen por ejemplo:
MYSQL_HOST=$(192.168.1.1)

-El comando “sed” tiene el parámetro “-e” habilita utilizar Regex(expresiones regulares) la expresión regular que le continua, elimina cualquier linea que contenga la palabra DEFINER con la expresión que la contiene, si quieres saber mas con respecto a las expresiones regulares te recomiendo utilizar la siguiente herramienta en linea https://regexr.com/.

-El comando “grep” se utiliza para encontrar coincidencias y con el parámetro “-v” elimina cualquier mensaje de warning del contenido del archivo generado por el comando mysqldump, ya que este puede ser un problema al momento de intentar restaurar ese respaldo.

Como resultado del comando se generara un archivo .sql en un directorio como el del siguiente ejemplo:
/home/user/backup/22Feb2022/push-22Feb2022.sql

Restaurar la base de datos MySQL

Para restaurar la base de datos se puede utilizar la siguiente linea:
mysql -h ${MYSQL_HOST_TEST} -u ${MYSQL_USER_TEST} -p${MYSQL_PASS_TEST} -e "create database ${MYSQL_DB};"   

mysql -h ${MYSQL_HOST_TEST} -u ${MYSQL_USER_TEST} -p${MYSQL_PASS_TEST} ${MYSQL_DB} -e "source ${HOME}/${DB_BACKUP_PATH}/${TODAY}/${MYSQL_DB}-${TODAY}.sql"

De los comando anteriores “mysql” se utilizan los parámetros “-e” para ejecutar una query, en la segunda linea se le indica a MySQL que ejecute el contenido del archivo “.sql” generado en el primer paso.

El proyecto completo se encuentra en el siguiente repositorio de GitHub:
https://github.com/victorlaguna/mysql_backup_restore_bash_script

Si necesitas cualquier automatización para consultas a bases de datos, tareas rutinarias como reportes, o envíos de informacion puedes comunicarte con nosotros y con gusto podemos ayudarte.

Dejá una respuesta