Advertisement
Guest User

Untitled

a guest
Mar 2nd, 2017
89
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.55 KB | None | 0 0
  1. #!/bin/sh
  2.  
  3. # параметры FTP сервера, кудась заливаем бэкапы
  4. FTP_HOST="10.10.10.10"
  5. FTP_USER="user"
  6. FTP_PASSWD="12345"
  7.  
  8. # день полного бэкапа, если не указан, то определяется автоматом при первом
  9. # запуске для некой балансировки нагрузки (чтобы все сервера не ломились
  10. # на FTP с полными бэкапами в один день)
  11. #FULL_BACKUP_WEEK_DAY="1"
  12.  
  13. # сколько полных бэкапов хранить на FTP
  14. KEEP_FULL_BACKUPS="2"
  15.  
  16. # если нужно бэкапить базы
  17. #DB_NAMES="db1 db2 db3..."
  18. DB_NAMES="wiki"
  19. DB_ROOT_USER="root"
  20. DB_ROOT_PASS="12345"
  21. DB_KEEP_BACKUPS="7"
  22.  
  23. #set -x
  24.  
  25. BACKUP_NAME=`date +'%Y-%m-%d'`
  26.  
  27. # определяем день полного бэкапа, если он не задан
  28. if [ "${FULL_BACKUP_WEEK_DAY}" == "" ] ; then
  29. [ ! -e "/var/tmp/backup-full_backup_week_day" ] && echo $((RANDOM%7+1)) > /var/tmp/backup-full_backup_week_day
  30. FULL_BACKUP_WEEK_DAY=`cat /var/tmp/backup-full_backup_week_day`
  31. fi
  32.  
  33. # определяем вид бэкапа: полный или инкрементный
  34. if [ "`date +%u`" == ${FULL_BACKUP_WEEK_DAY} -o ! -e "/var/tmp/backup-dumpinfo" ] ; then
  35. rm -f /var/tmp/backup-dumpinfo
  36. BACKUP_NAME="${BACKUP_NAME}-full"
  37. fi
  38.  
  39. # бэкапим файлы
  40. ( nice tar --create --gzip --sparse --listed-incremental=/var/tmp/backup-dumpinfo \
  41. --exclude='/proc/*' \
  42. --exclude='/sys/*' \
  43. --exclude='/tmp/*' \
  44. --exclude='/var/log/*.gz' \
  45. --exclude='/home/*' \
  46. / | ncftpput -c -u ${FTP_USER} -p ${FTP_PASSWD} -t 60 -V ${FTP_HOST} "/${BACKUP_NAME}.tgz" ) 2>&1 | \
  47. grep -v "socket ignored" | grep -v "Removing leading" | \
  48. grep -v "Cannot stat: No such file or directory" | \
  49. grep -v "file changed as we read it" | \
  50. grep -v "File removed before we read it" | \
  51. grep -v "Удаляется начальный .* из имен объектов" | \
  52. grep -v "Error exit delayed from previous errors"
  53.  
  54. # удаляем старые бэкапы файлов
  55. COUNTER_FULL=0
  56. for NAME in `ncftpls -u ${FTP_USER} -p ${FTP_PASSWD} -t 60 ftp://${FTP_HOST} | sort -r`; do
  57. # пропускаем все файлы в других форматах
  58. [[ ${NAME} =~ ^\/[0-9]{4}*-[0-9]{2}-[0-9]{2}(-full)?.tgz$ ]] || continue
  59.  
  60. [ ${COUNTER_FULL} -ge ${KEEP_FULL_BACKUPS} ] && \
  61. ncftpput -u ${FTP_USER} -p ${FTP_PASSWD} -t 60 -V -Y "RM ${NAME}" ${FTP_HOST} / /etc/hosts
  62.  
  63. [[ ${NAME} =~ ^\/[0-9]{4}*-[0-9]{2}-[0-9]{2}-full.tgz$ ]] && COUNTER_FULL=`expr ${COUNTER_FULL} + 1`
  64. done
  65.  
  66. # бэкапим базы
  67. for DATABASE in ${DB_NAMES} ; do
  68. mysqldump -u${DB_ROOT_USER} -p${DB_ROOT_PASS} --events --quick --force --routines --triggers --create-options --single-transaction ${DATABASE} | gzip | \
  69. ncftpput -c -u ${FTP_USER} -p ${FTP_PASSWD} -t 60 -V ${FTP_HOST} "/`date +'%Y-%m-%d'`-${DATABASE}.sql.gz"
  70.  
  71. # удаляем старые бэкапы базы данных
  72. COUNTER=0
  73. for NAME in `ncftpls -u ${FTP_USER} -p ${FTP_PASSWD} -t 60 ftp://${FTP_HOST} | sort -r`; do
  74. # пропускаем все файлы в других форматах
  75. [[ ${NAME} =~ ^\/[0-9]{4}*-[0-9]{2}-[0-9]{2}-${DATABASE}.sql.gz$ ]] || continue
  76.  
  77. [ ${COUNTER} -ge ${DB_KEEP_BACKUPS} ] && \
  78. ncftpput -u ${FTP_USER} -p ${FTP_PASSWD} -t 60 -V -Y "RM ${NAME}" ${FTP_HOST} / /etc/hosts
  79.  
  80. COUNTER=`expr ${COUNTER} + 1`
  81. done
  82. done
  83.  
  84. # удаляем файл hosts
  85. ncftpput -u ${FTP_USER} -p ${FTP_PASSWD} -t 60 -V -Y "RM hosts" ${FTP_HOST} / /etc/hosts
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement