Administración - Copias de Seguridad

Copias de seguridad simples

Bueno, esto está repetido hasta la saciedad: debes hacer copias de seguridad de tu sistema. Pero cuando se trata de un Sistema que no es tu equipo personal, sino que es un Servidor que incluye páginas web, archivos de usuarios, correos personales y del Centro, ... no hacerlas es un delito.

Siguiendo con el tópico: hemos protegido nuestro Servidor con medidas de seguridad extremas, lo hemos blindado, le hemos instalado un SAID para que no le afecten los picos de corriente y pueda aguantar breves apagones, ... todo eso no sirve para nada si se va el disco duro a hacer gárgaras.

Vale, vale. Ya estamos convencidos. ¿Qué volcar? ¿Cada cuánto tiempo? ¿Cómo? ¿Dónde? No vamos a hacer aquí un tratado sobre las copias de seguridad. Sólo describir qué hacemos en nuestro caso. Así lo realizaba al principio:

  1. ¿Qué? Por supuesto, la carpeta de configuración /etc/, al tener un servidor web /var/www/ y las bases de datos de MySQL /var/lib/mysql/. En otro orden, los directorios personales de los usuarios, que con nuestra configuración contienen sus correos, así que también /home/.
  2. ¿Cada cuánto tiempo? Una vez a la semana. Los viernes aprovechaba la hora del recreo para ejecutar desde mi portátil, vía ssh, un simple script artesanal y me llevaba en él los valiosos datos.
  3. ¿Cómo? Pues con este simple script, que no usa más que tar y gzip.
  4. ¿Dónde? Pues siempre dejaba las dos últimas copias de seguridad en el propio disco duro del Servidor. Pero, como señalé antes, me llevaba en el momento de realizar cada una a otro ordenador que ni siquiera estaba en el Centro. Y luego pasándolas a un DVD regrabable.

Volcados más elaborados: drakbackup

Llega un momento en el que las copias deben realizarse a diario y, claro, esto provoca que el método anterior no sea válido: primero porque uno puede estar todos los días pendiente de hacerlas y, segundo, porque el tamaño de las copias ya es demasiado grande para almacenarlas con el método anterior: se imponen los respaldos incrementales o diferenciales.

Si el tamaño no fuera ningún problema, bastaría con ejecutar el script anterior con cron y punto. Pero sigue teniendo un inconveniente: sacar las copias del propio sistema. Una solución simple es colocarle una regrabadora de DVD y añadir al script una línea de copiado al dvd.

Bueno, hay otros métodos: uno de ellos es aprovechar el Servidor Interno. Éste tiene también es un Sistema Linux, que tiene dos discos duros Serial Ata en RAID-1. Así, las copias de seguridad estarían doblemente seguras. De modo que a configurar en el Interno un servidor SSH, reforzar la seguridad si cabe aún más y a poner en marcha un programa: copias semanales completas y diarias incrementales/diferenciales y traspaso vía ssh (con rsync o no) a otro equipo. Todo automático y enviando su correo (¡otro más!) informando del proceso. Y que incluya un sistema de registros que permita una recuperación total/parcial partiendo de un respaldo concreto. ¿Cómo hacer todo esto? Pues con la herramienta de copias de seguridad de Mandriva: drakbackup.

Aclaremos. Tenemos dos equipos conectados en red, que son nuestro Servidor (A) y el receptor de los respaldos (B). En B configuraremos un servidor SSH que admitirá conexiones desde A, y daremos de alta en B a un usuario llamado backupweb con contraseña clave_de_backupweb. Atención a los cortafuegos de ambos equipos: permitir a nuestro Servidor (A) conectarse como cliente-ssh de B. Y cuidar desde dónde y cómo se puede acceder al equipo receptor B: éste recibirá información confidencial.

Bien, ejecutamos en nuestro Servidor (A):

# drakbackup

