#!/bin/bashТакже необходимо в MySQL'е создать пользователя bacula, который будет выполнять блокировку и копирование указанных баз на время backup'а. Данному пользователю должны быть предоставлены глобальные привилегии SELECT, RELOAD, LOCK TABLES.
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
CREATE USER 'bacula'@'localhost' IDENTIFIED BY 'PASSWORD';На Bacula Director'е в соответствующий job добавить строки:
GRANT SELECT, RELOAD, LOCK TABLES ON *.* TO 'bacula'@'localhost' IDENTIFIED BY 'PASSWORD';
ClientRunBeforeJob = "/usr/local/bin/mysqlhotcopyall bacula PASSWORD"Благодаря указанным параметрам перед backup'ом с помощью утилиты mysqlhotcopy указанные базы будут скопированы в каталог /var/lib/bacula/mysql. После backup'а содержимое данного каталога будет очищено.
ClientRunAfterJob = "/bin/rm -rf /var/lib/bacula/mysql"
Поправка - данное решение работает только для таблиц типа MyISAM и ARCHIVE, таблицы INNODB следует копировать как минимум вручную, либо mysqldump'ом.
4 comments:
mysqlhotcopy работает только для таблиц типа MyISAM и ARCHIVE. Так что дурацкое решение.
to rusty_angel:
Внёс соответствующую правку в пост.
Имеете решение для INNODB?
Хорошего и удобного - нет. LVM, FLUSH TABLES WITH READ LOCK.
Или дампить со слейва.
Хорошее решение для InnoDB есть - xtrabackup.
Post a Comment