15 minutos que pueden salvar la vida de un dba

Backup, Bases de datos, General, Servidores, Shell, Unix Añadir comentario

chart-mysql-zrm-no-brg

Si, reconozco que es una de las tareas más tediosas y aburridas que existen, pero implementar una correcta política de copias de seguridad puede salvar ‘tu vida’, coloquialmente hablando.

Anteriormente hablamos sobre la instalación de rdiff-backup para realizar copias de seguridad incrementales, también comentamos en otra ocasión cómo realizar conexiones ssh con llaves encriptadas para poder copiar archivos de forma segura entre servidores vía scp.

Desgraciadamente, no todos tenemos el tiempo suficiente para crear nuestros propios scripts personalizados para realizar las copias de seguridad, por lo que hoy INSTALAREMOS Y CONFIGURAREMOS EN SÓLO 15 MINUTOS ZRM (Zmanda Recovery Manager for Mysql), una sencilla, potente y fiable utilidad (gratuita) para Mysql que se encargará de una de las tareas fundamentales de cualquier administrador de base de datos, las copias de seguridad.

ZRM soporta cualquiera de los Storage Engines de Mysql y realiza tanto backups incrementales como backups totales. ZRM también soporta la última versión de Mysql (5.1), con soporte para realizar backups de particiones, de las que hablaremos más adelante.

1. Requisitos previos:

  • Version Mysql superior a 4.1 (Soporta Mysql 5 y Mysql 5.1)
  • Perl (Perl::DBI, Perl::XML)

En nuestro caso instalaremos el paquete ya compilado con los binarios en Centos 5.

2. Instalación en el servidor mysql:

2.1 Librerías Perl

yum install perl-libxml-perl perl-dbi perl-xml-parser

2.2 Zamanda Recovery Manager

Descargamos las ultimas versiones de ZRM y las instalamos, en nuestro caso vamos a realizar el backup en local en el mismo servidor, por tanto instalamos tanto la versión cliente como la versión servidor en la misma máquina:

wget http://www.zmanda.com/downloads/community/ZRM-MySQL/2.1/RPM/MySQL-zrm-2.1-1.noarch.rpm
rpm -ivh MySQL-zrm-2.1-1.noarch.rpm
wget http://www.zmanda.com/downloads/community/ZRM-MySQL/2.1/RPM/MySQL-zrm-client-2.1-1.noarch.rpm
rpm -ivh MySQL-zrm-client-2.1-1.noarch.rpm
2.2.1 Archivos y directorios importantes creados por la instalación:
ls -lh /usr/bin/mysql-zrm*

-rwxr-x--- 1 root root 86K Oct 16 15:04 /usr/bin/mysql-zrm
-rwxr-x--- 1 root root 26K Oct 16 15:04 /usr/bin/mysql-zrm-reporter
-rwxr-x--- 1 root root 13K Oct 16 15:04 /usr/bin/mysql-zrm-scheduler

ls -lh /etc/mysql-zrm/

-rwxr-x--- 1 root root 9.1K Oct 16 15:04 mysql-zrm.conf
-rwxr-x--- 1 root root   46 Oct 16 15:04 mysql-zrm-release
-rwxr-x--- 1 root root 2.8K Oct 16 15:04 mysql-zrm-reporter.conf
drwxr-x--- 2 root root 4.0K Oct 16 15:04 plugins
drwxr-x--- 4 root root 4.0K Oct 17 11:53 plugin-templates

3 Configuración de ZRM:

3.1 Crear un usuario para realizar el backup

mysql -u admin -p mysql
grant ALL PRIVILEGES on *.* to 'backup-user'@'localhost' identified by 'passpass123';

3.2 Crear un perfil para el backup

En este caso, vamos a realizar un backup total diario, por tanto, vamos a crear el perfil “daily” para almacenar los parámetros de configuración del backup, también copiaremos el archivo de configuración de ejemplo que nos servirá como base.

cd /etc/mysql-zrm
mkdir daily
cp -pr mysql-zrm.conf daily
cd daily

Importante: El usuario y contraseña que hemos creado para el acceso al mysql se almacenará en texto plano, por tanto, es importante cambiarle los permisos para que nadie más tenga acceso.

chmod 700 mysql-zrm.conf

