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 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 hacia 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 muchos repositorios de distribuciones Linux, pero a veces la versión empaquetada es bastante antigua, y es mejor instalarlo manualmente. Instalarlo es tan sencillo 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 a un equipo remoto con SSH
Sección titulada «Copia de seguridad a 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 SSH mejorada
Sección titulada «Esta es una versión SSH mejorada»#!/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 a una unidad de red mapeada
Sección titulada «Copia de seguridad a una unidad de red mapeada»#!/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 lo siguiente:
$ sudo mkdir /root/logs$ sudo crontab -eY añada estas líneas según su configuración:
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, use 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 quiere listar todos los ficheros de una copia de seguridad concreta:
$ borg list backup@bk-server.com:/mnt/backup/name::2018-02-07_09:27Si necesita acceder al contenido de una copia de seguridad, puede montarla como un sistema de ficheros local:
$ mkdir /tmp/backup$ borg mount backup@bk-server.com:/mnt/backup/name::2018-02-07_09:27 /tmp/backupAl final, quizá quiera desmontar la carpeta:
borg umount /tmp/backup