Guest User

Untitled

a guest
Dec 23rd, 2017
115
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.22 KB | None | 0 0
  1. В свете событий крушения бд на почтовом сервере возникла идея настройки бэкапа . В следствии чего и родился скрипт:
  2.  
  3. #!/bin/sh
  4. SERVER=10.88.0.8
  5. USER=mebackup
  6. PASS=62920
  7. SOURCE_DIRS="/etc/courier /etc/postfix /usr/share/roundcube /var/lib/roundcube"
  8. DB=postfix.sql
  9. /usr/bin/mysqldump -upostfix -pinheltkm postfix > /tmp/postfix.sql
  10. sleep 1
  11. cd /tmp
  12. rm -rf $(ls | grep backup | grep -v grep)
  13. tar czvf backup-$(uname -n)-$(date +%k%M%S-%d%m%Y | sed 's/ //').tar.gz $SOURCE_DIRS
  14. FILE=$(ls /tmp/ | grep tar.gz | grep -v grep)
  15. ftp -n $SERVER << EOS
  16. user $USER $PASS
  17. verbose
  18. prompt
  19. binary
  20. put $FILE
  21. put $DB /db/$(uname -n)-$(date +%k%M%S-%d%m%Y | sed 's/ //')-$DB
  22. quit
  23. EOS
  24. rm -rf $(ls | grep backup | grep -v grep)
  25. В будущем планирую оптимизацию и небольшую реорганизацию скрипта ,но пока работает так.
  26. В данном примере скрипт взят с почтового сервера, создаёт дамп базы и каталогов причисленных в переменной SOURCE_DIRS
  27. Также в начале скрипта задаются адрес сервера , логин и пароль.
  28. резервирование происходит по протоколу фтп ,для функционирования скрипта необходим пакет inet-utils ,содержащий утилиту ftp.
  29. Имя резервной копии складывается из имени хоста (uname -n) и текущей даты в формате час|минута|секунда/день/месяц/год (date +%k%M%S-%d%m%Y)
  30. Все манипуляции с резервной копией происходят в каталоге /tmp и после завершения копирования удаляются.
  31. После создания скрипт можно положить в любую директорию , только нужно сделать файл исполняемым (chmod +x).
  32. Теперь для правильной работы бэкапа нужно засунуть его в крон.Обычно я делаю бэкапы в 4-5 утра, когда большинство юзеров спит и изменения файлов будут минимальны.
  33. CRON
  34.  
  35. Сначала смотрим какой файл сценариев использует крон
  36.  
  37. crontab -l
  38.  
  39. Если никакого не использует , то создаём :
  40.  
  41. cat > /etc/crontab
  42. например мы положили наш скрипт с названием backup.sh в папку /etc/cron.d и хотим чтоб он запускался каждый день в 4 50 утра. Дописываем в конец файла crontab строчку :
  43.  
  44. 4 50 * * * /etc/cron.d/backup.sh
  45.  
  46. На следующее утро проверяем, если сделали всё правильно то в папке бэкапов на сервере появится наш бэкап.
  47.  
  48. Troubleshooting
  49.  
  50. Если на утро мы обнаруживаем что в файле с бэкапом пусто , тоесть архив есть , но пустой то идём в наш скриптик и убираем вербосинг , тоесть стираем verbose и убираем -v в возможных параметрах команд которые мы добавляли в скирпт.
  51.  
  52. Автоматическое удаление старых копий
  53.  
  54. #!/bin/sh
  55.  
  56.  
  57. BACKUP_DIR=/home/ftp/mebackup/
  58. LIST_IGNORE=/tmp/list.ignore
  59. TIME_FORMAT=+%d%m%Y
  60. ARCHIVE_FORMAT=tar.gz
  61. SUB_DIR1=dns
  62. SUB_DIR2=db
  63.  
  64. #check list file
  65. touch $LIST_IGNORE
  66. #make ignore list for save days
  67. for day in {0..7}
  68. do
  69. echo $(date --date=" -$(echo $day) day" $TIME_FORMAT) >> $LIST_IGNORE ;
  70. done
  71. #removing
  72. cd $BACKUP_DIR
  73. rm -f $(ls | grep $ARCHIVE_FORMAT | grep -v 01'[0-1][0-9]'$(date +%Y) | fgrep -v -f $LIST_IGNORE )
  74. cd $SUB_DIR1
  75. rm -f $(ls | grep $ARCHIVE_FORMAT | grep -v 01'[0-1][0-9]'$(date +%Y) | fgrep -v -f $LIST_IGNORE )
  76. cd $BACKUP_DIR
  77. cd $SUB_DIR2
  78. rm -f $(ls | grep -v 01'[0-1][0-9]'$(date +%Y) | fgrep -v -f $LIST_IGNORE )
  79. #clean ignore list
  80. echo " " > $LIST_IGNORE ;
  81. Скрипт в указанных директориях выбирает файлы со временем указанным в имени файла , которое соответствует шаблону указанному в переменной TIME_FORMAT.
  82. Далее удаляются все файлы в директориях кроме созданных первого числа любого месяца и файлов созданных за последние 7 дней с текущей даты. !ВНИМАНИЕ не допускать съезжания времени т.к. это может привести к удалению всех файлов кроме тех которые созданы 1 числа любого месяца.
  83. Скрипт добавлен в крон на сервере бэкапов и будет запускаться каждое утро:
  84. 6 30 * * * /etc/cron.d/clean_backup.sh
Add Comment
Please, Sign In to add comment