Post

muevo_sqls.sh

muevo_sqls.sh

muevo_sqls.sh

Este script empaqueta dumps SQL desde un origen local, monta un destino remoto y mueve los tarballs al almacenamiento mensual.

Uso en la infraestructura

Se usa para sacar dumps SQL del host y conservarlos en almacenamiento externo con retencion separada.

RolServicioImpacto si falla
Archivado SQLBackups NextcloudLos dumps quedan solo en local
Copia externaNAS/almacenamientoSe pierde proteccion ante fallo del host
Limpieza origenDisco localPuede llenarse si no se depura

No debe borrar dumps locales hasta confirmar que el tarball llego al destino.

Ejecucion programada

15 3 * * 0 /ruta/origen/scripts/muevo_sqls.sh

Flujo

  1. Entra en /ruta/origen/backups-locales.
  2. Comprime la carpeta sqls en /tmp.
  3. Monta un destino remoto de backups mensuales.
  4. Mueve el tarball a /ruta/destino/backups-mensuales/sqls.
  5. Desmonta el destino.
  6. Elimina los dumps SQL del origen local.

Script original

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
#!/bin/bash
LOG=/var/log/muevo_sqls.log

logline() {
    echo "$(date '+%Y-%m-%d %H:%M:%S') $*" >> "$LOG"
}

FECHA=D$(date +%Y%m%d)
FILEIN='sqls'
FILEOUT='sqls.'
cd /ruta/origen/backups-locales/

logline "Inicia la compresion de de los filesystems" > $LOG
tar cvpzPf /tmp/$FILEOUT$FECHA.tar.gz $FILEIN >> $LOG
if [ $? -ne 0 ]; then
  logline "Error en la  sincronizacion de tools"
  exit 5
else
  logline "Arhivos tartarizados"
  logline "Montamos la unidad de red"
  mount <HOSTNAME>:/ruta/destino/backups-mensuales/nextcloud /mnt/destino
  if [ $? -ne 0 ]; then
    logline "Error montando la unidad de red"
    exit 7
  else
    logline "Unidad Montada"
    logline "Muevo el tar a la unidad de red"
    mv /tmp/sqls*tar.gz /mnt/destino/sqls
    if [ $? -ne 0 ]; then
      logline "Error moviendo archivos"
      exit 9
    else
      logline "Desmontamos la unidad de red"
      umount -l /mnt/destino
      if [ $? -ne 0 ]; then
        logline "Error desmontando unidad"
        exit 11
      else
        logline "Eliminamos archivos en origen"
        rm -f /ruta/origen/backups-locales/sqls/bck_*
        if [ $? -ne 0 ]; then
          logline "Error eliminando archivos"
          exit 13
        else
          logline "Proceso finalizado correctamente"
          exit 0
        fi
      fi
    fi
  fi
fi
exit 0

Version revisada

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#!/usr/bin/env bash
set -euo pipefail

LOG="/var/log/muevo_sqls_$(date +%Y%m%d).log"
FECHA="$(date +%Y%m%d)"
ORIGEN_SQL="/ruta/origen/backups-locales/sqls"
TMP_TAR="/tmp/sqls_${FECHA}.tar.gz"
MOUNT_DESTINO="/mnt/destino/backups-mensuales"
NFS_DESTINO="<HOSTNAME>:/ruta/destino/backups-mensuales"

tar czf "$TMP_TAR" -C "$(dirname "$ORIGEN_SQL")" "$(basename "$ORIGEN_SQL")"
mount "$NFS_DESTINO" "$MOUNT_DESTINO"
trap 'umount -l "$MOUNT_DESTINO" 2>/dev/null || true' EXIT
mv "$TMP_TAR" "$MOUNT_DESTINO/sqls/"
find "$ORIGEN_SQL" -type f -name 'bck_*.sql*' -print -delete >> "$LOG" 2>&1

Riesgos y mejoras

  • No borrar origen hasta confirmar copia en destino.
  • Usar find -type f y patrones concretos.
  • Registrar el tamaño del tar final.
  • Evitar mv /tmp/sqls*tar.gz por ser demasiado amplio.

Cambios y motivo

CambioMotivo
trap para desmontarevita dejar el NFS montado si falla un paso intermedio
tarball con nombre exactoevita mover ficheros de /tmp que no pertenecen al backup
find -type f -namelimita el borrado a ficheros esperados
no borrar antes de validar destinoreduce riesgo de perder dumps validos
This post is licensed under CC BY 4.0 by the author.