Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/bin/bash
- DAV_SERV="https://webdav.yandex.ru/backup/" # with path and trailing /
- DAV_USER="юзер"
- DAV_PASS="пароль"
- DB_HOST="localhost"
- DB_USER="root"
- DB_PASS="пароль_бд"
- STORE_PASS="пароль_архивов" # Pass to encrypt file before uploading
- # get list of backups
- curl --user ${DAV_USER}:${DAV_PASS} -o backup-log.txt ${DAV_SERV}backup-log.txt &> /dev/null
- # get list of existing databases
- DBLIST="$(echo "show databases;" | /usr/bin/mysql -s -h ${DB_HOST} -u ${DB_USER} -p${DB_PASS} | /bin/grep -vE "^(information_schema)$")" #"
- # dump, compress and encrypt them
- FILES_LIST=""
- for DB in ${DBLIST}; do
- echo "Dumping ${DB}."
- FILENAME="$(date +%Y-%m-%d)-DB-${DB}.sql.lzma.gpg"
- /usr/bin/mysqldump -c -h ${DB_HOST} -u ${DB_USER} -p${DB_PASS} --databases ${DB} | \
- /usr/bin/xz -z -9 -q -F lzma --memlimit=150MiB | \
- /usr/bin/gpg --batch -q --no-tty --compress-algo none --cipher-algo AES --passphrase "${STORE_PASS}" -c > ${FILENAME}
- FILES_LIST="${FILES_LIST},${FILENAME}"
- done
- # upload compressed files
- FILES_LIST="$(echo "${FILES_LIST}" | sed -r 's/^,(.+)$/\1/')" # remove unneeded leading ','
- #echo "${FILES_LIST}"
- echo "Uploading to cloud."
- if ! curl --user ${DAV_USER}:${DAV_PASS} -T {${FILES_LIST}} ${DAV_SERV}; then
- echo "Upload failed. removing files and exiting."
- FILES_LIST="$(echo "${FILES_LIST}" | tr ',' ' ')" # convert ',' to spaces
- rm -f ${FILES_LIST}
- exit
- fi
- # remove compressed files
- FILES_LIST="$(echo "${FILES_LIST}" | tr ',' ' ')" # convert ',' to spaces
- echo "Removing ${FILES_LIST}."
- rm -f ${FILES_LIST}
- # parse log and remove old backups
- if [ -e backup-log.txt1 ]; then
- rm -f backup-log.txt1
- touch backup-log.txt1
- fi
- echo "Cleaning old backups."
- NOW="$(date +%s)"
- while read line; do
- FIRSTPART="$(echo "${line}" | cut -f1 -d ' ')"
- TIMESTAMP="$(echo "${line}" | sed -r 's/^([0-9]+) .*/\1/' )"
- if [ ! -z "${TIMESTAMP}" ] && [ "${FIRSTPART}" == "${TIMESTAMP}" ]; then
- let DDIF="NOW - TIMESTAMP"
- if [ "${DDIF}" -gt "2678400" ]; then # 60 seconds *60*24*31 = 2678400 = month
- # remove file from cloud and skip line
- FILENAME="$(echo "${line}" | cut -f2- -d ' ')"
- if curl --user ${DAV_USER}:${DAV_PASS} --request DELETE "${DAV_SERV}${FILENAME}" &> /dev/null; then
- echo "${FILENAME} removed."
- else
- echo "Can't remove ${FILENAME}."
- echo "${line}" >> backup-log.txt1
- fi
- else
- echo "${line}" >> backup-log.txt1
- fi
- fi
- done < backup-log.txt
- echo "Fixing log."
- for FILENAME in ${FILES_LIST}; do
- echo "${NOW} ${FILENAME}" >> backup-log.txt1
- done
- cat backup-log.txt1 > backup-log.txt
- curl --user ${DAV_USER}:${DAV_PASS} -T backup-log.txt ${DAV_SERV}
- rm -f backup-log.txt backup-log.txt1
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement