Respaldos Automaticos con rsync

¿En qué podemos ayudarte?
< Regresar
Estás aquí:
Imprimir

Pre requisitos

Crear el acceso sin password siguiendo el link http://kb.kpt.com.mx/knowledge-base/ssh-sin-password/

El host destino debe estar configurado el rsync de acuerdo a http://kb.kpt.com.mx/knowledge-base/configurar-rsync-centos7/

Crear respaldo de la base de datos siguiendo (modificado para una sola BD) http://kb.kpt.com.mx/knowledge-base/script-respalda-bases-mariadb/

Explicacion de los scripts

El primer script es el principal y manda a llamar al del respaldo de la base de datos. Primero realiza un respaldo de la base de datos involucrada y la almacena en un directorio donde después sera copiado en la sincronizacion, después realiza una conexión sin password al equipo remoto y si no existen archivos en las ubicaciones, los empieza a copiar, si ya hay archivos solo copia los nuevos y si hay algún archivo que esta en el destino y en el origen ya no se encuentra, entonces el archivo es borrado.

Una vez terminada la copia o sincronizacion, el script restaura los permisos en los directorios remotos, después descompacta el respaldo de la base de datos y lo aplica al servidor.

Script para respaldo automático

#!/bin/sh
# Author: Brice Burgess – bhb@iceburg.net
# rbackup.sh — secure backup to a remote machine using rsync.
#Adecuado por Cesar Vazquez
#Este script fue adecuado para kb

# Directories to backup. Separate with a space. Exclude trailing slash!
SOURCES=”/var/www/clients/client0/web7″

# IP or FQDN of Remote Machine
RMACHINE=xxx.xxx.xxx.xxx

# Remote username
RUSER=root

# Location of passphraseless ssh keyfile
RKEY=~/.ssh/id_rsa

# Directory to backup to on the remote machine. This is where your backup(s) will be stored
# Exclude trailing slash!
RTARGET=”/var/www/clients/client2/web2″

#Dominio a donde se correra el backup debe existir en el host remoto en la configuracion de rsync
DOMINIO=”kb”

#Archivo de backup mysql
FILE=”`date +%Y%m%d`.kbs.sql.gz”
FILE2=”`date +%Y%m%d`.kbs.sql”

# Your EXCLUDE_FILE tells rsync what NOT to backup. Leave it unchanged, missing or
# empty if you want to backup all files in your SOURCES. If performing a
# FULL SYSTEM BACKUP, ie. Your SOURCES is set to “/”, you will need to make
# use of EXCLUDE_FILE. The file should contain directories and filenames, one per line.
# An example of a EXCLUDE_FILE would be:
# /proc/
# /tmp/
# /mnt/
# *.SOME_KIND_OF_FILE
EXCLUDE_FILE=”/etc/rsync_exclude.lst”

# Comment out the following line to disable verbose output
VERBOSE=”-v”

#Respaldo de la base de datos
echo “making kbs database backup…”
/root/localscripts/mysql_kb_dump.sh

#######################################
########DO_NOT_EDIT_BELOW_THIS_POINT#########
#######################################
if [ ! -f $RKEY ]; then
echo “Couldn’t find ssh keyfile!”
echo “Exiting…”
exit 2
fi

if ! ssh -i $RKEY $RUSER@$RMACHINE “test -x $RTARGET”; then
echo “Target directory on remote machine doesn’t exist or bad permissions.”
echo “Exiting…”
exit 2
fi

echo “Verifying Sources…”
for source in $SOURCES; do
echo “Checking $source…”
if [ ! -x $source ]; then
echo “Error with $source!”
echo “Directory either does not exist, or you do not have proper permissions.”
exit 2
fi
done

if [ -f $EXCLUDE_FILE ]; then
EXCLUDE=”–exclude-from=$EXCLUDE_FILE”
fi

echo “Sources verified. Running rsync…”
for source in $SOURCES; do

# Create directories in $RTARGET to mimick source directory hiearchy
if ! ssh -i $RKEY $RUSER@$RMACHINE “test -d $RTARGET”; then
ssh -i $RKEY $RUSER@$RMACHINE “mkdir -p $RTARGET”
fi
rsync $VERBOSE $EXCLUDE -auzr –delete -e “ssh -i $RKEY” $source/ $RUSER@$RMACHINE::$DOMINIO
done
echo “Setting write permisson on remote directory…”
ssh -i $RKEY $RUSER@$RMACHINE “chown web2:client2 -R $RTARGET/*”
echo “uncompressing mysql kbs database backup…..”
ssh -i $RKEY $RUSER@$RMACHINE “gunzip $RTARGET/web/$FILE”
echo “Restoring mysql kbs database backup…..”
ssh -i $RKEY $RUSER@$RMACHINE “mysql kbs <$RTARGET/web/$FILE2" exit 0

Script modificado para respaldar solo una base de datos mysql_kb_dump.sh

#!/bin/bash
#Agregue la siguiente variable para solo respaldar una base
databases=”kbs”
USER=”root”
PASSWORD=””
OUTPUT=”/var/www/clients/client0/web7/web”
rm -f $OUTPUT/`date +%Y%m%d`.$db.sql
rm -f $OUTPUT/`date +%Y%m%d`.$db.sql.gz
find $OUTPUT”/” -type f -name ‘*.gz’ -mtime +14 -exec rm {} \;
#Comente la linea de abajo para que no se generen todas las bases solo la definida en la variable de arriba
#databases=`mysql –user=$USER –password=$PASSWORD -e “SHOW DATABASES;” | tr -d “| ” | grep -v Database`
for db in $databases; do
if [[ “$db” != “mysql” ]] && [[ “$db” != “performance_schema” ]] && [[ “$db” != “information_schema” ]] && [[ “$db” != _* ]] ; then
echo “Dumping database: $db”
rm -f $OUTPUT/`date +%Y%m%d`.$db.sql
rm -f $OUTPUT/`date +%Y%m%d`.$db.sql.gz
mysqldump –force –opt –routines –add-drop-table –events –user=$USER –password=$PASSWORD –databases $db > $OUTPUT/`date +%Y%m%d`.$db.sql
gzip $OUTPUT/`date +%Y%m%d`.$db.sql
echo “GZip created: “$OUTPUT/`date +%Y%m%d`.$db.sql.gz
echo “”
fi
done
echo “Done!!!”

Table of Contents

Deja un comentario