SHARE
TWEET

Untitled

a guest Dec 23rd, 2017 56 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  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
RAW Paste Data
We use cookies for various purposes including analytics. By continuing to use Pastebin, you agree to our use of cookies as described in the Cookies Policy. OK, I Understand
 
Top