En la primera ventana de esta herramienta gráfica elegimos "Configuración Avanzada". Y ahora se nos ofrecen cuatro campos para configurar: "¿Qué?" "¿Dónde?" "¿Cuándo?" y "Más opciones". Veámoslas paso a paso.

  • ¿Qué?
    1. Sistema
      • Elegimos respaldar sus archivos del sistema (/etc).
      • Elegimos usar respaldos diferenciales (se realiza un respaldo base original y luego sólo se guardan los archivos que cambiaron).
      • Tras hacer clic en guardar vamos al punto siguiente:
    2. Usuarios
      • Elegimos todos los usuarios.
      • Señalamos no incluir la cache del navegador (aunque esto no sirve para nada, pues no hay navegación).
      • Y de nuevo elegimos usar respaldos diferenciales.
      • Tras hacer clic en guardar vamos al punto siguiente:
    3. Otros
      • De nuevo elegimos usar respaldos diferenciales.
      • Ahora agregamos los directorios /var/www/ y /var/lib/mysql/.
      • Tras hacer clic en guardar vamos al punto siguiente:
    4. Al hacer clic en guardar vamos ahora a...
  • Dónde
    1. Disco rígido / NFS
      • Dejamos como directorio donde guardar /var/lib/drakbackup/.
      • Dejamos el tamaño máximo señalado.
      • Y le indicamos que borraremos los respaldos incrementales o diferenciales de más de 7 días.
      • Tras hacer clic en guardar vamos al punto siguiente:
    2. Red
      • Señalamos que vamos a usar una conexión de red para copiar el respaldo y elegimos como método de red ssh.
      • Ahora completamos los datos del equipo receptor (B): su ip, el directorio /home/backupweb/, el nombre de conexión backupweb y su contraseña clave_de_backupweb, marcando que se recuerde ésta.
      • Si hubiésemos generado un par de claves publica/privada en A y las hemos copiado en B y hubiésemos generado una "frase de paso vacía" ahora elegiríamos la opción "Otras claves ya están en su lugar". Pero como no hemos hecho esto, ¿cómo se va a realizar una conexión automática, sin intervención del usuario? Pues usaremos la opción "Crear/Transferir claves de respaldo para SSH" y hacemos clic en "transferir ahora". Ahora drakbackup se encargará de todo: generará las claves en A y las guardará en /root/.ssh/ y las copiará en el siguiente directorio de B: /home/drakbackweb/.ssh/autorized_keys bajo la identidad identity-drakbackup. Ahora transferirá los archivos usando el comando

        # scp -P 22 -i /root/.ssh/identity-drakbackup /var/lib/drakbackup/archivo_de_respaldo

      • Ahora hacemos clic en guardar
    3. Y al hacer clic en guardar vamos ahora a...
  • Cuándo
    1. Marcamos en "Usar servidor" y elegimos como intervalo de tiempo "cada día".
    2. Y elegimos como soporte para la copia de respaldo la opción "ssh"
    3. Al hacer clic en guardar vamos ahora a...
  • Más opciones
    1. Elegimos como sistema de archivado "tar".
    2. Y de tipo de compresión "tar.gz".
    3. Indicamos usar los archivos ".backupignore" Éstos son archivos de texto plano que podemos colocar allí donde queramos evitar que un directorio o determinados archivos no se copien, y que sólo deben contener eso, la lista de aquello que no queremos que se respalde.
    4. Marcamos ahora "enviar un reporte por correo-e a "root" con remitente "drakbackup" y con servidor SMTP "localhost".
    5. Y le decimos que queremos ver el archivo de registro de restauraciones cuando tengamos que hacer una restauración.
    6. Al hacer clic en guardar vamos ahora a...
  • Y al hacer clic en guardar salimos de la Configuración avanzada y volveremos a la ventana inicial del programa.

Ahora podemos echar un vistazo a lo que hemos estado señalando pulsando en "Ver configuración" e incluso en "Respaldar ahora" para crear nuestro respaldo base y traspaso al equipo B. De esta forma, cuando cron ponga en marcha el proceso ya sólo se realizará un respaldo diferencial.

También desde este menú inicial podemos proceder a una restauración usando "Restaurar", que nos permitirá restaurar todos, varios, o un sólo archivo partiendo del respaldo base o de uno diferencial concreto.

Copias de seguridad de bases de datos

Bueno, con nuestras copias de seguridad globales también nos llevamos, por ejemplo, las que realiza Moodle periódicamente. Pero observemos que las bases de datos se copian en crudo, es decir, copiando todo el bloque /var/lib/mysql/.

¿Una copia de seguridad específica de nuestras bases de datos que luego permita un replicado en otro equipo? Así lo hice para actualizar PHP-Nuke: me lo llevé todo a otro equipo, repliqué la bases de datos del portal y le apliqué parches y actualicé. Sólo tras conseguirlo lo hice en el Servidor.

Un script para respaldar bases de datos de MySQL es automysqlbackup. Pero yo lo veo demasiado completo.

Me he cocinado uno particular, más cutre, pero más sencillo, que no coloco aquí porque no me fío.

Esto es todo.

. : .