Этот документ предоставляется без каких – либо гарантий! Я хочу сказать, что это не единственный способ создания такой системы. Есть много способов достижения этой цели, но я выбрал этот. Я не даю каких-либо гарантий, что это будет работать у вас!
Предварительные примечания
Чтобы следовать этому решению, вам нужен второй сервер MySQL (ведомый), и вы должны установить репликацию MySQL от вашего первого MySQL сервера (система, с которой вы хотите воспользоваться копий, мастер) на ведомую, например как описано в этой статье: http://www.howtoforge.com/mysql_database_replication. Установка репликации MySQL выходит за рамки этого документа.
Все настройки, которые я описываю здесь, должны быть сделаны на ведомом MySQL сервере!
Я испытал это на Debian системы; этом должен работать на другие дистрибутивы, но вполне возможно, что некоторые пути будут отличаться (в скрипте /usr/local/sbin/mysqlbackup.sh).
Выполнение автоматизированного резервного копирования реплицируемой базы данных на ведомом сервере
После того как вы создали рабочую репликации MySQL с основного сервера на ведомый, я предполагаю, что вы хотите сделать автоматическое резервное копирование ведомой базы данных в директорию /home/sqlbackup. Во-первых, вы должны создать эту директорию:
mkdir /home/sqlbackup
Далее мы создадим скрипт командного интерпретатора /usr/local/sbin/mysqlbackup.sh который остановит ведомую базу данных, сделает SQL дамп всей базы данных MySQL в /home/sqlbackup (имя файла дампа SQL будет выглядеть следующим образом: backup-20070423-18.sql; этот дамп получен 23 Апреля 2007 года, в 18.00ч), после чего перезапустит ведомую БД (ведомая БД наверстает все, что случилось на основной БД так, чтобы никакие данные не были потеряны), и удалит все SQL дампы в /home/sqlbackup которые старше, чем два дня:
vi /usr/local/sbin/mysqlbackup.sh
#--------mysqlbackup.sh-----------------------------------------
#!/bin/sh
datum=`/bin/date +%Y%m%d-%H`
/usr/bin/mysqladmin --user=root --password=yourrootsqlpassword stop-slave
/usr/bin/mysqldump --user=root --password=yourrootsqlpassword --lock-all-tables
--all-databases > /home/sqlbackup/backup-${datum}.sql
/usr/bin/mysqladmin --user=root --password=yourrootsqlpassword start-slave
for file in "$( /usr/bin/find /home/sqlbackup -type f -mtime +2 )"
do
/bin/rm -f $file
done
exit 0
#------------------------------------------------------------------
(Пожалуйста, убедитесь, что вы заменили "yourrootsqlpassword" на пароль root MySQL, используемый на ведомой базе данных!)
Теперь мы должны сделать скрипт исполняемым:
chmod 755 /usr/local/sbin/mysqlbackup.sh
Конечно, мы не хотим запустить /usr/local/sbin/mysqlbackup.sh вручную; вместо этого мы создадим задание cron которое запускает скрипт автоматически каждые три часа:
crontab -e
0 */3 * * * /usr/local/sbin/mysqlbackup.sh &> /dev/null
Конечно, вы можете свободно изменять задание cron для запуска с такой частотой, которая вам нужна.
http://www.sbsi.ru