Backups en MySQL automatizados con AutoMySQLBackup

MySQL backup AutoMySQLBackup

Voy a explicar cómo realizar backups o copias de seguridad  de MySQL de forma automática con la herramienta AutoMySQLBackup en Linux.

AutoMySQLBackup permite crear, con una configuración básica, copias diarias, semanales y mensuales de una o de varias bases de datos MySQL en uno o en varios servidores MySQL. Además permite:

  • Notificar la ejecución de las copias de seguridad por correo electrónico.
  • Comprimir y cifrar las copias de seguridad.
  • Rotar las copias de seguridad.
  • Realizar copias de seguridad incrementales.

En mi caso lo voy a configurar para que realice copias completas comprimidas diarias y que realice una rotación de las semanales y de las diarias.

Lo primero que hago, en el directorio raíz de un usuario

/home/usuario

es crear un directorio propio para la herramienta.

mkdir AutoMySQLBackup

cd AutoMySQLBackup

Dentro de ese directorio descargo la herramienta AutoMySQLBackup. Comprueba si existe una versión más actual del script en la web del proyecto.

wget http://downloads.sourceforge.net/project/automysqlbackup/AutoMySQLBackup/AutoMySQLBackup%20VER%203.0/automysqlbackup-v3.0_rc6.tar.gz

Lo descomprimo

tar xvf automysqlbackup-v3.0_rc6.tar.gz

y aparecen los siguientes archivos

automysqlbackup
automysqlbackup.conf
CHANGELOG
install.sh
LICENSE
README

Ejecuto el script de instalación

./install.sh

Y lo primero que me pregunta cuál va a ser el directorio dónde va a estar el archivo de configuración:

### Checking archive files for existence, readability and integrity.

automysqlbackup … exists and is readable … md5sum okay 🙂
automysqlbackup.conf … exists and is readable … md5sum okay 🙂
README … exists and is readable … md5sum okay 🙂
LICENSE … exists and is readable … md5sum okay 🙂

Select the global configuration directory [/etc/automysqlbackup]:

Aquí indico el propio directorio

/home/usuario/AutoMySQLBackup

Lo siguiente que me pregunta es cuál es el directorio del archivo ejecutable

Select directory for the executable [/usr/local/bin]:

Le indico el mismo directorio que antes

/home/usuario/AutoMySQLBackup

y con el siguiente mensaje ya tenemos configurado el script.

### Creating global configuration directory /home/usuario/AutoMySQLBackup:

exists already … searching for config files:

### Copying files.

cp: `automysqlbackup.conf’ and `/home/usuario/AutoMySQLBackup/automysqlbackup.conf’ are the same file
cp: `LICENSE’ and `/home/usuario/AutoMySQLBackup/LICENSE’ are the same file
cp: `README’ and `/home/usuario/AutoMySQLBackup/README’ are the same file
cp: `automysqlbackup’ and `/home/usuario/AutoMySQLBackup/automysqlbackup’ are the same file

if running under the current user, you have to use the full path /home/usuario/AutoMySQLBackup/automysqlbackup since /usr/local/bin is not in ‘echo $PATH’

Setup Complete!

Acaba de crear un archivo a mayores.

myserver.conf

Este es el archivo en el que tengo que introducir la configuración básica del sistema de copia de seguridad. Introduzco los siguientes cambios, quitando el carácter “#”, que hace que la línea sea un comentario, que no sea tenido en cuenta.

#Uso un usuario con permiso total para evitar problemas de acceso a la base de datos

CONFIG_mysql_dump_username=’root’

#Contraseña del usuario anterior

CONFIG_mysql_dump_password=’mi_password’

# Las copias las voy a hacer en el propio equipo, por lo que uso localhost

CONFIG_mysql_dump_host=’localhost’

# Directorio base donde voy a dejar las copias de seguridad

CONFIG_backup_dir=’/home/usuario/AutoMySQLBackup/data’

# Listado de bases de datos. Si no indico nada usa todas las bases de datos

CONFIG_db_names=()

# Listado de bases de datos para incluir en la copia de seguridad mensual. Si no indico nada usa todas las bases de datos

CONFIG_db_month_names=()

# Listado de bases de datos a excluir si DBNAMES está vacío, i.e. ().

CONFIG_db_exclude=( ‘information_schema’  ‘performance_schema’ )

# Día del mes en el que se realiza la copia mensual

CONFIG_do_monthly=”01″

# Día de la semana en la que se realiza la copia semanal. El intervalo va desde el 1 para el lunes hasta el 7 para el domingo

CONFIG_do_weekly=”7″

# Rotación de las copias diarias. VALOR*24horas. Con esto me aseguro de tener copias diarias de los últimos 6 días

CONFIG_rotation_daily=6

# Rotación de las copias semanales. VALOR*24horas. Con esto me aseguro de tener copias semanales de los últimos 35 días; es decir, de las últimas 5 semanas

CONFIG_rotation_weekly=35

