Skip to content

Instantly share code, notes, and snippets.

@ks7000
Created March 6, 2020 20:22
Show Gist options
  • Save ks7000/79dc06be3f2e45d5b8e16c54a3cdae22 to your computer and use it in GitHub Desktop.
Save ks7000/79dc06be3f2e45d5b8e16c54a3cdae22 to your computer and use it in GitHub Desktop.
Guión para respaldar bases de datos en MySQL Community Server 8.0.19
#!/bin/bash
# <Guión para respaldar bases de datos en MySQL Community Server 8.0.19>
# Copyright (C) <2020> <Jimmy Olano 🇻🇪>
#
# Este programa es software libre: puedes redistribuirlo y/o modificarlo
# bajo los términos de la Licencia Pública General de GNU, publicada por
# la Fundación de Software Libre, ya sea la versión 3 de la Licencia, o
# (a su elección) cualquier versión posterior.
#
# Este programa se distribuye con la esperanza de que sea útil,
# pero SIN NINGUNA GARANTÍA; sin siquiera la garantía implícita de
# MERCADEO o APTITUD PARA UN PROPÓSITO PARTICULAR. Vea el
# GNU General Public License para más detalles.
#
# Debería usted haber recibido una copia de la Licencia Pública General de GNU
# junto con este programa. Si no es así, vaya a <https://www.gnu.org/licenses/>.
#
# English language:
# <Script for backing up databases MySQL Community Server 8.0.19>
# Copyright (C) <2020> <Jimmy Olano 🇻🇪>
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
# the Free Software Foundation, either version 3 of the License, or
# (at your option) any later version.
#
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY; without even the implied warranty of
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
# GNU General Public License for more details.
#
# You should have received a copy of the GNU General Public License
# along with this program. If not, see <https://www.gnu.org/licenses/>.
#
# ¿Qué hace este guión?
# Crea una carpeta maestra de respaldo en el "home" del usuario y crea subcarpetas
# para el tipo de base de datos y luego una carpeta para cada mes.
# De la lista de base de datos a (respaldar y/o ignorar) extrae la información
# con MySQLDump y la comprime con gzip de manera "amigable" para rsync.
# Última actualización de este guión: jueves 5 de marzo de 2020.
# Inicio de variables personalizables
# Credenciales: recomendado usar "auth_socket" para conectar SIN CONTRASEÑA
# (en inglés: https://www.percona.com/blog/2019/11/01/use-mysql-without-a-password/ )
ksUsuario="nombre_del_usuario(a)"
ksContrasena="contraseña"
# Servidor local por defecto ("auth_socket" solo usa "localhost");
# sino usar dirección IP o URL.
ksAnfitrionRemoto="localhost"
# Si el servidor es remoto ASEGURAR el envío de contraseña
# (en inglés: https://dev.mysql.com/doc/refman/8.0/en/password-security-user.html )
# Carpeta principal con los respaldos.
ksDestino="$HOME/Respaldos"
# Carpeta secundaria, una para cada tipo de base de datos,
# una carpeta para cada mes.
ksSeparador="_"
ksDestinoAnuarioMes="$ksDestino/Respaldos$ksSeparador""MySQL/$(date +"%Y-%m%b")"
# Lista de base de datos a respaldar, por defecto (valor="") TODAS las que el
# usuario tenga derechos; de lo contrario separar nombres con un espacio.
ksBD_a_respaldar=""
# Lista de base de datos a ignorar separadas por un simple espacio
ksBD_a_ignorar="information_schema prueba pruebas"
# Fin de variables personalizables
# Variables automáticas «no modificar».
ksAnfitrionLocal="$(hostname)"
ksJustoAhora="$(date +"%Y-%m%b-%d%a@%H%M")"
ksNom_Archivo_Resp=""
# Variables automáticas «SE PUEDEN AJUSTAR, DE SER NECESARIO».
ksMYSQL="$(which mysql)"
ksMYSQLDUMP="$(which mysqldump)"
ksGZIP="$(which gzip)"
# Crea los directorios necesarios
[ ! -d $ksDestinoAnuarioMes ] && mkdir -p $ksDestinoAnuarioMes || :
# Comienza respaldo, primero lista las bases de datos disponibles para el usuario
ksLista_BDs="$( $ksMYSQL -u $ksUsuario -p$ksContrasena -h $ksAnfitrionRemoto -Bse 'SHOW DATABASES;')"
for base_dato in $ksLista_BDs
do
# Revisa la lista de bases de datos a respaldar.
if [ "$ksBD_a_respaldar" == "" ]; then
ksRespaldar=true
else
ksRespaldar=false
for i in $ksBD_a_respaldar
do
if [ "$base_dato" == "$i" ]; then
ksRespaldar=true
fi
done
fi
# Pero si está en la lista de ignorar, pues pasa a la siguiente BD.
if [ $ksRespaldar == true ] ; then
if [ "$ksBD_a_ignorar" == "" ]; then
ksRespaldar=true
else
ksRespaldar=true
for i in $ksBD_a_ignorar
do
if [ "$base_dato" == "$i" ]; then
ksRespaldar=false
fi
done
fi
fi
if [ $ksRespaldar == true ] ; then
Nom_Archivo_Resp=$ksDestinoAnuarioMes"/Respaldo"$ksSeparador"MySQL"
Nom_Archivo_Resp=$Nom_Archivo_Resp$ksSeparador$ksJustoAhora$ksSeparador
Nom_Archivo_Resp=$Nom_Archivo_Resp$ksAnfitrionRemoto$ksSeparador$base_dato".gz"
# Respaldo en sí
ksMYSQLDUMP_ARG=" -u $ksUsuario "
if [ "$ksContrasena" != "" ]; then
ksMYSQLDUMP_ARG=$ksMYSQLDUMP_ARG" -p$ksContrasena"
fi
ksMYSQLDUMP_ARG=$ksMYSQLDUMP_ARG" $base_dato -h $ksAnfitrionRemoto --column-statistics=0"
#echo "$ksMYSQLDUMP $ksMYSQLDUMP_ARG | $ksGZIP -9 --rsyncable > $Nom_Archivo_Resp"
$ksMYSQLDUMP $ksMYSQLDUMP_ARG | $ksGZIP -9 --rsyncable > $Nom_Archivo_Resp
fi
done
# Fin del guión, ¡que tengáis un feliz día!
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment