El binomio apache+mysql es algo muy común en un servidor web, sobre todo si éste corre bajo linux. Pero muchas veces el usuario se conforma con echar todo a andar, olvidandose de la importancia que adquiere hacer copias de seguridad de la base de datos aunque ésta sea de unos pocos kilobytes. Nosotros mismos, hasta hoy, no haciamos copias de seguridad del blog, por lo que si en alguna actualización de wordpress la base de datos se viera afectada, ibamos a tener que empezar de cero (Glups!).
Que nadie piense que para hacer esto se necesita leer mucha documentación. En tan solo unos pocos pasos, vais a ser capaces de tener vuestros backups bien ordenaditos en caso de catastrofe. Comencemos.
Preparación del script para hacer los backups de Mysql
Creamos un directorio para albergar todas las copias de seguridad de la base de datos.
mkdir /home/user/backupsmysql
En este caso lo hemos creado en el home de user. Podríamos crearlo donde nosotros creamos más conveniente.
Desde nuestro editor de texto favorito tecleamos el siguiente código:
#!/bin/sh
mysqldump -uuser -ppass –opt basedatos1 > /home/user/backupsmysql/basedatos1.sql
mysqldump -uuser -ppass –opt basedatos2 > /home/user/backupsmysql/basedatos2.sql
cd /home/user/backupsmysql
tar -zcvf backupmysql_$(date +%d%m%y).tgz *.sql
find -name ‘*.tgz’ -type f -mtime +60 -exec rm -f {} \;
Ahora tenemos que guardar este fichero con el nombre que nosotros queramos. En este ejemplo lo he guardado como backupmysql.sh y lo he dejado guardado en mi home.
Decir que este es un script tipo y que a la gente le pueden sobrar lineas porque no les hace falta o incluso deberían modificarlo para que además se envie a otra máquina que a su vez contenga backups de diferentes máquinas y diferentes bases de datos.
La primera línea #!/bin/sh indica al bash que es un script ejecutable y donde debe ir a buscar el bash que va a utilizar para ejecutar este script. En el caso que nos acontece es /bin/sh.
La segunda línea es la hace el respaldo de la base de datos. Mysqldump es un comando que copia todos los datos que estén dentro de la base de datos que le indiquemos en la línea de comandos. Las opciones que siguen al comando son:
- -user: Indica el usuario con el que nos vamos a conectar a la base de datos. Es importante que el usuario que utilicemos tenga permisos sobre esa base de datos.
- -pass: Se debe colocar el password del usuario que hemos utilizado en el campo user, sino no podremos acceder a la base de datos.
- –opt basedatos1: Nombre de la base de datos de la que se va a hacer el backup.
- El operador > hace que la salida sea guardada en el fichero basedatos1.sql en la carpeta /home/user/backupsmysql/
La tercera línea hace exactamente lo mismo. Está puesta a modo de ejemplo por si el usuario quisiera hacer copias de varias bases de datos desde un mismo script. Las tres lineas que vienen a continuación son opcionales.
En la cuarta linea nos posicionamos en /home/user/backupsmysql y con la quinta comprimimos los dos ficheros sql en un fichero tgz al que le añadimos la fecha para tener un control de cuando se hizo esa copia.
La última línea lo que hace es buscar todos los archivos comprimidos que tengan más de 60 días y los elimina. De esta forma evitaremos que se nos acumulen archivos en nuestros discos duros.
Todavía falta un paso para que este script pueda funcionar y es que deberemos hacer que pueda ejecutarse. Para ello:
chmod +x backupmysql.sh
Ahora lo añadimos a Cron que es por decirlo asi el programador de tareas que viene en todos los sabores de linux.
Añadir un script a Cron
Desde el bash del sistema tecleamos:
crontab -e
Se abrirá un archivo en principio vacio aunque con un comentario. Tan sólo deberemos pegar esta linea a la que habrá que hacer una serie de modificaciones en base a cuando queramos ejecutar el script que hemos creado en el anterior apartado.
0 0 * * * /home/user/backupmysql.sh
Guardamos el archivo y ya tenemos preparadas nuestras copias periódicas de las bases de datos mysql. Pero antes no podía irme sin explicar la estructura del fichero del crontab. Este archivo tiene la siguiente estructura:
- Minutos (rango de 0-59)
- Horas (0-23)
- Día del mes (1-31)
- Mes (1-12)
- Día de la semana (0-6 siendo 0=Domingo)
- Ruta completa del script que queremos ejecutar.
Atendiendo al ejemplo, le hemos dicho que ejecute nuestro backup todos los dias a las 0:00 horas. Ya sólo queda personalizarlo.
Dejar comentario