2008/05/09

Использование Bacula для backup'а MySQL баз данных

При использовании Bacula для копирования MySQL баз данных на Bacula-клиенте (там, откуда необходимо копировать mysql-базы) необходимо создать скрипт /usr/loca/bin/mysqlhotcopyall:
#!/bin/bash
DBLIST="db1 db2 db3 mysql" # здесь необходимо указать имена баз, которые следует копировать
DBDIR=/var/lib/bacula/mysql
UP=" --user=$1 --password=$2"
LOGFILE=/var/log/backup.log
mkdir $DBDIR
for DATABASE in $DBLIST
do
mysqlhotcopy $UP $DATABASE ${DBDIR} --allowold >> ${LOGFILE}
done
Также необходимо в MySQL'е создать пользователя bacula, который будет выполнять блокировку и копирование указанных баз на время backup'а. Данному пользователю должны быть предоставлены глобальные привилегии SELECT, RELOAD, LOCK TABLES.
CREATE USER 'bacula'@'localhost' IDENTIFIED BY 'PASSWORD';
GRANT SELECT, RELOAD, LOCK TABLES ON *.* TO 'bacula'@'localhost' IDENTIFIED BY 'PASSWORD';
На Bacula Director'е в соответствующий job добавить строки:
ClientRunBeforeJob = "/usr/local/bin/mysqlhotcopyall bacula PASSWORD"
ClientRunAfterJob = "/bin/rm -rf /var/lib/bacula/mysql"
Благодаря указанным параметрам перед backup'ом с помощью утилиты mysqlhotcopy указанные базы будут скопированы в каталог /var/lib/bacula/mysql. После backup'а содержимое данного каталога будет очищено.

Поправка - данное решение работает только для таблиц типа MyISAM и ARCHIVE, таблицы INNODB следует копировать как минимум вручную, либо mysqldump'ом.

4 comments:

rusty_angel said...

mysqlhotcopy работает только для таблиц типа MyISAM и ARCHIVE. Так что дурацкое решение.

Roman Sozinov said...

to rusty_angel:
Внёс соответствующую правку в пост.
Имеете решение для INNODB?

rusty_angel said...

Хорошего и удобного - нет. LVM, FLUSH TABLES WITH READ LOCK.

Или дампить со слейва.

igor said...

Хорошее решение для InnoDB есть - xtrabackup.