Skip to content

Instantly share code, notes, and snippets.

@chatlamin
Last active March 28, 2018 08:07
Show Gist options
  • Select an option

  • Save chatlamin/aaba6f6444c4bda52bd4f546e289b741 to your computer and use it in GitHub Desktop.

Select an option

Save chatlamin/aaba6f6444c4bda52bd4f546e289b741 to your computer and use it in GitHub Desktop.
new backup postgresql
#устанавливаем необходимое для работы скрипта
sudo apt install postgresql-client
sudo apt install curlftpfs
sudo apt install sendemail
#проверить откравку почты, если есть ошибка
#ERROR => No TLS support! SendEmail can't load required libraries. (try installing Net::SSLeay and IO::Socket::SSL)
#устанавливаем sudo apt-get install libio-socket-ssl-perl libnet-ssleay-perl
DB_USERNAME=login
DB_NAME=mydb
DB_PASSWORD=password
DB_HOST=192.168.0.1
TIMESTAMP="date +%d-%m-%Y_%H-%M"
BACKUP_DIR='/home/admin/pg_backup'
FILENAME=$DB_NAME-`$TIMESTAMP`.sql.gz
FTP='ftp://192.168.0.2/backup/'
FTP_MOUNT='192.168.0.2/backup/'
FTP_USERNAME=login
FTP_PASSWORD=password
MOUNT_DIR='/home/admin/pg_backupftp/'
LOG_FILE='/home/admin/logger/log1.log'
MAIL_FROM='myemail@gmail.com'
MAIL_TO='myemail2@gmail.com'
MAIL_NAME='my backup'
MAIL_BODY="backup '$DB_NAME' ERROR"
MAIL_SMTP='smtp.gmail.com:587'
MAIL_LOGIN='myemail@gmail.com'
MAIL_PASS='password'
readonly SCRIPT_NAME=$(basename $0)
log() {
echo "$@" >> $LOG_FILE
logger -p user.notice -t $SCRIPT_NAME "$@"
}
err() {
echo "$@" >> $LOG_FILE
logger -p user.error -t $SCRIPT_NAME "$@"
}
# $1 - название задачи
# $2 - задача
run_task() {
log `$TIMESTAMP` start $1
eval $2
RET_CODE=$?
if [ $RET_CODE -eq 0 ] ; then
log `$TIMESTAMP` finish $1
else
sendEmail -o tls=yes -f $MAIL_FROM -t $MAIL_TO -s $MAIL_SMTP -xu $MAIL_LOGIN -xp $MAIL_PASS -u "$MAIL_NAME" -m "$MAIL_BODY `$TIMESTAMP` "
err `$TIMESTAMP` ERROR $1
exit $RET_CODE
fi
}
run_task "local_backup" "pg_dump postgres://$DB_USERNAME:$DB_PASSWORD@$DB_HOST/$DB_NAME | gzip > $BACKUP_DIR/$FILENAME"
run_task "rotate_backup" "find $BACKUP_DIR -name '*.gz' -mtime +2 -delete"
run_task "remote_backup" "curl -u $FTP_USERNAME:$FTP_PASSWORD -T $BACKUP_DIR/$FILENAME $FTP"
run_task "remote_initislize" "curlftpfs $FTP_USERNAME:$FTP_PASSWORD@$FTP_MOUNT $MOUNT_DIR"
run_task "rotate_remote_backup" "find $MOUNT_DIR -name '*.gz' -mtime +7 -delete"
run_task "finish" "umount $MOUNT_DIR"
# Добавляем скрипт в cron:
# sudo crontab -e
# * * * * * /home/admin/pg_backup.sh > /dev/null 2>&1
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment