Entradas con la etiqueta ‘copias de seguridad de bases de datos mysql 5’

Como crear copias de seguridad de una base de datos mysql 5 instalada en un servidor Linux (mysqldump + cron)

Jueves, 14 de Agosto de 2008

Para hacer copias de seguridad periódicas de una base de datos Mysql, vamos a utlizar el comando mysqldump. Este comando nos muestra en pantalla la consulta con la sql necesaria para crear de nuevo la base de datos con toda la información. Es exactemente igual que si hacemos un exportar bd a fichero desde el phpMyAdmin.

Esta instrucción única con el programador de tareas cron servirán para copiar un fichero con la sql del backup de la base de datos seleccionada a una carpeta determinada.

veamos un ejemplo de como sería la instrucción de mysqldump, suponemos tener una Base de datos llamada “BaseDeDatos”, el usuario para acceder a la base de datos es “USUARIO”, y su contraseña es “ContraseñaSegura” :

mysqldump -uUSUARIO -pContraseñaSegura –opt BaseDeDatos

con esta instrucción se nos mostraria en pantalla la sql, para redicreccionarla a un fichero, será necesario añadirle al final: “> /directorioElegido/ficheroConElBackup.sql ” quedando así:

mysqldump -uUSUARIO -pContraseñaSegura –opt BaseDeDatos > /directorioElegido/ficheroConElBackup.sql

Recordar que si estamos usando Ubuntu será necesario añadir delante del comando la palabra sudo. Tener encuenta que será necesario crear el fichero la primera vez y darle permisos de escritura. otra opción es que la carpeta destino tenga los permisos necesarios. Si necesitaramos copiar varias bases de datos, mysqldump tiene un parámetro -all que copiaría todas las bases de datos, a las que el usuario de mysql tenga acceso, en un solo fichero.

para cambiar los permisos utilizar el comando chmod, ejemplo de utilización:
chmod 777 ficheroOCarpeta
daría escritura lectura a todos los usuarios, ajustar el nivel de seguridad segun nos interese. Una vez probado que este comando nos funciona correctamente y solo falta automatizar esta instrucción para que se ejecute con la periodicidad que queramos. Para ello utilizamos el comando cron. Veamos un ejemplo:

quiero copiar cada dia a las 13:00 el contenido de la base de datos anterior:

cron 0 13 * * * 'sudo mysqldump -uUSUARIO -pContraseñaSegura –opt BaseDeDatos > /directorioElegido/ficheroConElBackup.sql’;

De este modo programamos que a las 13:00 se ejecute el comando mysqldump encargado de hacer la copia de la base de datos. Tener en cuenta que cada día se machaca el fichero que creamos con lo que sólo tenemos una única copia, la del dia anterior. Apartir de aquí se podria hacer un script que guardara todos las copias con la fecha concatenada.

Haciendo pruebas en Xubuntu server , el comando parecia ir, pero no se ejecutaba cuando tocaba. Así que tuvimos que editar manualmente el fichero del crontab, que se encuentra en /etc/crontab

sudo mousepad /etc/crontab

Añadiendo una linea al final, la misma que explicabamos antes. Veamos un ejemplo del fichero:

# /etc/crontab: system-wide crontab
# Unlike any other crontab you don’t have to run the `crontab’
# command to install the new version when you edit this file.
# This file also has a username field, that none of the other crontabs do.

SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin

# m h dom mon dow user command
17 * * * * root run-parts –report /etc/cron.hourly
25 6 * * * root test -x /usr/sbin/anacron || run-parts –report /etc/cron.daily
47 6 * * 7 root test -x /usr/sbin/anacron || run-parts –report /etc/cron.weekly
52 6 1 * * root test -x /usr/sbin/anacron || run-parts –report /etc/cron.monthly
89 5 13 * * * root sudo mysqldump -uUSUARIO -pContraseñaSegura –opt BaseDeDatos > /directorioElegido/ficheroConElBackup.sql
#

Como se puede ver el primer parametro es el orden de preferencia de ejecuiones poner un numero mas alto. Os quedara todo en una sola linea, aqui en el ejemplo de cae, pero debe estar en la misma linea.

El primer sintoma de este error fue el siguiente. Tratando de recuperar la lista de tareas cron -l  el sistema lanzaba un error

cron: can’t open or create /var/run/crond.pid: Permission denied
administrador@ServerTaller:~$ sudo cron -l
Password:
cron: can’t lock /var/run/crond.pid, otherpid may be 4978: Resource temporarily unavailable

El primero permision denied, se soluciona añadiendo sudo, delante del comando. Pero despues nos da el error cron: can’t lock , que nos impide ver si se ha añadido correctamente nuestra nueva tarea. así es como detectemos el problema y pues busquemos alternativas.

En windows dentro de la carpeta del mysql/bin tambien disponemos del ejecutablre mysqldum.exe, así que seguramente también se podrian hacer algo similar con el programador de tareas de windows y mysql, alquien nos lo cuenta?