
Hoy en la mañana estaba leyendo este artículo llamado Script para backups automáticos de tu servidor lo vi y me pareció una buena idea hacer uno propio para respaldar todas las bases de datos que tengo en mi servidor MySQL .
Tomé prestadas algunas ideas del script que muestran en DesdeLinux.net y otras del sitio Tail -f Backup de todas las bases de datos MySQL en archivos separados.
El script de DesdeLinux es muy completo, hacen un respaldo de varios archivos, un vaciado de las bases de datos que consideran importantes y hasta envía un correo electrónico a los administradores con el resultado del respaldo. En lo personal a mi me gusta copiar archivos utilizando el comando rsync , pero esa es otra historia.
Al principio intenté hacer un mysqldump de todas las bases de datos en un solo archivo, pero el resultado fue un mega archivo de 27 MB que era muy difícil de abrir para gedit (o cualquier otro editor de texto). Si solo necesito restaurar una base de datos en lugar de todas la tarea se puede complicar un poco.
Por eso que decidí generar un solo archivo para cada base de datos del servidor MySQL. Ahí es donde entra en acción el script de Tail que explica muy bien como generar un archivo independiente por cada base de datos.
El resultado es un archivo por cada base de datos que incluye en el nombre del archivo la fecha en la que fue realizado el respaldo.
El script esta diseñado para ejecutarse en un equipo diferente al que ejecuta el servidor de base de datos, aunque supongo que si le ponen localhost en la variable IP_SERVIDOR_MYSQL también puede funcionar.
Como un plus, el script realiza una optimización y reparación de todas las bases de datos del servidor antes de hacer el vaciado de las bases de datos.
#!/bin/sh
#
# Este programa es software libre. Puede redistribuirlo y/o
# modificarlo bajo los términos de la Licencia Pública General
# de GNU según es publicada por la Free Software Foundation,
# bien de la versión 2 de dicha Licencia o bien (según su
# elección) de cualquier versión posterior.
#
# Este programa se distribuye con la esperanza de que sea
# útil, pero SIN NINGUNA GARANTÍA, incluso sin la garantía
# MERCANTIL implícita o sin garantizar la CONVENIENCIA PARA UN
# PROPÓSITO PARTICULAR. Para más detalles, véase la Licencia
# Pública General de GNU.
#
# Copyleft 2012
# Autor: Linuxman inguanzo@gmail.com http://linuxmanr4.com
# versión 2.0
NAME="MySQL Backup" # Nombre script.
# Descripción: Script para hacer un respaldo de todas las bases de datos de un servidor MySQL.
: ${DATE:=$(date +'%Y-%m-%d')} # Variable para Fecha.
: ${TIME:=$(date +'%R')} # Variable para Hora.
: ${WORK_DIR:=/home/usuario/directorioderespaldo/} # Directorio de trabajo.
: ${IP_SERVIDOR_MYSQL:=IP_DEL_SERVIDOR_MYSQL} # Dirección del servidor MySQL.
: ${USUARIO:=root} # Usuario con privilegios a la base de datos. Ej. root
: ${DB_PASS:=CONTRASEÑA} # La contraseña de root de nuestro servidor MySQL.
# Antes de respaldar optimizamos y reparamos las bases de datos.
clear
echo "Revisando y reparando las bases de datos."
echo "========================================="
mysqlcheck -c -A --auto-repair -h $IP_SERVIDOR_MYSQL -u $USUARIO --password=$DB_PASS
echo
echo "Optimizando las bases de datos."
echo "========================================="
mysqlcheck -A -o -h $IP_SERVIDOR_MYSQL -u $USUARIO --password=$DB_PASS
# Cambiamos a nuestro directorio de trabajo
cd $WORK_DIR
echo
echo "Iniciando el vaciado de todas las bases de datos."
echo "================================================="
# Iniciamos un vaciado de todas las bases de datos del servidor.
TABLES=`mysql -h $IP_SERVIDOR_MYSQL -u$USUARIO --password=$DB_PASS --execute="SHOW DATABASES;" |awk '{print($1)}' |grep -v "Database" |grep -v "information_schema"`
for table in $TABLES; do
echo "Respaldando la tabla $table..."
file=$table.respaldo_`date +%Y%m%d`.sql
mysqldump -h $IP_SERVIDOR_MYSQL -u"$USUARIO" -p"$DB_PASS" $table > $file
echo "Comprimiendo $file ..."
gzip $file
done
echo
echo "RESPALDO TERMINADO!!!"
Ajustando los parámetros
Para utilizarlo es necesario descargar el archivo, abrirlo y modificar los parámetros
- WORK_DIR Es la ruta donde quieres que se guarden los archivos.
- IP_SERVIDOR_MYSQL Es la dirección ip del servidor, también podría funcionar un nombre de dominio o si el servidor es la misma maquina en la que se ejecuta el script localhost sería lo correcto.
- USUARIO Un usuario con los permisos de acceso necesarios, root funciona la mayoría de las veces.
- DB_PASS La contraseña del usuario :)
Para ejecutar el script es necesario darle permisos de ejecución con:
chmod +x respaldo_mysql.sh
Y suerte !!!
El script funciona muy bien en mi equipo y espero que en el de ustedes también. Si tienen alguna duda favor de poner un comentario.
Actualización. Este script dejó de funcionar por un error al intentar ejecutar varias tareas de manera simultánea, pueden ver la versión más reciente en: Script para respaldar bases de datos MySQL versión 2 .