Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- В свете событий крушения бд на почтовом сервере возникла идея настройки бэкапа . В следствии чего и родился скрипт:
- #!/bin/sh
- SERVER=10.88.0.8
- USER=mebackup
- PASS=62920
- SOURCE_DIRS="/etc/courier /etc/postfix /usr/share/roundcube /var/lib/roundcube"
- DB=postfix.sql
- /usr/bin/mysqldump -upostfix -pinheltkm postfix > /tmp/postfix.sql
- sleep 1
- cd /tmp
- rm -rf $(ls | grep backup | grep -v grep)
- tar czvf backup-$(uname -n)-$(date +%k%M%S-%d%m%Y | sed 's/ //').tar.gz $SOURCE_DIRS
- FILE=$(ls /tmp/ | grep tar.gz | grep -v grep)
- ftp -n $SERVER << EOS
- user $USER $PASS
- verbose
- prompt
- binary
- put $FILE
- put $DB /db/$(uname -n)-$(date +%k%M%S-%d%m%Y | sed 's/ //')-$DB
- quit
- EOS
- rm -rf $(ls | grep backup | grep -v grep)
- В будущем планирую оптимизацию и небольшую реорганизацию скрипта ,но пока работает так.
- В данном примере скрипт взят с почтового сервера, создаёт дамп базы и каталогов причисленных в переменной SOURCE_DIRS
- Также в начале скрипта задаются адрес сервера , логин и пароль.
- резервирование происходит по протоколу фтп ,для функционирования скрипта необходим пакет inet-utils ,содержащий утилиту ftp.
- Имя резервной копии складывается из имени хоста (uname -n) и текущей даты в формате час|минута|секунда/день/месяц/год (date +%k%M%S-%d%m%Y)
- Все манипуляции с резервной копией происходят в каталоге /tmp и после завершения копирования удаляются.
- После создания скрипт можно положить в любую директорию , только нужно сделать файл исполняемым (chmod +x).
- Теперь для правильной работы бэкапа нужно засунуть его в крон.Обычно я делаю бэкапы в 4-5 утра, когда большинство юзеров спит и изменения файлов будут минимальны.
- CRON
- Сначала смотрим какой файл сценариев использует крон
- crontab -l
- Если никакого не использует , то создаём :
- cat > /etc/crontab
- например мы положили наш скрипт с названием backup.sh в папку /etc/cron.d и хотим чтоб он запускался каждый день в 4 50 утра. Дописываем в конец файла crontab строчку :
- 4 50 * * * /etc/cron.d/backup.sh
- На следующее утро проверяем, если сделали всё правильно то в папке бэкапов на сервере появится наш бэкап.
- Troubleshooting
- Если на утро мы обнаруживаем что в файле с бэкапом пусто , тоесть архив есть , но пустой то идём в наш скриптик и убираем вербосинг , тоесть стираем verbose и убираем -v в возможных параметрах команд которые мы добавляли в скирпт.
- Автоматическое удаление старых копий
- #!/bin/sh
- BACKUP_DIR=/home/ftp/mebackup/
- LIST_IGNORE=/tmp/list.ignore
- TIME_FORMAT=+%d%m%Y
- ARCHIVE_FORMAT=tar.gz
- SUB_DIR1=dns
- SUB_DIR2=db
- #check list file
- touch $LIST_IGNORE
- #make ignore list for save days
- for day in {0..7}
- do
- echo $(date --date=" -$(echo $day) day" $TIME_FORMAT) >> $LIST_IGNORE ;
- done
- #removing
- cd $BACKUP_DIR
- rm -f $(ls | grep $ARCHIVE_FORMAT | grep -v 01'[0-1][0-9]'$(date +%Y) | fgrep -v -f $LIST_IGNORE )
- cd $SUB_DIR1
- rm -f $(ls | grep $ARCHIVE_FORMAT | grep -v 01'[0-1][0-9]'$(date +%Y) | fgrep -v -f $LIST_IGNORE )
- cd $BACKUP_DIR
- cd $SUB_DIR2
- rm -f $(ls | grep -v 01'[0-1][0-9]'$(date +%Y) | fgrep -v -f $LIST_IGNORE )
- #clean ignore list
- echo " " > $LIST_IGNORE ;
- Скрипт в указанных директориях выбирает файлы со временем указанным в имени файла , которое соответствует шаблону указанному в переменной TIME_FORMAT.
- Далее удаляются все файлы в директориях кроме созданных первого числа любого месяца и файлов созданных за последние 7 дней с текущей даты. !ВНИМАНИЕ не допускать съезжания времени т.к. это может привести к удалению всех файлов кроме тех которые созданы 1 числа любого месяца.
- Скрипт добавлен в крон на сервере бэкапов и будет запускаться каждое утро:
- 6 30 * * * /etc/cron.d/clean_backup.sh
Add Comment
Please, Sign In to add comment