# Rotación de las copias mensuales. VALOR*24horas. Con esto me aseguro de tener copias mensuales de los últimos 5 años

CONFIG_rotation_monthly=1830

# Puerto de conexión a MySQL

CONFIG_mysql_dump_port=3306

# Compresión de la comunicaicón entre el servidor de backup y el de MySQL. Como la comunicación es local no la comprimo

CONFIG_mysql_dump_commcomp=’no’

# Uso de cifrado SSL en el mysqldump

CONFIG_mysql_dump_usessl=’no’

# Ubicación del archivo de socket de Unix que se puede utilizar en la conexión local

# Más información en https://dev.mysql.com/doc/refman/5.0/es/can-not-connect-to-server.html

CONFIG_mysql_dump_socket=”

# Incluir CREATE DATABASE en la copia de seguridad

CONFIG_mysql_dump_create_database=’yes’

# Separa los directorios de backup y los archivos para cada DB

CONFIG_mysql_dump_use_separate_dirs=’yes’

# Tipo de compresión gzip

CONFIG_mysql_dump_compression=’gzip’

# Almacenamiento de la última copia en una ubicación estándar para su uso por otros scripts

CONFIG_mysql_dump_latest=’no’

# Borra información temporal de los últimos archivos de backup

CONFIG_mysql_dump_latest_clean_filenames=’no’

# Creación de copias diferenciales

CONFIG_mysql_dump_differential=’no’

# Cifrado de los backups

CONFIG_encrypt=’no’

Tras introducir estos cambios, para probar la copia de seguridad ejecuto en el directorio de AutoMySQLBackup

./automysqlbackup myserver.conf

Solo queda configurar AutoMySQLBackup en el cron, de tal forma que se ejecute diariamente. Para ello ejecuto el comando:

crontab -e

que me permite editar mi archivo de cron.

Añado la siguiente línea para que el script se ejecute diariamente a las 4:00 de la mañana, momento en el que la máquina debe de tener poca carga:

# minuto hora día_de_semana mes día_de_semana URI

00 4 * * * /home/usuario/AutoMySQLBackup/automysqlbackup /home/usuario/AutoMySQLBackup/myserver.conf >> /home/usuario/AutoMySQLBackup/data/automysqlbackup.log

Tras guardar el archivo, puedo comprobar que el nuevo comando está en el archivo de configuración del cron ejecutando:

crontab -l

Como podéis ver, en el archivo

/home/usuario/AutoMySQLBackup/data/automysqlbackup.log

se va añadiendo la información que saca el programa al realizar cada copia de seguridad, por lo que si queréis ver el estado de la copia, basta con ejecutar

tail /home/usuario/AutoMySQLBackup/data/automysqlbackup.log

Y recordad que tenéis que:

  • Llevar esta copia de seguridad a otro equipo remoto, ya que en el mismo equipo solo nos vale si borramos algo por accidente, pero no si tenemos un problema en un disco, un incendio, un pico de tensión,…
  • Comprobar regularmente si la copia es correcta, ya que podemos tener un sentimiento falso de seguridad.

Errores

El único error que encontré fue que yo estaba utilizando rutas relativas en vez de absolutas en el script, y el error devuelto era del estilo del siguiente

./automysqlbackup/automysqlbackup: line 835: 6: Bad file descriptor
./automysqlbackup/automysqlbackup: line 836: 7: Bad file descriptor

Ya que tenía

/home/usuario/AutoMySQLBackup/automysqlbackup myserver.conf

en vez de

/home/usuario/AutoMySQLBackup/automysqlbackup /home/usuario/AutoMySQLBackup/myserver.conf

Gracias a @apermuy por recomendarme esta herramienta.

7 comments

  1. Como puedo realizar el backup en un servidor remoto. Ej en una Unidad NAS con dirección ip 192.168.x.x

  2. Puedes hacerlo de dos formas.

    1) Si en el NAS puedes ejecutar AutoMySQLBackup (típico en NAS basados en Linux) pues lo que tienes es que indicarle el host remoto donde está el MySQL, el que quieres respaldar, mediante la variable:

    CONFIG_mysql_dump_host=’IP-máquina-MySQL’

    y almacenar la información en el propio NAS, en una ruta local.

    2) Ejecutando AutoMySQLBackup en la misma máquina en la que tienes el MySQL y montando el NAS. Lo que tienes es que configurar el directorio base donde vas a dejar las copias de seguridad, mediante la variable:

    CONFIG_backup_dir=’/ruta/del/NAS’

  3. gran aporte Jesús, un tutorial muy claro, ahora a probarlo

  4. hola buen foro, realice todos los pasos pero al intentar verificar el estado del archivo automysqlbackup.log, me dice que ese archivo no esta creado. Podria indicarme que hacer ?

  5. Tienes que crearlo en el directorio correspondiente. Usa el comando “touch automysqlbackup.log” desde el directorio correspondiente y listo.

Leave a comment

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.