Ir al contenido
Otras versiones

Cargando…

Copia de seguridad y restauración en Linux con BorgBackup

Borg es un programa de copia de seguridad con deduplicación que además admite compresión y cifrado autenticado. Proporciona una forma eficiente y segura de realizar copias de seguridad de los datos. La técnica de deduplicación de datos hace que Borg sea adecuado para copias de seguridad diarias, ya que solo se almacenan los cambios. La técnica de cifrado autenticado lo hace ideal para copias de seguridad en destinos que no son totalmente de confianza.

Puede encontrar una descripción más detallada de BorgBackup en https://borgbackup.readthedocs.io/en/stable/index.html.

Borg está incluido en los repositorios de muchas distribuciones de Linux, pero en ocasiones la versión empaquetada es bastante antigua y es preferible instalarlo manualmente. Esta instalación es tan sencilla como:

$ wget https://github.com/borgbackup/borg/releases/download/1.1.5/borg-linux64
$ chmod +x borg-linux64
$ mv borg-linux64 /usr/local/bin/borg

Copia de seguridad en un equipo remoto mediante SSH

Sección titulada «Copia de seguridad en un equipo remoto mediante SSH»
#!/bin/bash
#
## BEGIN CONFIG ##
HOST=$(uname -n)
OPENKM_DB="okmdb"
OPENKM_HOME="/home/openkm"
TOMCAT_HOME="$OPENKM_HOME/tomcat"
DATABASE_EXP="$OPENKM_HOME/db"
BACKUP_HOST="backup@bk-server.com"
BACKUP_DIR="/mnt/backup/$HOST"
BACKUP_REPO="${BACKUP_HOST}:${BACKUP_DIR}"
## END CONFIG ##
# Check root user
if [ $(id -u) != 0 ]; then echo "You should run this script as root"; exit; fi
echo "Backup destination ${BACKUP_REPO}"
if (ssh ${BACKUP_HOST} "[ ! -d ${BACKUP_DIR} ]"); then
echo "Initialize backup repository: ${BACKUP_DIR}"
ssh ${BACKUP_HOST} "mkdir -p ${BACKUP_DIR}"
borg init -e none ${BACKUP_REPO}
fi
# Database
echo "Backup MySQL databases"
mkdir -p ${DATABASE_EXP}
echo "- Backuping $OPENKM_DB..."
mysqldump --single-transaction --add-drop-table --quick ${OPENKM_DB} > ${DATABASE_EXP}/mysql_$OPENKM_DB.sql
borg create -v --stats ${BACKUP_REPO}::'{now:%Y-%m-%d_%H:%M}' ${OPENKM_HOME}
borg prune -v ${BACKUP_REPO} --list --keep-daily=7 --keep-weekly=4 --keep-monthly=6
#!/bin/bash
# Configuration
DATABASE_EXP="/home/openkm/db"
BACKUP_HOST="backup@bk-server.com"
BACKUP_DIR="/mnt/backup/$HOST"
BACKUP_REPO="${BACKUP_HOST}:${BACKUP_DIR}"
echo "### BEGIN: $(date +"%x %X") ###"
echo "Backup destination ${BACKUP_REPO}"
TBEGIN=$(date +"%s")
# Check if the repository is already initialized
borg list ${BACKUP_REPO} > /dev/null
RESULT=$?; if [[ ${RESULT} != 0 ]]; then
echo "Initializing backup repository..."
borg init -e none ${BACKUP_REPO}
fi
# Database
echo "Backup MySQL databases"
mkdir -p ${DATABASE_EXP}
MYSQL_DBS=$(mysqlshow | awk '(NR > 2) && (/[a-zA-Z0-9]+[ ]+[|]/) { print $2 }');
for DB in $MYSQL_DBS; do
if [[ $DB != "mysql" && $DB != "test" && $DB != "information_schema" && $DB != "performance_schema" ]]; then
echo "- Backuping $DB..."
mysqldump --single-transaction --add-drop-table --quick ${DB} > ${DATABASE_EXP}/mysql_$DB.sql
fi
done
borg create -v --stats ${BACKUP_REPO}::'{now:%Y-%m-%d_%H:%M}' /opt /var /etc /root /home
RESULT=$?; if [[ ${RESULT} != 0 ]]; then
echo "****************************************************"
echo " Backup error => exit code: ${RESULT}"
echo "****************************************************"
fi
# Prune old backups
echo "Prune old backups"
borg prune -v --list --keep-within=30d ${BACKUP_REPO}
RESULT=$?; if [[ ${RESULT} != 0 ]]; then
echo "****************************************************"
echo " Backup error => exit code: ${RESULT}"
echo "****************************************************"
fi
TEND=$(date +"%s")
TDIFF=$(($TEND-$TBEGIN))
echo "### END: $(date +"%x %X") - $(($TDIFF / 60)) mins and $(($TDIFF % 60)) secs ###"

