Copia de seguridad y restauración en Linux con BorgBackup
Borg es un programa de copia de seguridad con deduplicación que también admite compresión y cifrado autenticado. Proporciona una forma eficiente y segura de hacer copias de seguridad de los datos. La técnica de deduplicación de datos que utiliza 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 adecuado 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.
Instalación
Sección titulada «Instalación»Borg está incluido en los repositorios de muchas distribuciones de Linux, pero a veces la versión empaquetada es bastante antigua y es mejor 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/borgScript de ejemplo
Sección titulada «Script de ejemplo»Copia de seguridad en un equipo remoto con SSH
Sección titulada «Copia de seguridad en un equipo remoto con 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 userif [ $(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
# Databaseecho "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=6Esta es una versión mejorada con SSH
Sección titulada «Esta es una versión mejorada con SSH»#!/bin/bash
# ConfigurationDATABASE_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 initializedborg list ${BACKUP_REPO} > /dev/nullRESULT=$?; if [[ ${RESULT} != 0 ]]; then echo "Initializing backup repository..." borg init -e none ${BACKUP_REPO}fi
# Databaseecho "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 fidone
borg create -v --stats ${BACKUP_REPO}::'{now:%Y-%m-%d_%H:%M}' /opt /var /etc /root /homeRESULT=$?; if [[ ${RESULT} != 0 ]]; then echo "****************************************************" echo " Backup error => exit code: ${RESULT}" echo "****************************************************"fi
# Prune old backupsecho "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 userif [ $(id -u) != 0 ]; then echo "You should run this script as root"; exit; fi
# Mount diskif 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; fifi
# Initialize repositoryecho "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
# Databaseecho "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 backupecho "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 disksyncumount "$BACKUP_DIR"echo "$BACKUP_DIR umounted";Configurar crontab
Sección titulada «Configurar crontab»Para instalar la tarea cron, ejecute:
$ sudo mkdir /root/logs$ sudo crontab -eY añada estas líneas según su configuración personal:
MAILTO=nomail@openkm.comPATH=/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).logRecuperación
Sección titulada «Recuperación»Para listar todas las copias de seguridad almacenadas, utilice el parámetro de acción list:
$ borg list backup@bk-server.com:/mnt/backup/name2018-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 archivos de una copia de seguridad concreta:
$ borg list backup@bk-server.com:/mnt/backup/name::2018-02-07_09:27En caso de que necesite acceder al contenido de una copia de seguridad, puede montarla como un sistema de archivos local:
$ mkdir /tmp/backup$ borg mount backup@bk-server.com:/mnt/backup/name::2018-02-07_09:27 /tmp/backupAl final, puede que le interese desmontar la carpeta
borg umount /tmp/backup