Una cosa es hacer un backup copiando el archivo de datos y entonces si que conviene parar la BBDD, pero con sistemas de gestión de bases de datos SQL tal como SQLSERVER, ORACLE,etc, no es imprescindible pararla.
A nivel básico se pueden hacer copias de 3 formas o niveles.
1- Parando y copiando los archivos físicos donde están los datos o sea sacando una "foto".
2- Haciendo un dump o volcado de la base de datos de forma total.
3- Haciendo exportación de las tablas de la base de datos.
El sistema primero es totalmente físico. Yo uso este script:
#!/bin/bash
#
#Definimos la fecha y el nombre de la carpeta
fecha=$(date +"%Y_%m_%d")
carpeta="backup_$fecha"
#
#Se monta el disco en red
#mount 192.168.0.78:/datos /mnt/nfs
mount -t vfat /dev/sdb /mnt/nfs
#
#Vamos al directorio donde hacemos la copia
cd /mnt/nfs/weewx/backup/
#
#Creamos la carpeta del dia
mkdir $carpeta
#
#Entramos en la carpeta generada
cd $carpeta
#
tar -cf var-lib-weewx.tar /var/lib/weewx/*
#
#Salimos del directorio
cd /
#Desmontamos el disco de red
umount /mnt/nfs
#
exit 0
Para el segundo sistema este:
#!/bin/sh
#
# dump_archive.sh
#
# requires sqlite3 (apt install sqlite3)
# adjust following line with path/file.sdb
DBFILE="/var/lib/weewx/weewx.sdb"
# dump
echo "Dump BBDD archive file $DBFILE to $DBFILE.dump.gz"
echo '.dump' | sqlite3 $DBFILE | gzip -c >$DBFILE.dump.gz
mv $DBFILE.dump.gz /home/pi/
Y para el tercer tipo de copia este script:
cd /home/pi
# sqlite3 /var/lib/weewx/weewx.sdb 'select * from archive;' > dump_archive.txt
DBFILE="/var/lib/weewx/weewx.sdb"
# dump
echo "Dump sqlite archive file $DBFILE to $DBFILE.dump.gz"
echo 'select * from archive;' | sqlite3 $DBFILE | gzip -c >/home/pi/dump_archive.txt.gz
Evidentemente están personalizados con mis puntos de montaje, mis directorios, etc.
Para recuperar cada tipo es diferente, el primero se hace parando y fisicamente copiando el fichero con la BBDD weewx.
El segundo habría que generar una BBDD vacía o borrar contenidos de tablas y hacer una importación del fichero dump.
El tercero es el que uso mas a menudo en caso de problemas ya que para recuperar meto una base de datos anterior y hago importación de las tables, habiendo eliminado antes las cabeceras con las creaciones o borrados que lleva en el código. Como por defecto no pueden haber campos duplicados solo se importan los registros que no existen previamente en la BBDD o sea que la actualizo al punto de cuando se sacó el backup.
Normalmente con las Davis y su dataloger, paro BBDD, recupero una anterior, hago la importación y luego actualizo con el contenido del dataloger hasta ponerme al día, normalmente no pierdo ni un solo periodo de datos aunque para reparar haya parado varias horas o incluso con una rotura de finales de agosto (malditas SD) habiendo parado un dia entero.
Saludos.
Espero que esta disertación sobre métodos de copia de sistemas de bases de datos SQL sea de ayuda para alguien.
Chao, 73 de Xavi, EA5ZF