El propósito de este tutorial, es mostrar como realizar copias de seguridad periódicamente de archivos y bases de datos MySql de nuestro servidor linux.
CONTENIDO
Necesario
Para realizar las copias de seguridad, necesitaremos tener instalado los paquetes vixie-cron y samba.
Será necesario disponer de otro ordenador en red conectado las 24 horas con un directorio compartido donde guardar las copias.
Cron (Información obtenida del manual original de RedHat 7.3)
Cron es un demonio que sirve para ejecutar tareas programadas según una combinación de la hora, día del mes, mes, día de la semana y semana.
Cron asume que el sistema está activo de forma continua. Si el sistema no está activo cuando está programada una tarea, Cron no se ejecuta.
Para usar el servicio cron, debe de tener el paquete RPM vixie-cron instalado y el servicio crond debe estar en funcionamiento. Para determinar si el paquete está instalado, use el comando rpm -q vixie-cron. Para determinar si el servicio está funcionando, utilice el comando service crond status (con service crond start iniciamos el demonio).
El fichero de configuración principal de cron, /etc/crontab, contiene las líneas siguientes:
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
HOME=/
# run-parts
01 * * * * root run-parts /etc/cron.hourly
02 4 * * * root run-parts /etc/cron.daily
22 4 * * 0 root run-parts /etc/cron.weekly
42 4 1 * * root run-parts /etc/cron.monthly
Las primeras cuatro líneas son variables que se usan para configurar el entorno en el que se ejecutan las tareas cron. El valor de la variable SHELL indica al sistema el entorno de shell que deberá utilizarse (en este ejemplo, el shell de bash) y la variable PATH define la ruta usada para ejecutar los comandos. El resultado de las tareas cron se envía por correo electrónico al nombre de usuario definido con la variable MAILTO. Si la variable MAILTO se define como una cadena vacía (MAILTO=""), no se enviará correo electrónico. La variable HOME puede utilizarse para establecer el directorio principal que deberá usarse al ejecutar los comandos o scripts.
Cada línea del fichero /etc/crontab tiene el formato siguiente:
minute hour day month dayofweek command
En cualquiera de los valores antes indicados, se puede utilizar un asterisco (*) para especificar todos los valores válidos. Por ejemplo, un asterisco para el valor de mes significa que el comando se ejecutará cada mes dentro de las limitaciones del resto de los valores.
Un guión (-) entre los números enteros indica un intervalo de números enteros. Por ejemplo, 1-4 significa los números enteros 1, 2, 3 y 4.
Una lista de valores separados por comas (,) especifica una lista. Por ejemplo, 3, 4, 6, 8 indica esos cuatro números enteros.
La barra (/) puede utilizarse para especificar valores de pasos. El valor de un número entero se puede omitir dentro de un intervalo si se indica a continuación del intervalo lo siguiente /<número entero>. Por ejemplo, 0-59/2 puede usarse para definir el resto de los minutos del campo minuto. Los valores de pasos también pueden utilizarse con un asterisco. Por ejemplo, el valor */3 puede usarse en el campo de mes para omitir el tercer mes.
Configuración de una tarea con Cron
En el fichero de configuración principal de cron, /etc/crontab, vamos a agregar una nueva línea, para que cada día a las 3 de la mañana ejecute el archivo backup.sh, el cual vamos a introducir las instrucciones para realizar las copias de seguridad.
01 3 * * * root sh /root/backup.sh
Esta línea ejecuta como el usuario root el archivo backup.sh el primer minuto de las 3 de la madrugada, todos los días de todos los meses.
Hay que reiniciar el demonio con service crond restart una vez ha sido modificado.
Realizar copia de seguridad
El funcionamiento teórico es:
Antes de empezar con la copia de seguridad crearemos un directorio denominado /root/scripts, y dentro del mismo uno denominado /root/scripts/mnt donde obtendremos la información de hora de inicio,final,... de las copias, y donde montaremos con el samba la unidad compartida a realizar las copias.
# cd /root
# mkdir scripts
# cd scripts
# mkdir mnt
Este será nuestro archivo backup.sh. Este archivo, realiza siete copias de seguridad de los archivos, obteniendo lunes.tar.gz, martes.tar.gz, etc... A la semana, la copia es reemplazada. Igualmente, realiza la copia de la base de datos MySQL, obteniendo lunes.mysql.gz, martes.mysql.gz, etc...
#Modifica estos parámetros dependiendo de tus necesidades
#Directorio donde guardar los archivos log DirectorioLog="/root/scripts" #Ruta de la unidad compartida UnidadCompartida="//192.168.0.11/Misdoc" #Usuario para la unidad compartida Usu="usuario" #Password para la unidad compartida Pas="password" #Directorio vacío donde montar la unidad compartida PuntoMontaje="/root/scripts/mnt" #Directorio a copiar DirectorioCopiar="/home/httpd" #Directorio del MySQL (termina con /) DirectorioMySQL="/usr/local/mysql/bin/" #Usuario con privilegios para leer todas las bases de datos de Mysql UsuMySQL="root" #Password para el usuario de MySQL PasMySQL="123456" diasemana=`date +%w`
# ***MONTA EL DIRECTORIO COMPARTIDO***
# ***REALIZA COPIA DE LOS ARCHIVOS***
# ***REALIZA COPIA DE LA BASE DE DATOS MYSQL***
# ***DESMONTA EL DIRECTORIO COMPARTIDO***
# Si no se hubiera podido montar el directorio compartido, toda la copia se habría realizado en el directorio mnt, por lo que eliminamos su contenido una vez desmontado.
# Inserta una línea en blanco en el archivo .log
|