| 4X_Pro
Руководитель Проекта
Настоящий Компьютерщик
Откуда: Москва Всего сообщений: 2994 Рейтинг пользователя: 79
Дата регистрации на форуме: 29 сен. 2001
|
Профиль | Сообщить модератору | ИгнорироватьNEW! Сообщение отправлено: 30 июня 2007 21:58 Сообщение отредактировано: 30 июня 2007 21:59
Иногда бывает нужно повесить на cron резеврное копирование нескольких баз так, чтобы в любой момент времени была доступна не только самая последняя копия, но и несколько предыдущих. Сделать это можно, например, вот таким скриптом:
#!/bin/sh
####################################
# Simple database backup and rotate script
# © 2007, XXXX Pro, United Open Project
# http://www.openproj.ru
####################################
BACKUP_COUNT=5; # количество backupов, которые нужно хранить
CHARSET='cp1251'; # кодировка базы данных
USER='root'; # логин, от которого подключаемся
PASSWORD='*********'; # пароль
BASES='vgd vgd_forum'; # список баз для backup, разделенных пробелом
for base in $BASES; do
echo 'Dumping base '$base'...';
mysqldump -K -e --default-character-set=$CHARSET -u $USER -p$PASSWORD $base>$base'0.sql'
if [ -s $base'0.sql' ]; then #если снятие дампа прошло успешно
BACKUP=$BACKUP_COUNT;
echo 'Compressing and rotating backups...'
gzip $base'0.sql'
if [ -f $base$BACKUP.sql.gz ]; then
unlink $base$BACKUP.sql.gz
fi;
while [ $BACKUP -gt 0 ]; do
let BACKUP_OLD=BACKUP-1
if [ -f $base$BACKUP_OLD.sql.gz ]; then
mv $base$BACKUP_OLD.sql.gz $base$BACKUP.sql.gz
fi;
BACKUP=$BACKUP_OLD;
done
else
echo 'Backup failed! No backups rotated!';
fi
done
echo 'Done all!';
В итоге получаются файлы вида имя_базы_номер.sql.gz, при этом самый новый файл имеет номер 1.
--- Каждый человек всегда может найти, чем он может быть полезен окружающим. Проблема только в одном: слишком многие не хотят это искать.
|