Copia de seguridad en una unidad de red montada

Sección titulada «Copia de seguridad en una unidad de red montada»
#!/bin/bash
#
## BEGIN CONFIG ##
HOST=$(uname -n)
OPENKM_DB="okmdb"
OPENKM_HOME="/home/openkm"
TOMCAT_HOME="$OPENKM_HOME/tomcat"
DATABASE_EXP="$OPENKM_HOME/db"
BACKUP_DIR="/mnt/backup"
BACKUP_REPO="${BACKUP_DIR}/${HOST}"
## END CONFIG ##
# Check root user
if [ $(id -u) != 0 ]; then echo "You should run this script as root"; exit; fi
# Mount disk
if mount | grep "$BACKUP_DIR type" > /dev/null; then
echo "$BACKUP_DIR already mounted";
else
mount "$BACKUP_DIR";
if mount | grep "$BACKUP_DIR type" > /dev/null; then
echo "$BACKUP_DIR mounted";
else
echo "$BACKUP_DIR error mounting";
exit -1;
fi
fi
# Initialize repository
echo "Backup destination ${BACKUP_REPO}"
if ! ls -l ${BACKUP_DIR} | grep '^d' | grep "${HOST}" > /dev/null; then
echo "Initialize backup repository: ${BACKUP_REPO}"
mkdir ${BACKUP_REPO}
borg init -e none ${BACKUP_REPO}
fi
# Database
echo "Backup MySQL databases"
mkdir -p ${DATABASE_EXP}
echo "- Backuping $OPENKM_DB..."
mysqldump --single-transaction --add-drop-table --quick ${OPENKM_DB} > ${DATABASE_EXP}/mysql_$OPENKM_DB.sql
# Data backup
echo "File system backup: ${BACKUP_REPO}"
borg create -v --stats ${BACKUP_REPO}::'{now:%Y-%m-%d_%H:%M}' ${OPENKM_HOME}
borg prune -v ${BACKUP_REPO} --list --keep-daily=7 --keep-weekly=4 --keep-monthly=6
# Umount disk
sync
umount "$BACKUP_DIR"
echo "$BACKUP_DIR umounted";

Para instalar la tarea programada, ejecute lo siguiente:

Ventana de terminal
$ sudo mkdir /root/logs
$ sudo crontab -e

Y añada estas líneas según su configuración:

MAILTO=nomail@openkm.com
PATH=/usr/sbin:/usr/bin:/sbin:/bin:/usr/local/bin
@daily /root/backup.sh 2>&1 | tee /root/logs/backup.$(date +\%Y.\%m.\%d_\%H.\%M.\%S).log

Para listar todas las copias de seguridad almacenadas, utilice el parámetro de acción list:

Ventana de terminal
$ borg list backup@bk-server.com:/mnt/backup/name
2018-02-07 Thu, 2018-02-07 10:12:31 [c878b314107c76b2d86ba75a9e5b2a216bf1f0d6b824313396c51ccda02a72e6]
2018-02-08 Thu, 2018-02-08 10:15:45 [2cf11f13bc7a2c9c0f1a0c243da52ac4b7657e7c6429cca0bf06a80467837f1e]

Si desea listar todos los ficheros de una copia de seguridad determinada:

Ventana de terminal
$ borg list backup@bk-server.com:/mnt/backup/name::2018-02-07_09:27

Si necesita acceder al contenido de una copia de seguridad, puede montarla como un sistema de ficheros local:

Ventana de terminal
$ mkdir /tmp/backup
$ borg mount backup@bk-server.com:/mnt/backup/name::2018-02-07_09:27 /tmp/backup

Al finalizar, puede que desee desmontar la carpeta:

Ventana de terminal
borg umount /tmp/backup