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 fileif 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.
Gracias por este post, voy a probarlo haber que tal !!!
Excelente tutorial !! .. Saludos
Como puedo realizar el backup en un servidor remoto. Ej en una Unidad NAS con dirección ip 192.168.x.x
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’
gran aporte Jesús, un tutorial muy claro, ahora a probarlo
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 ?
Tienes que crearlo en el directorio correspondiente. Usa el comando “touch automysqlbackup.log” desde el directorio correspondiente y listo.