A continuación editamos el archivo mysql-zrm.conf e incluimos la configuración. Nota: ZRM dispone de opciones de configuración avanzadas, para éste ejemplo hemos indicado los siguientes parámetros básicos (en el archivo de configuracion estan explicados todos los parametros):

backup-level=0 # Backup total
backup-mode=logical # Backup mediante mysqldump
destination=/backups/mysql # Almacen para los backups, en nuestro caso es un montaje de otro disco duro, si lo preferimos podría ser un montaje de un NFS.
retention-policy=10D # Almacenar los backups por 10 dias.
compress=1 # Comprimir los backups
all-databases=1 # Incluir todas las bases de datos, si lo preferimos podemos especificar las bbdds con databases=midb1 midb2 midb3...
user="backup-user" # Usuario para la conexión
password="passpass123" # Contraseña
mailto="backups@midominio.com" # Para recibir el resultado del backup por email

3.3 Probar la configuración realizando un backup de prueba

A continuación utilizaremos el programador de tareas de ZRM para lanzar el primer backup de prueba de forma instantánea:

mysql-zrm-scheduler --now --backup-set daily

Una vez haya terminado, y si no nos devuelve errores (puede dar errores de conexión o de cualquier otro tipo), procedemos a revisar que el backup se ha realizado correctamente, para ello disponemos de diversas utilidades.

3.3.1 Verificación de hash del último backup:
mysql-zrm --action verify-backup --backup-set daily
verify-backup:INFO: ZRM for MySQL Community Edition - version 2.1
daily:verify-backup:INFO: Verification successful
3.3.2 Estado de los últimos backups realizados:
mysql-zrm-reporter --where backup-set=daily --show backup-status-info

REPORT TYPE : backup-status-info
backup_set  backup_date                  backup_level  backup_status         backup_type       comment
-----------------------------------------------------------------------------------------------------------------------------
daily  lun 22 dic 2008 05:01:47 CET               0  Backup succeeded      regular           ----
3.3.3 Rendimiento de los últimos backups realizados:
mysql-zrm-reporter --where backup-set=daily --show backup-performance-info

REPORT TYPE : backup-performance-info
backup_set  backup_date                  backup_level     backup_size  backup_size_compressed     backup_time   backup_type       compress_encrypt_time
----------------------------------------------------------------------------------------------------------------------------------------------------------------
daily  lun 22 dic 2008 05:01:47 CET               0       271.04 MB  40.28 MB                   00:00:20      regular           00:01:59

3.4 Programar el backup para que se realize de forma diaria

A continuación añadiremos la tarea al cron para que se ejecute de forma diaria. El programador de tareas de ZRM lo hará de forma automática por nosotros:

mysql-zrm-scheduler --add --interval daily --start 01:00 --backup-level 0 --backup-set daily

4. ¿Cómo recuperar los datos?

Primero determinaremos qué backup vamos a restaurar, para ello solicitamos la información de restore al reporter de ZRM:

mysql-zrm-reporter --show restore-info --where backup-set=daily

REPORT TYPE : restore-info
backup_set  backup_date                  backup_level  backup_directory                          backup_status         comment
-----------------------------------------------------------------------------------------------------------------------------------------------------
daily  lun 22 dic 2008 05:01:47                0  /backups/mysql/daily/20081222050147   Backup succeeded      ----

En nuestro caso sólo tenemos uno, por tanto, restauraremos el backup de “/backups/mysql/daily/20081222050147″.

mysql-zrm -restore --backup-set daily --source-directory /backups/mysql/20061025161624/

Nota: El script de restauración detiene automáticamente el mysql, por tanto, deberemos arrancarlo una vez hayamos comprobado que los datos han sido restaurados correctamente.

Y eso es todo, en 15 minutos tenemos nuestro servidor mysql libre de desgracias y dormiremos mucho más tranquilos :)

Links y referencias (En inglés):

1 Comentario sobre “15 minutos que pueden salvar la vida de un dba”

  1. Dulcinea Dice:

    Excelente explicación!!!…es cierto! solo lleva 15 minutos y funciona!!!.
    Un saludo!.

¿Tienes dudas, preguntas o comentarios?.

WP Theme & Icons by N.Design Studio
Entries RSS Comments RSS Iniciar sesión