Bueno gente, un nuevo trabajo para nuestro bacula, y es precisamente backepear el mysql “en caliente” digo en caliente porque durante lo que dure el backup no se podrán escribir archivos, pero si leerlos.
mkdir /home/mysql/
—-/etc/sudores—-
%bacula ALL=NOPASSWD:/sbin/mysqlprebackup
—EOF—
—-/opt/mysqlbackup.sql—-
flush tables with read lock; system /sbin/mysqlbackup.sh unlock tables;
—EOF—
—-/sbin/mysqlprebackup—-
#!/bin/bash mysql -u root --password=XXXXXX < /opt/mysqlbackup.sql
---EOF---
----/sbin/mysqlbackup.sh----
#!/bin/bash rm -rf /home/mysql/* cp -rfp /var/lib/mysql/* /home/mysql/
---EOF---
Ahora todo lo que nos queda hacer es nuestro job para backupear /home/mysql/
Job {
Name = "Mysql"
Level = Full
FileSet = "Mysql"
JobDefs = "DefaultJob"
Schedule = "Daily"
Write Bootstrap = "/var/lib/bacula/Mysql.bsr"
# backup en caliente
RunBeforeJob = "sudo -u root /sbin/mysqlprebackup"
}
# Archivos que serán backupeados
FileSet {
Name = "Mysql"
Include {
Options {
signature = MD5
}
File = /home/mysql/
}
}
Reiniciamos el bacula
/etc/init.d/bacula-director restart
probamos
root@cari1:/opt# /sbin/bconsole
Connecting to Director tuhost.com:9101
1000 OK: tuhost.com-dir Version: 1.38.11 (28 June 2006)
Enter a period to cancel a command.
*run Mysql
Using default Catalog name=MyCatalog DB=bacula
Run Backup job
JobName: Mysql
FileSet: Mysql
Level: Full
Client: tuhost.com-fd
Storage: File
Pool: Default
When: 2009-12-02 12:45:11
Priority: 10
OK to run? (yes/mod/no): yes
Job started. JobId=21
Si no les funciona comente.
Saludos.
Tags: bacula, bacula mysql, bacula mysql backup, bacup de mysql, mysql backup en caliente
Personalmente creo que quedaría más bonito así:
—/sbin/mysqlbackup.sh—
#!/bin/bash
##ALGUNAS VARIABLES##
MYSQL_HOST=tu servidor de Mysql
MYSQL_USER=Un usuario con permiso de acceso a las bases de datos a respaldar
MYSQL_PASSWD=La dichosa contraseña 😀
MYSQL_BACKUP_DIR=Directorio en el que se guardarán las copias de seguridad
##FIN DE LAS VARIABLES##
for i in `mysql -h $MYSQL_HOST -u$MYSQL_USER -p$MYSQL_PASSWD -Bse “show databases”`; do
mysql -h $MYSQL_HOST -u$MYSQL_USER -p$MYSQL_PASSWD –database=$i -Bse “flush tables with read lock”;
nice -n 20 mysqldump –single-transaction –quick –skip-extended-insert -h $MYSQL_HOST -u$MYSQL_USER -p$MYSQL_PASSWD $i > $MYSQL_BACKUP_DIR/$i.sql
mysql -h $MYSQL_HOST -u$MYSQL_USER -p$MYSQL_PASSWD –database=$i -Bse “unlock tables”;
done
—EOF—
Luego en bacula hay que poner en la definición del trabajo:
RunBeforeJob=/sbin/mysqlbackup.sh
Así no tienes que tocar sudo y los ficheros resultantes son más portables entre servidores de MySQL, también creo haber leido en algún sitio que copiar los ficheros de las bases de datos de MySQL a pelo no te garantiza la integridad referencial en tablas InnoDB.
Por cierto… no hay que olvidar: chmod +x /sbin/mysqlbackup.sh
Lo he escrito todo de cabeza así que no garantizo su funcionamiento XD
Gracias Francisco por tu aporte 😉
MN
¿No probaste hacer los backups en caliente utilizando los binary logs de MySQL?
Nosotros los hacemos así y siempre con buenos resultados 🙂
Hola!
Tengo un par de dudas, resulta que quiero hacer una copia de seguridad del MySQL de un server y guardarlo en otro entonces, ¿Dónde he de poner los scripts? En el server del cual quiero hacer la copia o en el que la va a almacenar y, por otro lado… ¿Cómo hago para hacer un restore de los archivos que se generan en /home/mysql?
Saludos