15 minutos que pueden salvar la vida de un dba
Backup, Bases de datos, General, Servidores, Shell, Unix Añadir comentario
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):
28 de Enero de 2009 at 13:16
Excelente explicación!!!…es cierto! solo lleva 15 minutos y funciona!!!.
Un saludo!.